patch 'net/mana: fix Tx stall from queue space check' has been queued to stable release 24.11.9
luca.boccassi at gmail.com
luca.boccassi at gmail.com
Tue Oct 27 12:49:02 CET 2026
Hi,
FYI, your patch has been queued to stable release 24.11.9
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/26. So please
shout if anyone has objections.
Also note that after the patch there's a diff of the upstream commit vs the
patch applied to the branch. This will indicate if there was any rebasing
needed to apply to the stable branch. If there were code changes for rebasing
(ie: not only metadata diffs), please double check that the rebase was
correctly done.
Queued patches are on a temporary branch at:
https://github.com/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/a99d33079148dbd62ba577199a6927c598f05571
Thanks.
Luca Boccassi
---
>From a99d33079148dbd62ba577199a6927c598f05571 Mon Sep 17 00:00:00 2001
From: Rita Ruvinsky <rita.ruvinsky at weka.io>
Date: Thu, 17 Sep 2026 09:23:50 +0300
Subject: [PATCH] net/mana: fix Tx stall from queue space check
[ upstream commit d5514444ea8e0b98fb004171da89df4b9189d124 ]
gdma_post_work_request() subtracted a unit count from an entry count:
queue_free_units = queue->count - (queue->head - queue->tail);
queue->count is in entries, while head and tail are in WQE alignment
units. On a 512-entry, 128KB send queue the check saw 512 units of
capacity instead of queue->size / GDMA_WQE_ALIGNMENT_UNIT_SIZE = 4096,
and returned -EBUSY with the queue one eighth full. A workload that
fills that window faster than it drains makes rte_eth_tx_burst() return
0 for long enough to look like a dead port.
The size is the authoritative capacity: rdma-core derives sq_size from
sq_count as align_hw_size(max_send_wr * get_wqe_size(max_send_sge)), and
the kernel mana driver computes the same limit in bytes in
mana_gd_wq_avail_space(). Derive it from queue->size, which is also what
the ring wrap in gdma_get_wqe_pointer() uses. Rx is unaffected: its WQEs
occupy exactly one unit, so entries and units coincide.
Also report the size and computed free space in the -EBUSY debug line,
since queue->count no longer takes part in the decision.
Fixes: 56dd45c0ce7b ("net/mana: implement hardware layer operations")
Signed-off-by: Rita Ruvinsky <rita.ruvinsky at weka.io>
---
drivers/net/mana/gdma.c | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/drivers/net/mana/gdma.c b/drivers/net/mana/gdma.c
index 7f66a7a7cf7..a92aef59d2d 100644
--- a/drivers/net/mana/gdma.c
+++ b/drivers/net/mana/gdma.c
@@ -138,11 +138,16 @@ gdma_post_work_request(struct mana_gdma_queue *queue,
client_oob_size + sgl_data_size,
GDMA_WQE_ALIGNMENT_UNIT_SIZE);
uint8_t *wq_buffer_pointer;
- uint32_t queue_free_units = queue->count - (queue->head - queue->tail);
+ /* head and tail are in WQE alignment units, so the capacity must
+ * come from the queue size in bytes, not the entry count.
+ */
+ uint32_t queue_free_units = queue->size / GDMA_WQE_ALIGNMENT_UNIT_SIZE -
+ (queue->head - queue->tail);
if (wqe_size / GDMA_WQE_ALIGNMENT_UNIT_SIZE > queue_free_units) {
- DP_LOG(DEBUG, "WQE size %u queue count %u head %u tail %u",
- wqe_size, queue->count, queue->head, queue->tail);
+ DP_LOG(DEBUG, "WQE size %u queue size %u free %u head %u tail %u",
+ wqe_size, queue->size, queue_free_units,
+ queue->head, queue->tail);
return -EBUSY;
}
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2026-10-27 11:43:55.598857028 +0000
+++ 0048-net-mana-fix-Tx-stall-from-queue-space-check.patch 2026-10-27 11:43:53.558060811 +0000
@@ -1 +1 @@
-From d5514444ea8e0b98fb004171da89df4b9189d124 Mon Sep 17 00:00:00 2001
+From a99d33079148dbd62ba577199a6927c598f05571 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit d5514444ea8e0b98fb004171da89df4b9189d124 ]
+
@@ -28 +29,0 @@
-Cc: stable at dpdk.org
@@ -36 +37 @@
-index 7f66a7a7cf..a92aef59d2 100644
+index 7f66a7a7cf7..a92aef59d2d 100644
More information about the stable
mailing list