All of lore.kernel.org
 help / color / mirror / Atom feed
* [RESEND PATCH net 0/4] net: hsr: fix GRO/GSO super-packet handling
@ 2026-07-22 17:18 Xin Xie
  2026-07-22 17:18 ` [PATCH net 1/4] net: hsr: fix packet drops caused by GRO superpackets Xin Xie
                   ` (3 more replies)
  0 siblings, 4 replies; 6+ messages in thread
From: Xin Xie @ 2026-07-22 17:18 UTC (permalink / raw)
  To: netdev
  Cc: davem, edumazet, kuba, pabeni, horms, andrew+netdev,
	qingfang.deng, shuah, linux-kselftest, linux-kernel, Xin Xie

[resend: the previous cover letter was silently dropped by the
sender's mail provider after SMTP acceptance; the four patches
themselves are byte-identical.]

HSR/PRP forward frames one by one: each wire frame gets its own tag
or RCT and sequence number, and duplicate discard is per frame. Two
aggregation mechanisms break that per-frame assumption:

* On RX, a lower device that aggregates frames into a GRO
  super-packet feeds the HSR receive and forward paths something
  they cannot handle: frames are dropped, and on memory-constrained
  devices processing super-skbs in softirq context also pressures
  atomic allocation.

* At the forward entry, a GSO super-packet (locally generated on
  the master, or delivered intact by software NICs such as veth)
  would be tagged and forwarded as a single frame, violating
  per-frame wire semantics.

Patch 1 adds netif_disable_gro() and dev_disable_gro() alongside
the existing LRO helpers.  HSR calls the public wrapper at
enslavement time, while the networking core handles the generic
feature update and recursive lower-device traversal. Enslavement to
an HSR/PRP master therefore strips NETIF_F_GRO and NETIF_F_GRO_HW
on the lower device.

Patch 2 is a preparatory locking change with forwarding semantics
unchanged: it shrinks hsr->seqnr_lock from whole hsr_forward_skb()
calls to the individual sequence counter updates, so that the
segmentation work of patch 3 (per-segment allocation, checksums and
forwarding) never runs with BH disabled under the global sequence
lock. Patch 3 depends on patch 2; please keep them together for
stable.

Patch 3 unfolds the remaining GSO super-packets at the forward
entry with the top-level GSO dispatch (__skb_gso_segment()), so
each wire frame still gets its own tag and sequence number.
Segmentation is offered only for ingress roles whose frames are
known to be plain Ethernet: the master (locally generated) and the
interlink (SAN side, untagged). A super-packet from a LAN slave may
carry per-frame HSR tags or PRP RCT trailers that software
segmentation cannot recover, and an already-tagged HSR/PRP
super-packet violates per-frame wire semantics; both are rejected
by ingress-port policy. The HSR master also stops advertising
NETIF_F_GSO_MASK so locally generated traffic is segmented as
early as possible.

Patch 4 adds a kselftest covering the above: GRO disabled on
enslaved devices, no GSO/TSO advertised by the HSR master, and a
TCP stream from a TSO-enabled SAN through an HSR DUT completing
with zero retransmits.

Validation:
* build: W=1 allmodconfig and allyesconfig, base vs patched - no
  new warnings.
* selftests: hsr_gro_superpacket (new), hsr_ping, prp_ping and
  hsr_redbox pass on QEMU x86_64 and on physical igb lower devices.
* functional: SAN TSO streams unfold per-frame with zero
  retransmits (IPv4, IPv6, VLAN); LAN-slave and GRO-merged
  super-packets are dropped by policy; master/interlink concurrency
  under PROVE_LOCKING is clean.
* physical igb lower devices: GRO stripped at enslavement;
  force-enabled generic GRO super-packets unfold at line rate with
  a clean dmesg.

Xin Xie (4):
  net: hsr: fix packet drops caused by GRO superpackets
  net: hsr: shrink seqnr_lock to sequence counter updates
  net: hsr: unfold GSO super-packets at the forward entry
  selftests: net: hsr: add GRO super-packet forwarding test

 include/linux/netdevice.h                     |   2 +
 net/core/dev.c                                |  18 ++
 net/core/dev_api.c                            |  16 ++
 net/hsr/hsr_device.c                          |  17 +-
 net/hsr/hsr_forward.c                         |  53 +++-
 net/hsr/hsr_slave.c                           |  12 +-
 tools/testing/selftests/net/hsr/Makefile      |   1 +
 .../selftests/net/hsr/hsr_gro_superpacket.sh  | 249 ++++++++++++++++++
 8 files changed, 344 insertions(+), 24 deletions(-)
 create mode 100755 tools/testing/selftests/net/hsr/hsr_gro_superpacket.sh


base-commit: ba712ecfd942b68b21a4b0a5daaf72f6616cc66d
-- 
2.43.0


^ permalink raw reply	[flat|nested] 6+ messages in thread
[parent not found: <20260722165614.124-1-xiexinet@gmail.com>]

end of thread, other threads:[~2026-07-22 17:18 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-22 17:18 [RESEND PATCH net 0/4] net: hsr: fix GRO/GSO super-packet handling Xin Xie
2026-07-22 17:18 ` [PATCH net 1/4] net: hsr: fix packet drops caused by GRO superpackets Xin Xie
2026-07-22 17:18 ` [PATCH net 2/4] net: hsr: shrink seqnr_lock to sequence counter updates Xin Xie
2026-07-22 17:18 ` [PATCH net 3/4] net: hsr: unfold GSO super-packets at the forward entry Xin Xie
2026-07-22 17:18 ` [PATCH net 4/4] selftests: net: hsr: add GRO super-packet forwarding test Xin Xie
     [not found] <20260722165614.124-1-xiexinet@gmail.com>
2026-07-22 16:56 ` [PATCH net 3/4] net: hsr: unfold GSO super-packets at the forward entry Xin Xie

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.