[PATCH net v2 0/2] net: bcmgenet: fix tx stalls on 32 descriptor rings

From: Nicolai Buchwitz

Date: Mon Nov 09 2026 - 16:55:02 EST


Found this while fixing the clashiko findings on v6 of my MTU series. After
those fixes this bug would be easier to hit. At the moment it needs a larger
CONFIG_MAX_SKB_FRAGS than the default.

Queues 1 to 4 hold 32 descriptors, which is less than the Tx path assumes
in two places with CONFIG_MAX_SKB_FRAGS >= 31.

The wake threshold wants MAX_SKB_FRAGS + 1 free descriptors, which is not
possible on these rings. Therefore the queue stops on the first packet
without any recovery.

Same situation for the admission check, which wants one descriptor more than
the frame needs. As a result a 31 fragment frame is refused, even if the
ring is empty.

Patch 1 caps the threshold, patch 2 flattens those frames.

Patch 1 was tested on a Raspberry Pi CM4 (BCM2711, genet v5). The 31 fragment
case was flagged by Clashiko in v1 and seems reasonable.

Signed-off-by: Nicolai Buchwitz <nb@xxxxxxxxxxx>
---
Changes in v2:
- New patch 2 for the admission check (clashiko)
- Link to v1: https://patch.msgid.link/20261106-nb-genet-txq-thld-net-v1-1-53bbac647b71@xxxxxxxxxxx

Patch 2 could also clear NETIF_F_SG in ndo_features_check like bnge does. I
kept it in xmit because the limit is the ring size.

To: Doug Berger <opendmb@xxxxxxxxx>
To: Florian Fainelli <florian.fainelli@xxxxxxxxxxxx>
To: Nicolai Buchwitz <nb@xxxxxxxxxxx>
To: Broadcom internal kernel review list <bcm-kernel-feedback-list@xxxxxxxxxxxx>
To: Andrew Lunn <andrew+netdev@xxxxxxx>
To: "David S. Miller" <davem@xxxxxxxxxxxxx>
To: Eric Dumazet <edumazet@xxxxxxxxxx>
To: Jakub Kicinski <kuba@xxxxxxxxxx>
To: Paolo Abeni <pabeni@xxxxxxxxxx>
To: Nikolay Aleksandrov <razor@xxxxxxxxxxxxx>
To: Jason Xing <kerneljasonxing@xxxxxxxxx>
Cc: netdev@xxxxxxxxxxxxxxx
Cc: linux-kernel@xxxxxxxxxxxxxxx

---
Nicolai Buchwitz (2):
net: bcmgenet: cap the Tx queue threshold at the ring size
net: bcmgenet: flatten frames that cannot fit the ring

drivers/net/ethernet/broadcom/genet/bcmgenet.c | 22 ++++++++++++++++++++--
drivers/net/ethernet/broadcom/genet/bcmgenet.h | 1 +
2 files changed, 21 insertions(+), 2 deletions(-)
---
base-commit: 1d5e2c57e9ffc134e14b3f837c8d7c53b508bd22
change-id: 20261106-nb-genet-txq-thld-net-e0864f235d22

Best regards,
--
Nicolai Buchwitz <nb@xxxxxxxxxxx>