• Vladimir Oltean's avatar
    net: enetc: deny offload of tc-based TSN features on VF interfaces · 5641c751
    Vladimir Oltean authored
    TSN features on the ENETC (taprio, cbs, gate, police) are configured
    through a mix of command BD ring messages and port registers:
    enetc_port_rd(), enetc_port_wr().
    
    Port registers are a region of the ENETC memory map which are only
    accessible from the PCIe Physical Function. They are not accessible from
    the Virtual Functions.
    
    Moreover, attempting to access these registers crashes the kernel:
    
    $ echo 1 > /sys/bus/pci/devices/0000\:00\:00.0/sriov_numvfs
    pci 0000:00:01.0: [1957:ef00] type 00 class 0x020001
    fsl_enetc_vf 0000:00:01.0: Adding to iommu group 15
    fsl_enetc_vf 0000:00:01.0: enabling device (0000 -> 0002)
    fsl_enetc_vf 0000:00:01.0 eno0vf0: renamed from eth0
    $ tc qdisc replace dev eno0vf0 root taprio num_tc 8 map 0 1 2 3 4 5 6 7 \
    	queues 1@0 1@1 1@2 1@3 1@4 1@5 1@6 1@7 base-time 0 \
    	sched-entry S 0x7f 900000 sched-entry S 0x80 100000 flags 0x2
    Unable to handle kernel paging request at virtual address ffff800009551a08
    Internal error: Oops: 96000007 [#1] PREEMPT SMP
    pc : enetc_setup_tc_taprio+0x170/0x47c
    lr : enetc_setup_tc_taprio+0x16c/0x47c
    Call trace:
     enetc_setup_tc_taprio+0x170/0x47c
     enetc_setup_tc+0x38/0x2dc
     taprio_change+0x43c/0x970
     taprio_init+0x188/0x1e0
     qdisc_create+0x114/0x470
     tc_modify_qdisc+0x1fc/0x6c0
     rtnetlink_rcv_msg+0x12c/0x390
    
    Split enetc_setup_tc() into separate functions for the PF and for the
    VF drivers. Also remove enetc_qos.o from being included into
    enetc-vf.ko, since it serves absolutely no purpose there.
    
    Fixes: 34c6adf1 ("enetc: Configure the Time-Aware Scheduler via tc-taprio offload")
    Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
    Link: https://lore.kernel.org/r/20220916133209.3351399-2-vladimir.oltean@nxp.comSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    5641c751
Makefile 619 Bytes