1
0
Fork 0
mirror of synced 2025-03-06 20:59:54 +01:00
linux/drivers/net
Florian Kauer 8b86f10ab6 igc: No strict mode in pure launchtime/CBS offload
The flags IGC_TXQCTL_STRICT_CYCLE and IGC_TXQCTL_STRICT_END
prevent the packet transmission over slot and cycle boundaries.
This is important for taprio offload where the slots and
cycles correspond to the slots and cycles configured for the
network.

However, the Qbv offload feature of the i225 is also used for
enabling TX launchtime / ETF offload. In that case, however,
the cycle has no meaning for the network and is only used
internally to adapt the base time register after a second has
passed.

Enabling strict mode in this case would unnecessarily prevent
the transmission of certain packets (i.e. at the boundary of a
second) and thus interferes with the ETF qdisc that promises
transmission at a certain point in time.

Similar to ETF, this also applies to CBS offload that also should
not be influenced by strict mode unless taprio offload would be
enabled at the same time.

This fully reverts
commit d8f45be01d ("igc: Use strict cycles for Qbv scheduling")
but its commit message only describes what was already implemented
before that commit. The difference to a plain revert of that commit
is that it now copes with the base_time = 0 case that was fixed with
commit e17090eb24 ("igc: allow BaseTime 0 enrollment for Qbv")

In particular, enabling strict mode leads to TX hang situations
under high traffic if taprio is applied WITHOUT taprio offload
but WITH ETF offload, e.g. as in

    sudo tc qdisc replace dev enp1s0 parent root handle 100 taprio \
	    num_tc 1 \
	    map 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \
	    queues 1@0 \
	    base-time 0 \
	    sched-entry S 01 300000 \
	    flags 0x1 \
	    txtime-delay 500000 \
	    clockid CLOCK_TAI
    sudo tc qdisc replace dev enp1s0 parent 100:1 etf \
	    clockid CLOCK_TAI \
	    delta 500000 \
	    offload \
	    skip_sock_check

and traffic generator

    sudo trafgen -i traffic.cfg -o enp1s0 --cpp -n0 -q -t1400ns

with traffic.cfg

    #define ETH_P_IP        0x0800

    {
      /* Ethernet Header */
      0x30, 0x1f, 0x9a, 0xd0, 0xf0, 0x0e,  # MAC Dest - adapt as needed
      0x24, 0x5e, 0xbe, 0x57, 0x2e, 0x36,  # MAC Src  - adapt as needed
      const16(ETH_P_IP),

      /* IPv4 Header */
      0b01000101, 0,   # IPv4 version, IHL, TOS
      const16(1028),   # IPv4 total length (UDP length + 20 bytes (IP header))
      const16(2),      # IPv4 ident
      0b01000000, 0,   # IPv4 flags, fragmentation off
      64,              # IPv4 TTL
      17,              # Protocol UDP
      csumip(14, 33),  # IPv4 checksum

      /* UDP Header */
      10,  0, 48, 1,   # IP Src - adapt as needed
      10,  0, 48, 10,  # IP Dest - adapt as needed
      const16(5555),   # UDP Src Port
      const16(6666),   # UDP Dest Port
      const16(1008),   # UDP length (UDP header 8 bytes + payload length)
      csumudp(14, 34), # UDP checksum

      /* Payload */
      fill('W', 1000),
    }

and the observed message with that is for example

 igc 0000:01:00.0 enp1s0: Detected Tx Unit Hang
   Tx Queue             <0>
   TDH                  <d0>
   TDT                  <f0>
   next_to_use          <f0>
   next_to_clean        <d0>
 buffer_info[next_to_clean]
   time_stamp           <ffff661f>
   next_to_watch        <00000000245a4efb>
   jiffies              <ffff6e48>
   desc.status          <1048000>

Fixes: d8f45be01d ("igc: Use strict cycles for Qbv scheduling")
Signed-off-by: Florian Kauer <florian.kauer@linutronix.de>
Reviewed-by: Kurt Kanzenbach <kurt@linutronix.de>
Tested-by: Naama Meir <naamax.meir@linux.intel.com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
2023-07-10 08:58:16 -07:00
..
appletalk
arcnet leds: Change led_trigger_blink[_oneshot]() delay parameters to pass-by-value 2023-05-25 12:16:27 +01:00
bonding Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2023-06-27 09:45:22 -07:00
caif
can can: kvaser_pciefd: Use TX FIFO size read from CAN controller 2023-06-22 09:44:30 +02:00
dsa net: dsa: qca8k: Add check for skb_copy 2023-07-10 08:21:53 +01:00
ethernet igc: No strict mode in pure launchtime/CBS offload 2023-07-10 08:58:16 -07:00
fddi
fjes
hamradio hamradio: drop ISA_DMA_API dependency 2023-04-19 13:11:41 +01:00
hippi
hyperv hv_netvsc: Allocate rx indirection table size dynamically 2023-06-07 09:46:49 +01:00
ieee802154 Core WPAN changes: 2023-06-24 15:41:46 -07:00
ipa net: ipa: Use correct value for IPA_STATUS_SIZE 2023-06-01 13:29:18 +02:00
ipvlan Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2023-06-27 09:45:22 -07:00
mctp mctp i2c: Switch back to use struct i2c_driver's .probe() 2023-06-13 20:46:20 -07:00
mdio mdio: mdio-mux-mmioreg: Use of_property_read_reg() to parse "reg" 2023-06-12 10:56:01 +01:00
netdevsim
pcs net: pcs: lynx: update PCS driver to use neg_mode 2023-06-22 19:41:01 -07:00
phy Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2023-06-27 09:45:22 -07:00
plip
ppp pptp: Fix fib lookup calls. 2023-07-04 19:39:30 +01:00
pse-pd
slip
team net: fix stack overflow when LRO is disabled for virtual interfaces 2023-05-19 22:46:37 -07:00
thunderbolt
usb net: usb: cdc_ether: add u-blox 0x1313 composition. 2023-07-01 13:15:58 +01:00
vmxnet3 net: introduce and use skb_frag_fill_page_desc() 2023-05-13 19:47:56 +01:00
vxlan net: vxlan: Add nolocalbypass option to vxlan. 2023-05-13 17:02:33 +01:00
wan net: lapbether: only support ethernet devices 2023-06-15 08:55:22 +01:00
wireguard wireguard: timers: move to using timer_delete_sync 2023-07-03 09:17:52 +01:00
wireless wifi: mt76: mt7921e: fix init command fail with enabled device 2023-07-06 19:10:41 -07:00
wwan Networking changes for 6.5. 2023-06-28 16:43:10 -07:00
xen-netback net: introduce and use skb_frag_fill_page_desc() 2023-05-13 19:47:56 +01:00
amt.c
bareudp.c
dummy.c
eql.c
geneve.c
gtp.c gtp: Fix use-after-free in __gtp_encap_destroy(). 2023-06-24 15:20:42 -07:00
ifb.c
Kconfig net: veth: make PAGE_POOL_STATS optional 2023-05-10 09:57:39 +01:00
LICENSE.SRC
loopback.c
macsec.c net: macsec: fix double free of percpu stats 2023-06-15 11:41:01 +01:00
macvlan.c
macvtap.c
Makefile
mdio.c
mhi_net.c
mii.c
net_failover.c
netconsole.c
nlmon.c
ntb_netdev.c
rionet.c
sb1000.c
Space.c
sungem_phy.c
tap.c net: move gso declarations and functions to their own files 2023-06-10 00:11:41 -07:00
tun.c tun: Fix memory leak for detached NAPI queue. 2023-05-17 09:02:55 +01:00
veth.c net: veth: make PAGE_POOL_STATS optional 2023-05-10 09:57:39 +01:00
virtio_net.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2023-06-08 11:35:14 -07:00
vrf.c
vsockmon.c
xen-netfront.c