patch 'examples: remove artificial Tx queue limit' has been queued to stable release 24.11.7
luca.boccassi at gmail.com
luca.boccassi at gmail.com
Mon Jul 13 19:18:06 CEST 2026
Hi,
FYI, your patch has been queued to stable release 24.11.7
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 07/15/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/00eaaa90bf1c1a5312d6e95a2dbe24b8d543b9b8
Thanks.
Luca Boccassi
---
>From 00eaaa90bf1c1a5312d6e95a2dbe24b8d543b9b8 Mon Sep 17 00:00:00 2001
From: Sivaprasad Tummala <sivaprasad.tummala at amd.com>
Date: Thu, 25 Jun 2026 10:46:51 -0700
Subject: [PATCH] examples: remove artificial Tx queue limit
[ upstream commit 503c09af9ceef4cee685359bbc10a7c6b7f867de ]
Tx queues are configured per lcore
to enable a lockless design and achieve optimal performance.
The `MAX_TX_QUEUE_PER_PORT` macro, defined as `RTE_MAX_ETHPORTS`,
introduced an artificial constraint on the number of Tx queues
and limited core-scaling performance.
This patch removes the unused `MAX_TX_QUEUE_PER_PORT` macro and
redundant Tx queue check, allowing Tx queues to scale directly
with the no. of lcores.
Fixes: af75078fece3 ("first public release")
Fixes: cc8f4d020c0b ("examples/ip_reassembly: initial import")
Fixes: 08bd1a174461 ("examples/l3fwd-graph: add graph-based l3fwd skeleton")
Signed-off-by: Sivaprasad Tummala <sivaprasad.tummala at amd.com>
Acked-by: Bruce Richardson <bruce.richardson at intel.com>
---
examples/ip_fragmentation/main.c | 3 ---
examples/ip_reassembly/main.c | 3 ---
examples/ipv4_multicast/main.c | 3 ---
examples/l3fwd-graph/main.c | 3 ---
examples/l3fwd/main.c | 3 ---
5 files changed, 15 deletions(-)
diff --git a/examples/ip_fragmentation/main.c b/examples/ip_fragmentation/main.c
index 1f84102844..9be2f72983 100644
--- a/examples/ip_fragmentation/main.c
+++ b/examples/ip_fragmentation/main.c
@@ -134,7 +134,6 @@ struct rx_queue {
};
#define MAX_RX_QUEUE_PER_LCORE 16
-#define MAX_TX_QUEUE_PER_PORT 16
struct __rte_cache_aligned lcore_queue_conf {
uint16_t n_rx_queue;
uint16_t tx_queue_id[RTE_MAX_ETHPORTS];
@@ -948,8 +947,6 @@ main(int argc, char **argv)
fflush(stdout);
n_tx_queue = nb_lcores;
- if (n_tx_queue > MAX_TX_QUEUE_PER_PORT)
- n_tx_queue = MAX_TX_QUEUE_PER_PORT;
ret = rte_eth_dev_configure(portid, 1, (uint16_t)n_tx_queue,
&local_port_conf);
if (ret < 0) {
diff --git a/examples/ip_reassembly/main.c b/examples/ip_reassembly/main.c
index 17ae76d4ba..141a55462f 100644
--- a/examples/ip_reassembly/main.c
+++ b/examples/ip_reassembly/main.c
@@ -145,7 +145,6 @@ struct tx_lcore_stat {
};
#define MAX_RX_QUEUE_PER_LCORE 16
-#define MAX_TX_QUEUE_PER_PORT 16
#define MAX_RX_QUEUE_PER_PORT 128
struct __rte_cache_aligned lcore_queue_conf {
@@ -1091,8 +1090,6 @@ main(int argc, char **argv)
fflush(stdout);
n_tx_queue = nb_lcores;
- if (n_tx_queue > MAX_TX_QUEUE_PER_PORT)
- n_tx_queue = MAX_TX_QUEUE_PER_PORT;
if (dev_info.tx_offload_capa & RTE_ETH_TX_OFFLOAD_MBUF_FAST_FREE)
local_port_conf.txmode.offloads |=
RTE_ETH_TX_OFFLOAD_MBUF_FAST_FREE;
diff --git a/examples/ipv4_multicast/main.c b/examples/ipv4_multicast/main.c
index 1eed645d02..b698db21de 100644
--- a/examples/ipv4_multicast/main.c
+++ b/examples/ipv4_multicast/main.c
@@ -97,7 +97,6 @@ struct mbuf_table {
};
#define MAX_RX_QUEUE_PER_LCORE 16
-#define MAX_TX_QUEUE_PER_PORT 16
struct __rte_cache_aligned lcore_queue_conf {
uint64_t tx_tsc;
uint16_t n_rx_queue;
@@ -736,8 +735,6 @@ main(int argc, char **argv)
fflush(stdout);
n_tx_queue = nb_lcores;
- if (n_tx_queue > MAX_TX_QUEUE_PER_PORT)
- n_tx_queue = MAX_TX_QUEUE_PER_PORT;
ret = rte_eth_dev_configure(portid, 1, (uint16_t)n_tx_queue,
&local_port_conf);
diff --git a/examples/l3fwd-graph/main.c b/examples/l3fwd-graph/main.c
index 92cdaa1ebe..12908acbba 100644
--- a/examples/l3fwd-graph/main.c
+++ b/examples/l3fwd-graph/main.c
@@ -49,7 +49,6 @@
#define RX_DESC_DEFAULT 1024
#define TX_DESC_DEFAULT 1024
-#define MAX_TX_QUEUE_PER_PORT RTE_MAX_ETHPORTS
#define MAX_RX_QUEUE_PER_PORT 128
#define MAX_RX_QUEUE_PER_LCORE 16
@@ -1076,8 +1075,6 @@ main(int argc, char **argv)
nb_rx_queue = get_port_n_rx_queues(portid);
n_tx_queue = nb_lcores;
- if (n_tx_queue > MAX_TX_QUEUE_PER_PORT)
- n_tx_queue = MAX_TX_QUEUE_PER_PORT;
printf("Creating queues: nb_rxq=%d nb_txq=%u... ",
nb_rx_queue, n_tx_queue);
diff --git a/examples/l3fwd/main.c b/examples/l3fwd/main.c
index 11aed26f94..8860bf84de 100644
--- a/examples/l3fwd/main.c
+++ b/examples/l3fwd/main.c
@@ -49,7 +49,6 @@
#include "l3fwd_event.h"
#include "l3fwd_route.h"
-#define MAX_TX_QUEUE_PER_PORT RTE_MAX_LCORE
#define MAX_RX_QUEUE_PER_PORT 128
#define MAX_LCORE_PARAMS 1024
@@ -1359,8 +1358,6 @@ l3fwd_poll_resource_setup(void)
nb_rx_queue = get_port_n_rx_queues(portid);
n_tx_queue = nb_lcores;
- if (n_tx_queue > MAX_TX_QUEUE_PER_PORT)
- n_tx_queue = MAX_TX_QUEUE_PER_PORT;
printf("Creating queues: nb_rxq=%d nb_txq=%u... ",
nb_rx_queue, (unsigned)n_tx_queue );
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2026-07-13 18:17:06.535190665 +0100
+++ 0026-examples-remove-artificial-Tx-queue-limit.patch 2026-07-13 18:17:05.606283419 +0100
@@ -1 +1 @@
-From 503c09af9ceef4cee685359bbc10a7c6b7f867de Mon Sep 17 00:00:00 2001
+From 00eaaa90bf1c1a5312d6e95a2dbe24b8d543b9b8 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 503c09af9ceef4cee685359bbc10a7c6b7f867de ]
+
@@ -20 +21,0 @@
-Cc: stable at dpdk.org
@@ -33 +34 @@
-index 2180682373..132550e497 100644
+index 1f84102844..9be2f72983 100644
@@ -36 +37 @@
-@@ -133,7 +133,6 @@ struct rx_queue {
+@@ -134,7 +134,6 @@ struct rx_queue {
@@ -44 +45 @@
-@@ -947,8 +946,6 @@ main(int argc, char **argv)
+@@ -948,8 +947,6 @@ main(int argc, char **argv)
@@ -54 +55 @@
-index 520fbea1c2..0814d47a66 100644
+index 17ae76d4ba..141a55462f 100644
@@ -57 +58 @@
-@@ -144,7 +144,6 @@ struct tx_lcore_stat {
+@@ -145,7 +145,6 @@ struct tx_lcore_stat {
@@ -65 +66 @@
-@@ -1097,8 +1096,6 @@ main(int argc, char **argv)
+@@ -1091,8 +1090,6 @@ main(int argc, char **argv)
@@ -75 +76 @@
-index bd4c3f335b..1cb621cb8b 100644
+index 1eed645d02..b698db21de 100644
@@ -78 +79 @@
-@@ -96,7 +96,6 @@ struct mbuf_table {
+@@ -97,7 +97,6 @@ struct mbuf_table {
@@ -86 +87 @@
-@@ -735,8 +734,6 @@ main(int argc, char **argv)
+@@ -736,8 +735,6 @@ main(int argc, char **argv)
@@ -96 +97 @@
-index 01c65b0abd..5f89286dce 100644
+index 92cdaa1ebe..12908acbba 100644
@@ -117 +118 @@
-index df035b508c..6866811526 100644
+index 11aed26f94..8860bf84de 100644
@@ -120 +121 @@
-@@ -48,7 +48,6 @@
+@@ -49,7 +49,6 @@
@@ -128 +129 @@
-@@ -1373,8 +1372,6 @@ l3fwd_poll_resource_setup(void)
+@@ -1359,8 +1358,6 @@ l3fwd_poll_resource_setup(void)
More information about the stable
mailing list