[PATCH net v2 0/5] net: mvneta: fix the TX queue arbitration and the mqprio offload
From: Josef Schlehofer
Date: Tue Nov 03 2026 - 08:08:20 EST
The NETA TX arbiter is left at its reset default, which serves the TX
queues in fixed priority. Under load a busy queue starves the others.
OpenWrt has worked around this since 2017 by sending all TX traffic
of its 32-bit boards through queue 0 [1].
Patch 3 serves the queues in weighted round robin. While working on it,
four older bugs in the mqprio offload showed up. Turning the shaper off
leaves the per-queue rate limits in place (patch 1). Deleting the qdisc
never reaches the driver (patch 2). A failed setup is not undone
(patch 4). Opening the interface or changing its MTU sets every rate
limit to 10.23 Mbit/s (patch 5).
The series was tested on a Turris Omnia (Armada 385). The other NETA
variants were not tested, but the driver already programs registers of
the same block (MVNETA_TX_MTU and the token sizes) on all of them.
Suspend and resume were not tested.
With patch 2, replacing an offloaded mqprio qdisc with another mqprio
under a new handle loses the new configuration. The new qdisc is set up
before the old one is torn down, and the driver now acts on that
teardown. Software mqprio loses the configuration in the same way.
Changes in v2:
- Add patches 4 and 5. They fix the pre-existing issues that the
Sashiko review pointed out.
- Patch 1: say that deleting the qdisc reaches the new code only with
patch 2. When MVNETA_REFILL_NUM_CLK_REG was never programmed, the
full rate refill keeps the refill period that the queues have after
mvneta_txq_hw_init() and only raises the tokens, so it is not slower
than before.
- Patch 2: describe the replace case. The v1 cover letter called it an
existing limitation, but before this patch the driver kept the new
configuration.
- Patch 3: add a missing blank line in the commit message.
- No code change in patches 1 to 3. Rebased on current net/main.
- v1: https://lore.kernel.org/netdev/20261102112816.12322-1-pepe.schlehofer@xxxxxxxxx/
[1] https://github.com/openwrt/openwrt/blob/a5e96c837ead549820867bb83c1ad471e39f5ace/target/linux/mvebu/patches-6.18/700-mvneta-tx-queue-workaround.patch
Josef Schlehofer (5):
net: mvneta: lift the per-queue TX rate limits
net: mvneta: fix the removal of the mqprio offload
net: mvneta: serve the TX queues in weighted round robin
net: mvneta: unwind a failed mqprio setup
net: mvneta: keep the TX rate limits across open and MTU change
drivers/net/ethernet/marvell/mvneta.c | 91 +++++++++++++++++++++++----
1 file changed, 80 insertions(+), 11 deletions(-)
base-commit: f56daaadfecae1f760d0fb34385b256d3af68970
--
2.54.0 (Apple Git-157)