patch 'net/gve: fix DQO Tx report event interval' has been queued to stable release 24.11.9
luca.boccassi at gmail.com
luca.boccassi at gmail.com
Thu Nov 5 17:42:53 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 11/07/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/f3009bc3700e682314d6b9ddd350810d903eed5a
Thanks.
Luca Boccassi
---
>From f3009bc3700e682314d6b9ddd350810d903eed5a Mon Sep 17 00:00:00 2001
From: Tathagat Priyadarshi <tathagat.dpdk at gmail.com>
Date: Fri, 16 Oct 2026 17:45:38 +0000
Subject: [PATCH] net/gve: fix DQO Tx report event interval
[ upstream commit 99431e3bc4566aa23869cfdc522e8dcccd0e4d34 ]
A descriptor completion is requested once every 32 packets, and Tx
descriptors are only reclaimed on these completions. With
multi-segment or TSO packets the ring can fill before 32 packets are
posted, so no completion is ever requested and the Tx queue stalls
for good.
Request a completion once GVE_TX_MIN_RE_INTERVAL descriptors have
been posted since the last one, as the Linux driver does.
Fixes: 4022f9999f56 ("net/gve: support basic Tx data path for DQO")
Fixes: 403c671a46b6 ("net/gve: support TSO in DQO RDA")
Signed-off-by: Tathagat Priyadarshi <tathagat.dpdk at gmail.com>
---
drivers/net/gve/gve_ethdev.h | 2 +-
drivers/net/gve/gve_tx_dqo.c | 22 ++++++++++++++--------
2 files changed, 15 insertions(+), 9 deletions(-)
diff --git a/drivers/net/gve/gve_ethdev.h b/drivers/net/gve/gve_ethdev.h
index 0b5c89285bf..dff7ceff861 100644
--- a/drivers/net/gve/gve_ethdev.h
+++ b/drivers/net/gve/gve_ethdev.h
@@ -170,7 +170,7 @@ struct gve_tx_queue {
uint8_t cur_gen_bit;
uint32_t last_desc_cleaned;
void **txqs;
- uint16_t re_cnt;
+ uint16_t last_re_idx;
/* Only valid for DQO_RDA queue format */
struct gve_tx_queue *complq;
diff --git a/drivers/net/gve/gve_tx_dqo.c b/drivers/net/gve/gve_tx_dqo.c
index 2d2eb044b41..33b9b700efd 100644
--- a/drivers/net/gve/gve_tx_dqo.c
+++ b/drivers/net/gve/gve_tx_dqo.c
@@ -177,6 +177,8 @@ gve_tx_burst_dqo(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts)
struct rte_mbuf **sw_ring;
struct rte_mbuf *tx_pkt;
uint16_t mask, sw_mask;
+ uint16_t last_re_interval;
+ uint16_t last_desc_idx;
uint16_t first_sw_id;
const char *reason;
uint16_t nb_tx = 0;
@@ -282,20 +284,23 @@ finish_mbuf:
txd = &txr[(tx_id - 1) & mask];
txd->pkt.end_of_packet = 1;
+ /* Request a descriptor completion once at least
+ * GVE_TX_MIN_RE_INTERVAL descriptors have been posted
+ * since the last request.
+ */
+ last_desc_idx = (tx_id - 1) & mask;
+ last_re_interval = (last_desc_idx - txq->last_re_idx) & mask;
+ if (unlikely(last_re_interval >= GVE_TX_MIN_RE_INTERVAL)) {
+ txd->pkt.report_event = true;
+ txq->last_re_idx = last_desc_idx;
+ }
+
txq->nb_free -= nb_descs;
txq->nb_used += nb_descs;
}
/* update the tail pointer if any packets were processed */
if (nb_tx > 0) {
- /* Request a descriptor completion on the last descriptor */
- txq->re_cnt += nb_tx;
- if (txq->re_cnt >= GVE_TX_MIN_RE_INTERVAL) {
- txd = &txr[(tx_id - 1) & mask];
- txd->pkt.report_event = true;
- txq->re_cnt = 0;
- }
-
rte_write32(tx_id, txq->qtx_tail);
txq->tx_tail = tx_id;
txq->sw_tail = sw_id;
@@ -398,6 +403,7 @@ gve_reset_txq_dqo(struct gve_tx_queue *txq)
txq->last_desc_cleaned = 0;
txq->sw_tail = 0;
+ txq->last_re_idx = 0;
txq->nb_free = txq->nb_tx_desc - 1;
txq->complq_tail = 0;
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2026-11-05 16:42:48.236614135 +0000
+++ 0086-net-gve-fix-DQO-Tx-report-event-interval.patch 2026-11-05 16:42:45.021063775 +0000
@@ -1 +1 @@
-From 99431e3bc4566aa23869cfdc522e8dcccd0e4d34 Mon Sep 17 00:00:00 2001
+From f3009bc3700e682314d6b9ddd350810d903eed5a Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 99431e3bc4566aa23869cfdc522e8dcccd0e4d34 ]
+
@@ -17 +18,0 @@
-Cc: stable at dpdk.org
@@ -26 +27 @@
-index 19eac9ec0b..4d17ba727d 100644
+index 0b5c89285bf..dff7ceff861 100644
@@ -29,2 +30 @@
-@@ -193,7 +193,7 @@ struct gve_tx_queue {
- uint16_t sw_size;
+@@ -170,7 +170,7 @@ struct gve_tx_queue {
@@ -32,0 +33 @@
+ void **txqs;
@@ -39 +40 @@
-index 4b84135d02..6cca968122 100644
+index 2d2eb044b41..33b9b700efd 100644
@@ -42,4 +43,4 @@
-@@ -251,6 +251,8 @@ gve_tx_burst_dqo(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts)
- volatile union gve_tx_desc_dqo *txr;
- volatile union gve_tx_desc_dqo *txd;
- uint16_t mask = txq->nb_tx_desc - 1;
+@@ -177,6 +177,8 @@ gve_tx_burst_dqo(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts)
+ struct rte_mbuf **sw_ring;
+ struct rte_mbuf *tx_pkt;
+ uint16_t mask, sw_mask;
@@ -48,4 +49,4 @@
- struct gve_tx_pkt *pkts;
- struct rte_mbuf *tx_pkt;
- uint16_t compl_tag;
-@@ -328,20 +330,23 @@ gve_tx_burst_dqo(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts)
+ uint16_t first_sw_id;
+ const char *reason;
+ uint16_t nb_tx = 0;
+@@ -282,20 +284,23 @@ finish_mbuf:
@@ -82,3 +83,2 @@
-
-@@ -442,6 +447,7 @@ gve_reset_tx_ring_state_dqo(struct gve_tx_queue *txq)
- txq->nb_used = 0;
+ txq->sw_tail = sw_id;
+@@ -398,6 +403,7 @@ gve_reset_txq_dqo(struct gve_tx_queue *txq)
@@ -86,0 +87 @@
+ txq->sw_tail = 0;
More information about the stable
mailing list