patches for DPDK stable branches
 help / color / mirror / Atom feed
* patch 'examples/l3fwd: add Tx burst size configuration option' has been queued to stable release 24.11.4
@ 2025-11-25 15:05 Kevin Traynor
  2025-11-25 15:05 ` patch 'examples/server_node_efd: fix format overflow' " Kevin Traynor
                   ` (5 more replies)
  0 siblings, 6 replies; 11+ messages in thread
From: Kevin Traynor @ 2025-11-25 15:05 UTC (permalink / raw)
  To: Sivaprasad Tummala
  Cc: Venkat Kumar Ande, Dengdui Huang, Pavan Nikhilesh, Chengwen Feng,
	dpdk stable

Hi,

FYI, your patch has been queued to stable release 24.11.4

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/28/25. 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/kevintraynor/dpdk-stable

This queued commit can be viewed at:
https://github.com/kevintraynor/dpdk-stable/commit/d150d3359e9f7cbd22b2d34c0fdec7b101400e98

Thanks.

Kevin

---
From d150d3359e9f7cbd22b2d34c0fdec7b101400e98 Mon Sep 17 00:00:00 2001
From: Sivaprasad Tummala <sivaprasad.tummala@amd.com>
Date: Thu, 6 Nov 2025 14:16:31 +0000
Subject: [PATCH] examples/l3fwd: add Tx burst size configuration option

[ upstream commit 79375d1015b308234e8b6955671a296394249f9b ]

Previously, the Tx burst size in l3fwd was fixed at 256, which could
lead to suboptimal performance in certain scenarios.

This patch introduces separate --rx-burst and --tx-burst options to
explicitly configure Rx and Tx burst sizes. By default, the Tx burst
size now matches the Rx burst size for better efficiency and pipeline
balance.

Fixes: d5c4897ecfb2 ("examples/l3fwd: add option to set Rx burst size")

Signed-off-by: Sivaprasad Tummala <sivaprasad.tummala@amd.com>
Tested-by: Venkat Kumar Ande <venkatkumar.ande@amd.com>
Tested-by: Dengdui Huang <huangdengdui@huawei.com>
Tested-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
Acked-by: Chengwen Feng <fengchengwen@huawei.com>
---
 doc/guides/sample_app_ug/l3_forward.rst |  6 ++
 examples/l3fwd/l3fwd.h                  | 10 +---
 examples/l3fwd/l3fwd_acl.c              |  2 +-
 examples/l3fwd/l3fwd_common.h           |  5 +-
 examples/l3fwd/l3fwd_em.c               |  2 +-
 examples/l3fwd/l3fwd_fib.c              |  2 +-
 examples/l3fwd/l3fwd_lpm.c              |  2 +-
 examples/l3fwd/main.c                   | 80 +++++++++++++++----------
 8 files changed, 67 insertions(+), 42 deletions(-)

diff --git a/doc/guides/sample_app_ug/l3_forward.rst b/doc/guides/sample_app_ug/l3_forward.rst
index de347eeeb1..aba671d2b7 100644
--- a/doc/guides/sample_app_ug/l3_forward.rst
+++ b/doc/guides/sample_app_ug/l3_forward.rst
@@ -78,4 +78,6 @@ The application has a number of command line options::
                              [--lookup LOOKUP_METHOD]
                              --config(port,queue,lcore)[,(port,queue,lcore)]
+                             [--rx-burst NPKTS]
+                             [--tx-burst NPKTS]
                              [--eth-dest=X,MM:MM:MM:MM:MM:MM]
                              [--max-pkt-len PKTLEN]
@@ -114,4 +116,8 @@ Where,
 * ``--config (port,queue,lcore)[,(port,queue,lcore)]:`` Determines which queues from which ports are mapped to which cores.
 
+* ``--rx-burst NPKTS:`` Optional, Rx burst size in decimal (default 32).
+
+* ``--tx-burst NPKTS:`` Optional, Tx burst size in decimal (default 32).
+
 * ``--eth-dest=X,MM:MM:MM:MM:MM:MM:`` Optional, ethernet destination for port X.
 
diff --git a/examples/l3fwd/l3fwd.h b/examples/l3fwd/l3fwd.h
index 0cce3406ee..471e3b488f 100644
--- a/examples/l3fwd/l3fwd.h
+++ b/examples/l3fwd/l3fwd.h
@@ -33,8 +33,4 @@
 #define VECTOR_SIZE_DEFAULT   MAX_PKT_BURST
 #define VECTOR_TMO_NS_DEFAULT 1E6 /* 1ms */
-/*
- * Try to avoid TX buffering if we have at least MAX_TX_BURST packets to send.
- */
-#define	MAX_TX_BURST	  (MAX_PKT_BURST / 2)
 
 #define NB_SOCKETS        8
@@ -117,5 +113,5 @@ extern struct acl_algorithms acl_alg[];
 extern uint32_t max_pkt_len;
 
-extern uint32_t nb_pkt_per_burst;
+extern uint32_t rx_burst_size;
 extern uint32_t mb_mempool_cache_size;
 
@@ -153,6 +149,6 @@ send_single_packet(struct lcore_conf *qconf,
 
 	/* enough pkts to be sent */
-	if (unlikely(len == MAX_PKT_BURST)) {
-		send_burst(qconf, MAX_PKT_BURST, port);
+	if (unlikely(len == rx_burst_size)) {
+		send_burst(qconf, rx_burst_size, port);
 		len = 0;
 	}
diff --git a/examples/l3fwd/l3fwd_acl.c b/examples/l3fwd/l3fwd_acl.c
index 4fc4b986cc..a1275e18bc 100644
--- a/examples/l3fwd/l3fwd_acl.c
+++ b/examples/l3fwd/l3fwd_acl.c
@@ -1137,5 +1137,5 @@ acl_main_loop(__rte_unused void *dummy)
 			queueid = qconf->rx_queue_list[i].queue_id;
 			nb_rx = rte_eth_rx_burst(portid, queueid,
-				pkts_burst, nb_pkt_per_burst);
+				pkts_burst, rx_burst_size);
 
 			if (nb_rx > 0) {
diff --git a/examples/l3fwd/l3fwd_common.h b/examples/l3fwd/l3fwd_common.h
index d94e5f1357..ccaf0cd402 100644
--- a/examples/l3fwd/l3fwd_common.h
+++ b/examples/l3fwd/l3fwd_common.h
@@ -26,4 +26,7 @@
 #define SENDM_PORT_OVERHEAD(x) (x)
 
+extern uint32_t rx_burst_size;
+extern uint32_t tx_burst_size;
+
 /*
  * From http://www.rfc-editor.org/rfc/rfc1812.txt section 5.2.2:
@@ -72,5 +75,5 @@ send_packetsx4(struct lcore_conf *qconf, uint16_t port, struct rte_mbuf *m[],
 	 * then send them straightway.
 	 */
-	if (num >= MAX_TX_BURST && len == 0) {
+	if (num >= tx_burst_size && len == 0) {
 		n = rte_eth_tx_burst(port, qconf->tx_queue_id[port], m, num);
 		if (unlikely(n < num)) {
diff --git a/examples/l3fwd/l3fwd_em.c b/examples/l3fwd/l3fwd_em.c
index da9c45e3a4..58c54ed77e 100644
--- a/examples/l3fwd/l3fwd_em.c
+++ b/examples/l3fwd/l3fwd_em.c
@@ -645,5 +645,5 @@ em_main_loop(__rte_unused void *dummy)
 			queueid = qconf->rx_queue_list[i].queue_id;
 			nb_rx = rte_eth_rx_burst(portid, queueid, pkts_burst,
-				nb_pkt_per_burst);
+				rx_burst_size);
 			if (nb_rx == 0)
 				continue;
diff --git a/examples/l3fwd/l3fwd_fib.c b/examples/l3fwd/l3fwd_fib.c
index 82f1739df7..4fc6bf90d5 100644
--- a/examples/l3fwd/l3fwd_fib.c
+++ b/examples/l3fwd/l3fwd_fib.c
@@ -240,5 +240,5 @@ fib_main_loop(__rte_unused void *dummy)
 			queueid = qconf->rx_queue_list[i].queue_id;
 			nb_rx = rte_eth_rx_burst(portid, queueid, pkts_burst,
-					nb_pkt_per_burst);
+					rx_burst_size);
 			if (nb_rx == 0)
 				continue;
diff --git a/examples/l3fwd/l3fwd_lpm.c b/examples/l3fwd/l3fwd_lpm.c
index fec0aeb79c..a71eee69ec 100644
--- a/examples/l3fwd/l3fwd_lpm.c
+++ b/examples/l3fwd/l3fwd_lpm.c
@@ -206,5 +206,5 @@ lpm_main_loop(__rte_unused void *dummy)
 			queueid = qconf->rx_queue_list[i].queue_id;
 			nb_rx = rte_eth_rx_burst(portid, queueid, pkts_burst,
-				nb_pkt_per_burst);
+				rx_burst_size);
 			if (nb_rx == 0)
 				continue;
diff --git a/examples/l3fwd/main.c b/examples/l3fwd/main.c
index ae3b4f6439..11aed26f94 100644
--- a/examples/l3fwd/main.c
+++ b/examples/l3fwd/main.c
@@ -58,6 +58,7 @@ static_assert(MEMPOOL_CACHE_SIZE >= MAX_PKT_BURST, "MAX_PKT_BURST should be at m
 uint16_t nb_rxd = RX_DESC_DEFAULT;
 uint16_t nb_txd = TX_DESC_DEFAULT;
-uint32_t nb_pkt_per_burst = DEFAULT_PKT_BURST;
+uint32_t rx_burst_size = DEFAULT_PKT_BURST;
 uint32_t mb_mempool_cache_size = MEMPOOL_CACHE_SIZE;
+uint32_t tx_burst_size = DEFAULT_PKT_BURST;
 
 /**< Ports set in promiscuous mode off by default. */
@@ -401,5 +402,6 @@ print_usage(const char *prgname)
 		" [--rx-queue-size NPKTS]"
 		" [--tx-queue-size NPKTS]"
-		" [--burst NPKTS]"
+		" [--rx-burst NPKTS]"
+		" [--tx-burst NPKTS]"
 		" [--mbcache CACHESZ]"
 		" [--eth-dest=X,MM:MM:MM:MM:MM:MM]"
@@ -428,5 +430,7 @@ print_usage(const char *prgname)
 		"  --tx-queue-size NPKTS: Tx queue size in decimal\n"
 		"            Default: %d\n"
-		"  --burst NPKTS: Burst size in decimal\n"
+		"  --rx-burst NPKTS: RX Burst size in decimal\n"
+		"            Default: %d\n"
+		"  --tx-burst NPKTS: TX Burst size in decimal\n"
 		"            Default: %d\n"
 		"  --mbcache CACHESZ: Mbuf cache size in decimal\n"
@@ -461,6 +465,6 @@ print_usage(const char *prgname)
 		"  --rule_ipv6=FILE: Specify the ipv6 rules entries file.\n"
 		"  --alg: ACL classify method to use, one of: %s.\n\n",
-		prgname, RX_DESC_DEFAULT, TX_DESC_DEFAULT, DEFAULT_PKT_BURST, MEMPOOL_CACHE_SIZE,
-		ACL_LEAD_CHAR, ROUTE_LEAD_CHAR, alg);
+		prgname, RX_DESC_DEFAULT, TX_DESC_DEFAULT, DEFAULT_PKT_BURST, DEFAULT_PKT_BURST,
+		MEMPOOL_CACHE_SIZE, ACL_LEAD_CHAR, ROUTE_LEAD_CHAR, alg);
 }
 
@@ -696,5 +700,5 @@ parse_mbcache_size(const char *optarg)
 
 static void
-parse_pkt_burst(const char *optarg)
+parse_pkt_burst(const char *optarg, bool is_rx_burst, uint32_t *burst_sz)
 {
 	struct rte_eth_dev_info dev_info;
@@ -711,29 +715,36 @@ parse_pkt_burst(const char *optarg)
 	if (pkt_burst > MAX_PKT_BURST) {
 		RTE_LOG(INFO, L3FWD, "User provided burst must be <= %d. Using default value %d\n",
-			MAX_PKT_BURST, nb_pkt_per_burst);
+			MAX_PKT_BURST, *burst_sz);
 		return;
 	} else if (pkt_burst > 0) {
-		nb_pkt_per_burst = (uint32_t)pkt_burst;
+		*burst_sz = (uint32_t)pkt_burst;
 		return;
 	}
 
-	/* If user gives a value of zero, query the PMD for its recommended Rx burst size. */
-	ret = rte_eth_dev_info_get(0, &dev_info);
-	if (ret != 0)
-		return;
-	burst_size = dev_info.default_rxportconf.burst_size;
-	if (burst_size == 0) {
-		RTE_LOG(INFO, L3FWD, "PMD does not recommend a burst size. Using default value %d. "
-			"User provided value must be in [1, %d]\n",
-			nb_pkt_per_burst, MAX_PKT_BURST);
-		return;
-	} else if (burst_size > MAX_PKT_BURST) {
-		RTE_LOG(INFO, L3FWD, "PMD recommended burst size %d exceeds maximum value %d. "
-			"Using default value %d\n",
-			burst_size, MAX_PKT_BURST, nb_pkt_per_burst);
-		return;
+	if (is_rx_burst) {
+		/* If user gives a value of zero, query the PMD for its recommended
+		 * Rx burst size.
+		 */
+		ret = rte_eth_dev_info_get(0, &dev_info);
+		if (ret != 0)
+			return;
+		burst_size = dev_info.default_rxportconf.burst_size;
+		if (burst_size == 0) {
+			RTE_LOG(INFO, L3FWD, "PMD does not recommend a burst size. Using default value %d. "
+				"User provided value must be in [1, %d]\n",
+				rx_burst_size, MAX_PKT_BURST);
+			return;
+		} else if (burst_size > MAX_PKT_BURST) {
+			RTE_LOG(INFO, L3FWD, "PMD recommended burst size %d exceeds maximum value %d. "
+				"Using default value %d\n",
+				burst_size, MAX_PKT_BURST, rx_burst_size);
+			return;
+		}
+		*burst_sz = burst_size;
+		RTE_LOG(INFO, L3FWD, "Using PMD-provided RX burst value %d\n", burst_size);
+	} else {
+		RTE_LOG(INFO, L3FWD, "User provided TX burst is 0. Using default value %d\n",
+			*burst_sz);
 	}
-	nb_pkt_per_burst = burst_size;
-	RTE_LOG(INFO, L3FWD, "Using PMD-provided burst value %d\n", burst_size);
 }
 
@@ -769,5 +780,6 @@ static const char short_options[] =
 #define CMD_LINE_OPT_RULE_IPV6 "rule_ipv6"
 #define CMD_LINE_OPT_ALG "alg"
-#define CMD_LINE_OPT_PKT_BURST "burst"
+#define CMD_LINE_OPT_PKT_RX_BURST "rx-burst"
+#define CMD_LINE_OPT_PKT_TX_BURST "tx-burst"
 #define CMD_LINE_OPT_MB_CACHE_SIZE "mbcache"
 
@@ -800,5 +812,6 @@ enum {
 	CMD_LINE_OPT_VECTOR_SIZE_NUM,
 	CMD_LINE_OPT_VECTOR_TMO_NS_NUM,
-	CMD_LINE_OPT_PKT_BURST_NUM,
+	CMD_LINE_OPT_PKT_RX_BURST_NUM,
+	CMD_LINE_OPT_PKT_TX_BURST_NUM,
 	CMD_LINE_OPT_MB_CACHE_SIZE_NUM,
 };
@@ -828,5 +841,6 @@ static const struct option lgopts[] = {
 	{CMD_LINE_OPT_RULE_IPV6,   1, 0, CMD_LINE_OPT_RULE_IPV6_NUM},
 	{CMD_LINE_OPT_ALG,   1, 0, CMD_LINE_OPT_ALG_NUM},
-	{CMD_LINE_OPT_PKT_BURST,   1, 0, CMD_LINE_OPT_PKT_BURST_NUM},
+	{CMD_LINE_OPT_PKT_RX_BURST,   1, 0, CMD_LINE_OPT_PKT_RX_BURST_NUM},
+	{CMD_LINE_OPT_PKT_TX_BURST,   1, 0, CMD_LINE_OPT_PKT_TX_BURST_NUM},
 	{CMD_LINE_OPT_MB_CACHE_SIZE,   1, 0, CMD_LINE_OPT_MB_CACHE_SIZE_NUM},
 	{NULL, 0, 0, 0}
@@ -918,6 +932,10 @@ parse_args(int argc, char **argv)
 			break;
 
-		case CMD_LINE_OPT_PKT_BURST_NUM:
-			parse_pkt_burst(optarg);
+		case CMD_LINE_OPT_PKT_RX_BURST_NUM:
+			parse_pkt_burst(optarg, true, &rx_burst_size);
+			break;
+
+		case CMD_LINE_OPT_PKT_TX_BURST_NUM:
+			parse_pkt_burst(optarg, false, &tx_burst_size);
 			break;
 
@@ -1655,4 +1673,6 @@ main(int argc, char **argv)
 		rte_exit(EXIT_FAILURE, "Invalid L3FWD parameters\n");
 
+	RTE_LOG(INFO, L3FWD, "Using Rx burst %u Tx burst %u\n", rx_burst_size, tx_burst_size);
+
 	/* Setup function pointers for lookup method. */
 	setup_l3fwd_lookup_tables();
-- 
2.51.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2025-11-25 15:03:57.886858147 +0000
+++ 0001-examples-l3fwd-add-Tx-burst-size-configuration-optio.patch	2025-11-25 15:03:57.826651313 +0000
@@ -1 +1 @@
-From 79375d1015b308234e8b6955671a296394249f9b Mon Sep 17 00:00:00 2001
+From d150d3359e9f7cbd22b2d34c0fdec7b101400e98 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 79375d1015b308234e8b6955671a296394249f9b ]
+
@@ -33 +35 @@
-index 9b0d0350aa..c50a421fd0 100644
+index de347eeeb1..aba671d2b7 100644


^ permalink raw reply	[flat|nested] 11+ messages in thread

* patch 'examples/server_node_efd: fix format overflow' has been queued to stable release 24.11.4
  2025-11-25 15:05 patch 'examples/l3fwd: add Tx burst size configuration option' has been queued to stable release 24.11.4 Kevin Traynor
@ 2025-11-25 15:05 ` Kevin Traynor
  2025-11-25 15:05 ` patch 'examples/vdpa: " Kevin Traynor
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 11+ messages in thread
From: Kevin Traynor @ 2025-11-25 15:05 UTC (permalink / raw)
  To: Stephen Hemminger; +Cc: Bruce Richardson, dpdk stable

Hi,

FYI, your patch has been queued to stable release 24.11.4

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/28/25. 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/kevintraynor/dpdk-stable

This queued commit can be viewed at:
https://github.com/kevintraynor/dpdk-stable/commit/644420479cdb36e8a6eff50d03b5d9adb88c6f89

Thanks.

Kevin

---
From 644420479cdb36e8a6eff50d03b5d9adb88c6f89 Mon Sep 17 00:00:00 2001
From: Stephen Hemminger <stephen@networkplumber.org>
Date: Thu, 20 Nov 2025 08:21:59 -0800
Subject: [PATCH] examples/server_node_efd: fix format overflow
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

[ upstream commit c97d223fc64fc10cf8f6c6f0e7d506926e83462b ]

If format-truncation is enabled, the compiler detects a string overflow
since the snprintf() is putting ethernet address and new line
in buffer only sized for the address.

Since get_rx_queue_name() is used to create a ring name.
The buffer should be sized to be a valid ring name.
This fixes some format-overflow warnings and also corrects
for future errors.

In file included from ../examples/server_node_efd/efd_server/main.c:31:
In function ‘get_printable_mac_addr’,
    inlined from ‘do_stats_display’ at ../examples/server_node_efd/efd_server/main.c:136:3:
../lib/net/rte_ether.h:248:36: warning: ‘snprintf’ output truncated before the last format character [-Wformat-truncation=]
  248 | #define RTE_ETHER_ADDR_PRT_FMT     "%02X:%02X:%02X:%02X:%02X:%02X"
      |                                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../examples/server_node_efd/efd_server/main.c:86:33: note: in expansion of macro ‘RTE_ETHER_ADDR_PRT_FMT’
   86 |                                 RTE_ETHER_ADDR_PRT_FMT "\n",
      |                                 ^~~~~~~~~~~~~~~~~~~~~~
../examples/server_node_efd/efd_server/main.c: In function ‘do_stats_display’:
../examples/server_node_efd/efd_server/main.c:86:59: note: format string is defined here
   86 |                                 RTE_ETHER_ADDR_PRT_FMT "\n",
      |

Fixes: 39aad0e88c58 ("examples/flow_distributor: new example to demonstrate EFD")

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
---
 examples/server_node_efd/efd_server/main.c | 2 +-
 examples/server_node_efd/shared/common.h   | 3 ++-
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/examples/server_node_efd/efd_server/main.c b/examples/server_node_efd/efd_server/main.c
index 75ff0ea532..62c3f4a16d 100644
--- a/examples/server_node_efd/efd_server/main.c
+++ b/examples/server_node_efd/efd_server/main.c
@@ -69,5 +69,5 @@ get_printable_mac_addr(uint16_t port)
 {
 	static const char err_address[] = "00:00:00:00:00:00";
-	static char addresses[RTE_MAX_ETHPORTS][sizeof(err_address)];
+	static char addresses[RTE_MAX_ETHPORTS][RTE_ETHER_ADDR_FMT_SIZE + 1];
 	struct rte_ether_addr mac;
 	int ret;
diff --git a/examples/server_node_efd/shared/common.h b/examples/server_node_efd/shared/common.h
index e1ab7e62b7..6726e2031e 100644
--- a/examples/server_node_efd/shared/common.h
+++ b/examples/server_node_efd/shared/common.h
@@ -59,6 +59,7 @@ get_rx_queue_name(unsigned int id)
 	 * Buffer for return value. Size calculated by %u being replaced
 	 * by maximum 3 digits (plus an extra byte for safety)
+	 * Used as ring name, so upper limit is ring name size.
 	 */
-	static char buffer[sizeof(MP_NODE_RXQ_NAME) + 2];
+	static char buffer[RTE_RING_NAMESIZE];
 
 	snprintf(buffer, sizeof(buffer), MP_NODE_RXQ_NAME, id);
-- 
2.51.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2025-11-25 15:03:57.916069531 +0000
+++ 0002-examples-server_node_efd-fix-format-overflow.patch	2025-11-25 15:03:57.827651313 +0000
@@ -1 +1 @@
-From c97d223fc64fc10cf8f6c6f0e7d506926e83462b Mon Sep 17 00:00:00 2001
+From 644420479cdb36e8a6eff50d03b5d9adb88c6f89 Mon Sep 17 00:00:00 2001
@@ -8,0 +9,2 @@
+[ upstream commit c97d223fc64fc10cf8f6c6f0e7d506926e83462b ]
+
@@ -33 +34,0 @@
-Cc: stable@dpdk.org


^ permalink raw reply	[flat|nested] 11+ messages in thread

* patch 'examples/vdpa: fix format overflow' has been queued to stable release 24.11.4
  2025-11-25 15:05 patch 'examples/l3fwd: add Tx burst size configuration option' has been queued to stable release 24.11.4 Kevin Traynor
  2025-11-25 15:05 ` patch 'examples/server_node_efd: fix format overflow' " Kevin Traynor
@ 2025-11-25 15:05 ` Kevin Traynor
  2025-11-25 15:05 ` patch 'net/mlx5: fix flex flow item header length' " Kevin Traynor
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 11+ messages in thread
From: Kevin Traynor @ 2025-11-25 15:05 UTC (permalink / raw)
  To: Stephen Hemminger; +Cc: Bruce Richardson, dpdk stable

Hi,

FYI, your patch has been queued to stable release 24.11.4

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/28/25. 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/kevintraynor/dpdk-stable

This queued commit can be viewed at:
https://github.com/kevintraynor/dpdk-stable/commit/e347a8f0303cb33302c104935a9db8fe60b1768e

Thanks.

Kevin

---
From e347a8f0303cb33302c104935a9db8fe60b1768e Mon Sep 17 00:00:00 2001
From: Stephen Hemminger <stephen@networkplumber.org>
Date: Thu, 20 Nov 2025 08:22:00 -0800
Subject: [PATCH] examples/vdpa: fix format overflow
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

[ upstream commit 66052657fcb810c47cbbe52762c9ad0ad7828821 ]

The ifname is limited to 128 characters, but it would allow up
to 128 characters as prefix then could overflow creating ifname.

Change to limit path prefix (iface) to 123 (128 - sizeof("1024"))
to avoid possible format overflow

../examples/vdpa/main.c:501:76: warning: ‘snprintf’ output may be truncated before the last format character [-Wformat-truncation=]
  501 |                         snprintf(vports[devcnt].ifname, MAX_PATH_LEN, "%s%d",
      |                                                                            ^
../examples/vdpa/main.c:501:25: note: ‘snprintf’ output between 2 and 139 bytes into a destination of size 128
  501 |                         snprintf(vports[devcnt].ifname, MAX_PATH_LEN, "%s%d",
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  502 |                                         iface, devcnt);
      |

Fixes: 38f8ab0bbc8d ("vhost: make vDPA framework bus agnostic")

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
---
 examples/vdpa/main.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/examples/vdpa/main.c b/examples/vdpa/main.c
index 289db26498..08aa933272 100644
--- a/examples/vdpa/main.c
+++ b/examples/vdpa/main.c
@@ -23,4 +23,5 @@
 #define MAX_PATH_LEN 128
 #define MAX_VDPA_SAMPLE_PORTS 1024
+#define MAX_VDPA_STR_LEN sizeof(RTE_STR(MAX_VDPA_SAMPLE_PORTS))
 #define RTE_LOGTYPE_VDPA RTE_LOGTYPE_USER1
 
@@ -37,5 +38,5 @@ struct vdpa_port {
 static struct vdpa_port vports[MAX_VDPA_SAMPLE_PORTS];
 
-static char iface[MAX_PATH_LEN];
+static char iface[MAX_PATH_LEN - MAX_VDPA_STR_LEN];
 static int devcnt;
 static int interactive;
@@ -75,7 +76,6 @@ parse_args(int argc, char **argv)
 		/* long options */
 		case 0:
-			if (strncmp(long_option[idx].name, "iface",
-						MAX_PATH_LEN) == 0) {
-				rte_strscpy(iface, optarg, MAX_PATH_LEN);
+			if (!strcmp(long_option[idx].name, "iface")) {
+				rte_strscpy(iface, optarg, sizeof(iface));
 				printf("iface %s\n", iface);
 			}
-- 
2.51.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2025-11-25 15:03:57.944679212 +0000
+++ 0003-examples-vdpa-fix-format-overflow.patch	2025-11-25 15:03:57.829498053 +0000
@@ -1 +1 @@
-From 66052657fcb810c47cbbe52762c9ad0ad7828821 Mon Sep 17 00:00:00 2001
+From e347a8f0303cb33302c104935a9db8fe60b1768e Mon Sep 17 00:00:00 2001
@@ -8,0 +9,2 @@
+[ upstream commit 66052657fcb810c47cbbe52762c9ad0ad7828821 ]
+
@@ -25 +26,0 @@
-Cc: stable@dpdk.org


^ permalink raw reply	[flat|nested] 11+ messages in thread

* patch 'net/mlx5: fix flex flow item header length' has been queued to stable release 24.11.4
  2025-11-25 15:05 patch 'examples/l3fwd: add Tx burst size configuration option' has been queued to stable release 24.11.4 Kevin Traynor
  2025-11-25 15:05 ` patch 'examples/server_node_efd: fix format overflow' " Kevin Traynor
  2025-11-25 15:05 ` patch 'examples/vdpa: " Kevin Traynor
@ 2025-11-25 15:05 ` Kevin Traynor
  2025-11-25 15:05 ` patch 'doc: add Pollara 400 device in ionic guide' " Kevin Traynor
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 11+ messages in thread
From: Kevin Traynor @ 2025-11-25 15:05 UTC (permalink / raw)
  To: Viacheslav Ovsiienko; +Cc: dpdk stable

Hi,

FYI, your patch has been queued to stable release 24.11.4

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/28/25. 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/kevintraynor/dpdk-stable

This queued commit can be viewed at:
https://github.com/kevintraynor/dpdk-stable/commit/1935158d6558c55a1f67f06a3995d3453c89aa20

Thanks.

Kevin

---
From 1935158d6558c55a1f67f06a3995d3453c89aa20 Mon Sep 17 00:00:00 2001
From: Viacheslav Ovsiienko <viacheslavo@nvidia.com>
Date: Tue, 18 Nov 2025 16:57:06 +0200
Subject: [PATCH] net/mlx5: fix flex flow item header length

[ upstream commit a2234609bf7e4f5bb1ad8f6f60c5f574f32c3558 ]

There is the updated firmware providing the new capability
bit "header_length_field_offset_mode". If this bit is set
the length field offset in flex parser configuration should
not be adjusted by the supported field mask left margin,
and the bit "header_length_field_offset_mode" should be set
in configuration command on the flex parser creation
firmware call.

Fixes: b04b06f4cb3f ("net/mlx5: fix flex item header length field translation")

Signed-off-by: Viacheslav Ovsiienko <viacheslavo@nvidia.com>
---
 drivers/common/mlx5/mlx5_devx_cmds.c |  4 ++++
 drivers/common/mlx5/mlx5_devx_cmds.h |  2 ++
 drivers/common/mlx5/mlx5_prm.h       |  8 ++++++--
 drivers/net/mlx5/mlx5.c              | 12 +++++++++---
 drivers/net/mlx5/mlx5_flow_flex.c    |  3 ++-
 5 files changed, 23 insertions(+), 6 deletions(-)

diff --git a/drivers/common/mlx5/mlx5_devx_cmds.c b/drivers/common/mlx5/mlx5_devx_cmds.c
index a75f011750..3b4da3db9b 100644
--- a/drivers/common/mlx5/mlx5_devx_cmds.c
+++ b/drivers/common/mlx5/mlx5_devx_cmds.c
@@ -744,4 +744,6 @@ mlx5_devx_cmd_create_flex_parser(void *ctx,
 	MLX5_SET(parse_graph_flex, flex, header_length_mode,
 		 data->header_length_mode);
+	MLX5_SET(parse_graph_flex, flex, header_length_field_offset_mode,
+		 data->header_length_field_offset_mode);
 	MLX5_SET64(parse_graph_flex, flex, modify_field_select,
 		   data->modify_field_select);
@@ -871,4 +873,6 @@ mlx5_devx_cmd_query_hca_parse_graph_node_cap
 	attr->header_length_mask_width = MLX5_GET(parse_graph_node_cap, hcattr,
 						  header_length_mask_width);
+	attr->header_length_field_mode_wa = !MLX5_GET(parse_graph_node_cap, hcattr,
+						      header_length_field_offset_mode);
 	/* Get the max supported samples from HCA CAP 2 */
 	hcattr = mlx5_devx_get_hca_cap(ctx, in, out, &rc,
diff --git a/drivers/common/mlx5/mlx5_devx_cmds.h b/drivers/common/mlx5/mlx5_devx_cmds.h
index f523bf8529..9e67c16a4c 100644
--- a/drivers/common/mlx5/mlx5_devx_cmds.h
+++ b/drivers/common/mlx5/mlx5_devx_cmds.h
@@ -120,4 +120,5 @@ struct mlx5_hca_flex_attr {
 	uint8_t  zero_size_supported:1;
 	uint8_t  sample_id_in_out:1;
+	uint8_t  header_length_field_mode_wa:1;
 	uint16_t max_base_header_length;
 	uint8_t  max_sample_base_offset;
@@ -631,4 +632,5 @@ struct mlx5_devx_graph_node_attr {
 	uint32_t header_length_field_shift:4;
 	uint32_t header_length_field_offset:16;
+	uint32_t header_length_field_offset_mode:1;
 	uint32_t header_length_field_mask;
 	struct mlx5_devx_match_sample_attr sample[MLX5_GRAPH_NODE_SAMPLE_NUM];
diff --git a/drivers/common/mlx5/mlx5_prm.h b/drivers/common/mlx5/mlx5_prm.h
index 4f45b104ae..43b48a96de 100644
--- a/drivers/common/mlx5/mlx5_prm.h
+++ b/drivers/common/mlx5/mlx5_prm.h
@@ -2112,5 +2112,7 @@ struct mlx5_ifc_parse_graph_node_cap_bits {
 	u8 max_num_arc_out[0x08];
 	u8 max_num_sample[0x08];
-	u8 reserved_at_78[0x03];
+	u8 reserved_at_78[0x01];
+	u8 header_length_field_offset_mode[0x1];
+	u8 reserved_at_79[0x01];
 	u8 parse_graph_anchor[0x1];
 	u8 reserved_at_7c[0x01];
@@ -4921,5 +4923,7 @@ struct mlx5_ifc_parse_graph_flex_bits {
 	u8 reserved_at_160[0x12];
 	u8 head_anchor_id[0x6];
-	u8 reserved_at_178[0x3];
+	u8 reserved_at_178[0x1];
+	u8 header_length_field_offset_mode[0x1];
+	u8 reserved_at_17a[0x1];
 	u8 next_header_field_size[0x5];
 	u8 header_length_field_mask[0x20];
diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c
index 3c45643464..8dce017867 100644
--- a/drivers/net/mlx5/mlx5.c
+++ b/drivers/net/mlx5/mlx5.c
@@ -1093,7 +1093,13 @@ mlx5_alloc_srh_flex_parser(struct rte_eth_dev *dev)
 	node.header_length_field_shift = 0x3;
 	/* Header length is the 2nd byte. */
-	node.header_length_field_offset = 0x8;
-	if (attr->header_length_mask_width < 8)
-		node.header_length_field_offset += 8 - attr->header_length_mask_width;
+	if (attr->header_length_field_mode_wa) {
+		/* Legacy firmware before ConnectX-8, we should provide offset WA. */
+		node.header_length_field_offset = 8;
+		if (attr->header_length_mask_width < 8)
+			node.header_length_field_offset += 8 - attr->header_length_mask_width;
+	} else {
+		/* The new firmware, we can specify the correct offset directly. */
+		node.header_length_field_offset = 12;
+	}
 	node.header_length_field_mask = 0xF;
 	/* One byte next header protocol. */
diff --git a/drivers/net/mlx5/mlx5_flow_flex.c b/drivers/net/mlx5/mlx5_flow_flex.c
index afed16985a..76a81dad16 100644
--- a/drivers/net/mlx5/mlx5_flow_flex.c
+++ b/drivers/net/mlx5/mlx5_flow_flex.c
@@ -555,5 +555,5 @@ mlx5_flex_translate_length(struct mlx5_hca_flex_attr *attr,
 		msb++;
 		offset += field->field_size - msb;
-		if (msb < attr->header_length_mask_width) {
+		if (attr->header_length_field_mode_wa && msb < attr->header_length_mask_width) {
 			if (attr->header_length_mask_width - msb > offset)
 				return rte_flow_error_set
@@ -573,4 +573,5 @@ mlx5_flex_translate_length(struct mlx5_hca_flex_attr *attr,
 		node->header_length_field_shift = shift;
 		node->header_length_field_offset = offset;
+		node->header_length_field_offset_mode = !attr->header_length_field_mode_wa;
 		break;
 	}
-- 
2.51.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2025-11-25 15:03:57.978869017 +0000
+++ 0004-net-mlx5-fix-flex-flow-item-header-length.patch	2025-11-25 15:03:57.840651314 +0000
@@ -1 +1 @@
-From a2234609bf7e4f5bb1ad8f6f60c5f574f32c3558 Mon Sep 17 00:00:00 2001
+From 1935158d6558c55a1f67f06a3995d3453c89aa20 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit a2234609bf7e4f5bb1ad8f6f60c5f574f32c3558 ]
+
@@ -15 +16,0 @@
-Cc: stable@dpdk.org
@@ -27 +28 @@
-index 22f6b29089..d12ebf8487 100644
+index a75f011750..3b4da3db9b 100644
@@ -30 +31 @@
-@@ -785,4 +785,6 @@ mlx5_devx_cmd_create_flex_parser(void *ctx,
+@@ -744,4 +744,6 @@ mlx5_devx_cmd_create_flex_parser(void *ctx,
@@ -37 +38 @@
-@@ -912,4 +914,6 @@ mlx5_devx_cmd_query_hca_parse_graph_node_cap
+@@ -871,4 +873,6 @@ mlx5_devx_cmd_query_hca_parse_graph_node_cap
@@ -45 +46 @@
-index 4c7747cbec..da50fc686c 100644
+index f523bf8529..9e67c16a4c 100644
@@ -54 +55 @@
-@@ -655,4 +656,5 @@ struct mlx5_devx_graph_node_attr {
+@@ -631,4 +632,5 @@ struct mlx5_devx_graph_node_attr {
@@ -61 +62 @@
-index 9383e09893..ba33336e58 100644
+index 4f45b104ae..43b48a96de 100644
@@ -64 +65 @@
-@@ -2120,5 +2120,7 @@ struct mlx5_ifc_parse_graph_node_cap_bits {
+@@ -2112,5 +2112,7 @@ struct mlx5_ifc_parse_graph_node_cap_bits {
@@ -73 +74 @@
-@@ -4992,5 +4994,7 @@ struct mlx5_ifc_parse_graph_flex_bits {
+@@ -4921,5 +4923,7 @@ struct mlx5_ifc_parse_graph_flex_bits {
@@ -83 +84 @@
-index 447fd31fd4..c1cfcb1f67 100644
+index 3c45643464..8dce017867 100644
@@ -86 +87 @@
-@@ -1081,7 +1081,13 @@ mlx5_alloc_srh_flex_parser(struct rte_eth_dev *dev)
+@@ -1093,7 +1093,13 @@ mlx5_alloc_srh_flex_parser(struct rte_eth_dev *dev)
@@ -104 +105 @@
-index b1174fe0ed..d21e28f7fd 100644
+index afed16985a..76a81dad16 100644


^ permalink raw reply	[flat|nested] 11+ messages in thread

* patch 'doc: add Pollara 400 device in ionic guide' has been queued to stable release 24.11.4
  2025-11-25 15:05 patch 'examples/l3fwd: add Tx burst size configuration option' has been queued to stable release 24.11.4 Kevin Traynor
                   ` (2 preceding siblings ...)
  2025-11-25 15:05 ` patch 'net/mlx5: fix flex flow item header length' " Kevin Traynor
@ 2025-11-25 15:05 ` Kevin Traynor
  2025-11-25 15:13   ` Kevin Traynor
  2025-11-25 15:05 ` patch 'doc: fix note in FreeBSD " Kevin Traynor
  2025-11-26 11:08 ` patch 'examples/l3fwd: add Tx burst size configuration option' " Kevin Traynor
  5 siblings, 1 reply; 11+ messages in thread
From: Kevin Traynor @ 2025-11-25 15:05 UTC (permalink / raw)
  To: Andrew Boyer; +Cc: dpdk stable

Hi,

FYI, your patch has been queued to stable release 24.11.4

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/28/25. 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/kevintraynor/dpdk-stable

This queued commit can be viewed at:
https://github.com/kevintraynor/dpdk-stable/commit/96bbffc68b4eccccc8a1d9977fc85ee9b139c527

Thanks.

Kevin

---
From 96bbffc68b4eccccc8a1d9977fc85ee9b139c527 Mon Sep 17 00:00:00 2001
From: Andrew Boyer <andrew.boyer@amd.com>
Date: Thu, 20 Nov 2025 10:39:36 -0800
Subject: [PATCH] doc: add Pollara 400 device in ionic guide

[ upstream commit 899e7bb0ab84a31a36437e8ad6e40493eea4b0ef ]

The Pollara 400 AI NIC is supported without any PMD changes.
Add a link to the product brief.

Signed-off-by: Andrew Boyer <andrew.boyer@amd.com>
---
 doc/guides/cryptodevs/ionic.rst | 4 +++-
 doc/guides/nics/ionic.rst       | 4 +++-
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/doc/guides/cryptodevs/ionic.rst b/doc/guides/cryptodevs/ionic.rst
index d563602ebe..7c9d2ebd04 100644
--- a/doc/guides/cryptodevs/ionic.rst
+++ b/doc/guides/cryptodevs/ionic.rst
@@ -1,4 +1,4 @@
 .. SPDX-License-Identifier: BSD-3-Clause
-   Copyright 2021-2024 Advanced Micro Devices, Inc.
+   Copyright 2021-2025 Advanced Micro Devices, Inc.
 
 IONIC Crypto Driver
@@ -17,4 +17,6 @@ It currently supports the below models:
 - DSC3-400 dual-port 400G Distributed Services Card
   `(pdf) <https://www.amd.com/content/dam/amd/en/documents/pensando-technical-docs/product-briefs/pensando-dsc3-product-brief.pdf>`__
+- Pollara 400 single-port 400G AI NIC
+  `(pdf) <https://www.amd.com/content/dam/amd/en/documents/pensando-technical-docs/product-briefs/pollara-product-brief.pdf>`__
 
 Please visit the
diff --git a/doc/guides/nics/ionic.rst b/doc/guides/nics/ionic.rst
index a991a2cf3f..2709a888fb 100644
--- a/doc/guides/nics/ionic.rst
+++ b/doc/guides/nics/ionic.rst
@@ -1,4 +1,4 @@
 ..  SPDX-License-Identifier: BSD-3-Clause
-    Copyright 2018-2022 Advanced Micro Devices, Inc.
+    Copyright 2018-2025 Advanced Micro Devices, Inc.
 
 IONIC Driver
@@ -16,4 +16,6 @@ It currently supports the below models:
 - DSC3-400 dual-port 400G Distributed Services Card
   `(pdf) <https://www.amd.com/content/dam/amd/en/documents/pensando-technical-docs/product-briefs/pensando-dsc3-product-brief.pdf>`__
+- Pollara 400 single-port 400G AI NIC
+  `(pdf) <https://www.amd.com/content/dam/amd/en/documents/pensando-technical-docs/product-briefs/pollara-product-brief.pdf>`__
 
 Please visit the
-- 
2.51.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2025-11-25 15:03:58.006884270 +0000
+++ 0005-doc-add-Pollara-400-device-in-ionic-guide.patch	2025-11-25 15:03:57.841651314 +0000
@@ -1 +1 @@
-From 899e7bb0ab84a31a36437e8ad6e40493eea4b0ef Mon Sep 17 00:00:00 2001
+From 96bbffc68b4eccccc8a1d9977fc85ee9b139c527 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 899e7bb0ab84a31a36437e8ad6e40493eea4b0ef ]
+
@@ -8,2 +9,0 @@
-
-Cc: stable@dpdk.org


^ permalink raw reply	[flat|nested] 11+ messages in thread

* patch 'doc: fix note in FreeBSD guide' has been queued to stable release 24.11.4
  2025-11-25 15:05 patch 'examples/l3fwd: add Tx burst size configuration option' has been queued to stable release 24.11.4 Kevin Traynor
                   ` (3 preceding siblings ...)
  2025-11-25 15:05 ` patch 'doc: add Pollara 400 device in ionic guide' " Kevin Traynor
@ 2025-11-25 15:05 ` Kevin Traynor
  2025-11-26 11:08 ` patch 'examples/l3fwd: add Tx burst size configuration option' " Kevin Traynor
  5 siblings, 0 replies; 11+ messages in thread
From: Kevin Traynor @ 2025-11-25 15:05 UTC (permalink / raw)
  To: Thomas Monjalon; +Cc: Bruce Richardson, dpdk stable

Hi,

FYI, your patch has been queued to stable release 24.11.4

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/28/25. 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/kevintraynor/dpdk-stable

This queued commit can be viewed at:
https://github.com/kevintraynor/dpdk-stable/commit/d292c530c08f59ce5462538ad44090703d49f0fe

Thanks.

Kevin

---
From d292c530c08f59ce5462538ad44090703d49f0fe Mon Sep 17 00:00:00 2001
From: Thomas Monjalon <thomas@monjalon.net>
Date: Fri, 31 Oct 2025 12:53:42 +0100
Subject: [PATCH] doc: fix note in FreeBSD guide

[ upstream commit da1cd5cf6a8578aa879a9d5517132d13973cc38a ]

The note about the prefix of the package pyelftools was not showed
in the documentation output because the syntax was missing a colon,
so it was considered as a simple comment in the source file.

Fixes: 9e6f75e259a8 ("doc: update build section of FreeBSD guide")

Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
---
 doc/guides/freebsd_gsg/build_dpdk.rst | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/doc/guides/freebsd_gsg/build_dpdk.rst b/doc/guides/freebsd_gsg/build_dpdk.rst
index f98292bf41..a442473ec2 100644
--- a/doc/guides/freebsd_gsg/build_dpdk.rst
+++ b/doc/guides/freebsd_gsg/build_dpdk.rst
@@ -19,5 +19,5 @@ The following FreeBSD packages are required to build DPDK:
 * py38-pyelftools
 
-.. note:
+.. note::
 
   The specific package for pyelftools is dependent on the version of python in use,
-- 
2.51.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2025-11-25 15:03:58.034425480 +0000
+++ 0006-doc-fix-note-in-FreeBSD-guide.patch	2025-11-25 15:03:57.842651314 +0000
@@ -1 +1 @@
-From da1cd5cf6a8578aa879a9d5517132d13973cc38a Mon Sep 17 00:00:00 2001
+From d292c530c08f59ce5462538ad44090703d49f0fe Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit da1cd5cf6a8578aa879a9d5517132d13973cc38a ]
+
@@ -11 +12,0 @@
-Cc: stable@dpdk.org


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: patch 'doc: add Pollara 400 device in ionic guide' has been queued to stable release 24.11.4
  2025-11-25 15:05 ` patch 'doc: add Pollara 400 device in ionic guide' " Kevin Traynor
@ 2025-11-25 15:13   ` Kevin Traynor
  2025-11-25 15:26     ` Boyer, Andrew
  0 siblings, 1 reply; 11+ messages in thread
From: Kevin Traynor @ 2025-11-25 15:13 UTC (permalink / raw)
  To: Andrew Boyer; +Cc: dpdk stable, Luca Boccassi, Shani Peretz

On 25/11/2025 15:05, Kevin Traynor wrote:
> Hi,
> 
> FYI, your patch has been queued to stable release 24.11.4
> 
> 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/28/25. 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/kevintraynor/dpdk-stable
> 
> This queued commit can be viewed at:
> https://github.com/kevintraynor/dpdk-stable/commit/96bbffc68b4eccccc8a1d9977fc85ee9b139c527
> 

Hi Andrew,

I prepared this for the 24.11 branch as it is marked for stable and
24.11 is the current latest LTS branch.

Can you confirm which of the LTS branches this is applicable to ?
22.11, 23.11 and 24.11 are the maintained LTS branches.

thanks,
Kevin.

> Thanks.
> 
> Kevin
> 
> ---
>>From 96bbffc68b4eccccc8a1d9977fc85ee9b139c527 Mon Sep 17 00:00:00 2001
> From: Andrew Boyer <andrew.boyer@amd.com>
> Date: Thu, 20 Nov 2025 10:39:36 -0800
> Subject: [PATCH] doc: add Pollara 400 device in ionic guide
> 
> [ upstream commit 899e7bb0ab84a31a36437e8ad6e40493eea4b0ef ]
> 
> The Pollara 400 AI NIC is supported without any PMD changes.
> Add a link to the product brief.
> 
> Signed-off-by: Andrew Boyer <andrew.boyer@amd.com>
> ---
>  doc/guides/cryptodevs/ionic.rst | 4 +++-
>  doc/guides/nics/ionic.rst       | 4 +++-
>  2 files changed, 6 insertions(+), 2 deletions(-)
> 
> diff --git a/doc/guides/cryptodevs/ionic.rst b/doc/guides/cryptodevs/ionic.rst
> index d563602ebe..7c9d2ebd04 100644
> --- a/doc/guides/cryptodevs/ionic.rst
> +++ b/doc/guides/cryptodevs/ionic.rst
> @@ -1,4 +1,4 @@
>  .. SPDX-License-Identifier: BSD-3-Clause
> -   Copyright 2021-2024 Advanced Micro Devices, Inc.
> +   Copyright 2021-2025 Advanced Micro Devices, Inc.
>  
>  IONIC Crypto Driver
> @@ -17,4 +17,6 @@ It currently supports the below models:
>  - DSC3-400 dual-port 400G Distributed Services Card
>    `(pdf) <https://www.amd.com/content/dam/amd/en/documents/pensando-technical-docs/product-briefs/pensando-dsc3-product-brief.pdf>`__
> +- Pollara 400 single-port 400G AI NIC
> +  `(pdf) <https://www.amd.com/content/dam/amd/en/documents/pensando-technical-docs/product-briefs/pollara-product-brief.pdf>`__
>  
>  Please visit the
> diff --git a/doc/guides/nics/ionic.rst b/doc/guides/nics/ionic.rst
> index a991a2cf3f..2709a888fb 100644
> --- a/doc/guides/nics/ionic.rst
> +++ b/doc/guides/nics/ionic.rst
> @@ -1,4 +1,4 @@
>  ..  SPDX-License-Identifier: BSD-3-Clause
> -    Copyright 2018-2022 Advanced Micro Devices, Inc.
> +    Copyright 2018-2025 Advanced Micro Devices, Inc.
>  
>  IONIC Driver
> @@ -16,4 +16,6 @@ It currently supports the below models:
>  - DSC3-400 dual-port 400G Distributed Services Card
>    `(pdf) <https://www.amd.com/content/dam/amd/en/documents/pensando-technical-docs/product-briefs/pensando-dsc3-product-brief.pdf>`__
> +- Pollara 400 single-port 400G AI NIC
> +  `(pdf) <https://www.amd.com/content/dam/amd/en/documents/pensando-technical-docs/product-briefs/pollara-product-brief.pdf>`__
>  
>  Please visit the


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: patch 'doc: add Pollara 400 device in ionic guide' has been queued to stable release 24.11.4
  2025-11-25 15:13   ` Kevin Traynor
@ 2025-11-25 15:26     ` Boyer, Andrew
  0 siblings, 0 replies; 11+ messages in thread
From: Boyer, Andrew @ 2025-11-25 15:26 UTC (permalink / raw)
  To: Kevin Traynor; +Cc: dpdk stable, Luca Boccassi, Shani Peretz

[-- Attachment #1: Type: text/plain, Size: 1277 bytes --]

[AMD Official Use Only - AMD Internal Distribution Only]


On 25/11/2025 15:05, Kevin Traynor wrote:
> Hi,
>
> FYI, your patch has been queued to stable release 24.11.4
>
> 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/28/25. 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/kevintraynor/dpdk-stable
>
> This queued commit can be viewed at:
> https://github.com/kevintraynor/dpdk-stable/commit/96bbffc68b4eccccc8a1d9977fc85ee9b139c527
>
Hi Andrew,
I prepared this for the 24.11 branch as it is marked for stable and
24.11 is the current latest LTS branch.
Can you confirm which of the LTS branches this is applicable to ?
22.11, 23.11 and 24.11 are the maintained LTS branches.
thanks,
Kevin.

Hello Kevin,

Please apply it to all of them. Thanks for your help.

-Andrew

[-- Attachment #2: Type: text/html, Size: 6380 bytes --]

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: patch 'examples/l3fwd: add Tx burst size configuration option' has been queued to stable release 24.11.4
  2025-11-25 15:05 patch 'examples/l3fwd: add Tx burst size configuration option' has been queued to stable release 24.11.4 Kevin Traynor
                   ` (4 preceding siblings ...)
  2025-11-25 15:05 ` patch 'doc: fix note in FreeBSD " Kevin Traynor
@ 2025-11-26 11:08 ` Kevin Traynor
  2025-11-26 11:19   ` Ande, Venkat Kumar
  5 siblings, 1 reply; 11+ messages in thread
From: Kevin Traynor @ 2025-11-26 11:08 UTC (permalink / raw)
  To: Sivaprasad Tummala
  Cc: Venkat Kumar Ande, Dengdui Huang, Pavan Nikhilesh, Chengwen Feng,
	dpdk stable, Shani Peretz

On 25/11/2025 15:05, Kevin Traynor wrote:
> Hi,
> 
> FYI, your patch has been queued to stable release 24.11.4
> 
> 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/28/25. So please
> shout if anyone has objections.
> 

Re-reading this patch. It doesn't have stable tags and I don't think we
should take it to LTS branches, as it is changing defaults and seems to
be a small performance improvement.

> 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/kevintraynor/dpdk-stable
> 
> This queued commit can be viewed at:
> https://github.com/kevintraynor/dpdk-stable/commit/d150d3359e9f7cbd22b2d34c0fdec7b101400e98
> 
> Thanks.
> 
> Kevin
> 
> ---
>>From d150d3359e9f7cbd22b2d34c0fdec7b101400e98 Mon Sep 17 00:00:00 2001
> From: Sivaprasad Tummala <sivaprasad.tummala@amd.com>
> Date: Thu, 6 Nov 2025 14:16:31 +0000
> Subject: [PATCH] examples/l3fwd: add Tx burst size configuration option
> 
> [ upstream commit 79375d1015b308234e8b6955671a296394249f9b ]
> 
> Previously, the Tx burst size in l3fwd was fixed at 256, which could
> lead to suboptimal performance in certain scenarios.
> 
> This patch introduces separate --rx-burst and --tx-burst options to
> explicitly configure Rx and Tx burst sizes. By default, the Tx burst
> size now matches the Rx burst size for better efficiency and pipeline
> balance.
> 
> Fixes: d5c4897ecfb2 ("examples/l3fwd: add option to set Rx burst size")
> 
> Signed-off-by: Sivaprasad Tummala <sivaprasad.tummala@amd.com>
> Tested-by: Venkat Kumar Ande <venkatkumar.ande@amd.com>
> Tested-by: Dengdui Huang <huangdengdui@huawei.com>
> Tested-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
> Acked-by: Chengwen Feng <fengchengwen@huawei.com>
> ---
>  doc/guides/sample_app_ug/l3_forward.rst |  6 ++
>  examples/l3fwd/l3fwd.h                  | 10 +---
>  examples/l3fwd/l3fwd_acl.c              |  2 +-
>  examples/l3fwd/l3fwd_common.h           |  5 +-
>  examples/l3fwd/l3fwd_em.c               |  2 +-
>  examples/l3fwd/l3fwd_fib.c              |  2 +-
>  examples/l3fwd/l3fwd_lpm.c              |  2 +-
>  examples/l3fwd/main.c                   | 80 +++++++++++++++----------
>  8 files changed, 67 insertions(+), 42 deletions(-)
> 
> diff --git a/doc/guides/sample_app_ug/l3_forward.rst b/doc/guides/sample_app_ug/l3_forward.rst
> index de347eeeb1..aba671d2b7 100644
> --- a/doc/guides/sample_app_ug/l3_forward.rst
> +++ b/doc/guides/sample_app_ug/l3_forward.rst
> @@ -78,4 +78,6 @@ The application has a number of command line options::
>                               [--lookup LOOKUP_METHOD]
>                               --config(port,queue,lcore)[,(port,queue,lcore)]
> +                             [--rx-burst NPKTS]
> +                             [--tx-burst NPKTS]
>                               [--eth-dest=X,MM:MM:MM:MM:MM:MM]
>                               [--max-pkt-len PKTLEN]
> @@ -114,4 +116,8 @@ Where,
>  * ``--config (port,queue,lcore)[,(port,queue,lcore)]:`` Determines which queues from which ports are mapped to which cores.
>  
> +* ``--rx-burst NPKTS:`` Optional, Rx burst size in decimal (default 32).
> +
> +* ``--tx-burst NPKTS:`` Optional, Tx burst size in decimal (default 32).
> +
>  * ``--eth-dest=X,MM:MM:MM:MM:MM:MM:`` Optional, ethernet destination for port X.
>  
> diff --git a/examples/l3fwd/l3fwd.h b/examples/l3fwd/l3fwd.h
> index 0cce3406ee..471e3b488f 100644
> --- a/examples/l3fwd/l3fwd.h
> +++ b/examples/l3fwd/l3fwd.h
> @@ -33,8 +33,4 @@
>  #define VECTOR_SIZE_DEFAULT   MAX_PKT_BURST
>  #define VECTOR_TMO_NS_DEFAULT 1E6 /* 1ms */
> -/*
> - * Try to avoid TX buffering if we have at least MAX_TX_BURST packets to send.
> - */
> -#define	MAX_TX_BURST	  (MAX_PKT_BURST / 2)
>  
>  #define NB_SOCKETS        8
> @@ -117,5 +113,5 @@ extern struct acl_algorithms acl_alg[];
>  extern uint32_t max_pkt_len;
>  
> -extern uint32_t nb_pkt_per_burst;
> +extern uint32_t rx_burst_size;
>  extern uint32_t mb_mempool_cache_size;
>  
> @@ -153,6 +149,6 @@ send_single_packet(struct lcore_conf *qconf,
>  
>  	/* enough pkts to be sent */
> -	if (unlikely(len == MAX_PKT_BURST)) {
> -		send_burst(qconf, MAX_PKT_BURST, port);
> +	if (unlikely(len == rx_burst_size)) {
> +		send_burst(qconf, rx_burst_size, port);
>  		len = 0;
>  	}
> diff --git a/examples/l3fwd/l3fwd_acl.c b/examples/l3fwd/l3fwd_acl.c
> index 4fc4b986cc..a1275e18bc 100644
> --- a/examples/l3fwd/l3fwd_acl.c
> +++ b/examples/l3fwd/l3fwd_acl.c
> @@ -1137,5 +1137,5 @@ acl_main_loop(__rte_unused void *dummy)
>  			queueid = qconf->rx_queue_list[i].queue_id;
>  			nb_rx = rte_eth_rx_burst(portid, queueid,
> -				pkts_burst, nb_pkt_per_burst);
> +				pkts_burst, rx_burst_size);
>  
>  			if (nb_rx > 0) {
> diff --git a/examples/l3fwd/l3fwd_common.h b/examples/l3fwd/l3fwd_common.h
> index d94e5f1357..ccaf0cd402 100644
> --- a/examples/l3fwd/l3fwd_common.h
> +++ b/examples/l3fwd/l3fwd_common.h
> @@ -26,4 +26,7 @@
>  #define SENDM_PORT_OVERHEAD(x) (x)
>  
> +extern uint32_t rx_burst_size;
> +extern uint32_t tx_burst_size;
> +
>  /*
>   * From http://www.rfc-editor.org/rfc/rfc1812.txt section 5.2.2:
> @@ -72,5 +75,5 @@ send_packetsx4(struct lcore_conf *qconf, uint16_t port, struct rte_mbuf *m[],
>  	 * then send them straightway.
>  	 */
> -	if (num >= MAX_TX_BURST && len == 0) {
> +	if (num >= tx_burst_size && len == 0) {
>  		n = rte_eth_tx_burst(port, qconf->tx_queue_id[port], m, num);
>  		if (unlikely(n < num)) {
> diff --git a/examples/l3fwd/l3fwd_em.c b/examples/l3fwd/l3fwd_em.c
> index da9c45e3a4..58c54ed77e 100644
> --- a/examples/l3fwd/l3fwd_em.c
> +++ b/examples/l3fwd/l3fwd_em.c
> @@ -645,5 +645,5 @@ em_main_loop(__rte_unused void *dummy)
>  			queueid = qconf->rx_queue_list[i].queue_id;
>  			nb_rx = rte_eth_rx_burst(portid, queueid, pkts_burst,
> -				nb_pkt_per_burst);
> +				rx_burst_size);
>  			if (nb_rx == 0)
>  				continue;
> diff --git a/examples/l3fwd/l3fwd_fib.c b/examples/l3fwd/l3fwd_fib.c
> index 82f1739df7..4fc6bf90d5 100644
> --- a/examples/l3fwd/l3fwd_fib.c
> +++ b/examples/l3fwd/l3fwd_fib.c
> @@ -240,5 +240,5 @@ fib_main_loop(__rte_unused void *dummy)
>  			queueid = qconf->rx_queue_list[i].queue_id;
>  			nb_rx = rte_eth_rx_burst(portid, queueid, pkts_burst,
> -					nb_pkt_per_burst);
> +					rx_burst_size);
>  			if (nb_rx == 0)
>  				continue;
> diff --git a/examples/l3fwd/l3fwd_lpm.c b/examples/l3fwd/l3fwd_lpm.c
> index fec0aeb79c..a71eee69ec 100644
> --- a/examples/l3fwd/l3fwd_lpm.c
> +++ b/examples/l3fwd/l3fwd_lpm.c
> @@ -206,5 +206,5 @@ lpm_main_loop(__rte_unused void *dummy)
>  			queueid = qconf->rx_queue_list[i].queue_id;
>  			nb_rx = rte_eth_rx_burst(portid, queueid, pkts_burst,
> -				nb_pkt_per_burst);
> +				rx_burst_size);
>  			if (nb_rx == 0)
>  				continue;
> diff --git a/examples/l3fwd/main.c b/examples/l3fwd/main.c
> index ae3b4f6439..11aed26f94 100644
> --- a/examples/l3fwd/main.c
> +++ b/examples/l3fwd/main.c
> @@ -58,6 +58,7 @@ static_assert(MEMPOOL_CACHE_SIZE >= MAX_PKT_BURST, "MAX_PKT_BURST should be at m
>  uint16_t nb_rxd = RX_DESC_DEFAULT;
>  uint16_t nb_txd = TX_DESC_DEFAULT;
> -uint32_t nb_pkt_per_burst = DEFAULT_PKT_BURST;
> +uint32_t rx_burst_size = DEFAULT_PKT_BURST;
>  uint32_t mb_mempool_cache_size = MEMPOOL_CACHE_SIZE;
> +uint32_t tx_burst_size = DEFAULT_PKT_BURST;
>  
>  /**< Ports set in promiscuous mode off by default. */
> @@ -401,5 +402,6 @@ print_usage(const char *prgname)
>  		" [--rx-queue-size NPKTS]"
>  		" [--tx-queue-size NPKTS]"
> -		" [--burst NPKTS]"
> +		" [--rx-burst NPKTS]"
> +		" [--tx-burst NPKTS]"
>  		" [--mbcache CACHESZ]"
>  		" [--eth-dest=X,MM:MM:MM:MM:MM:MM]"
> @@ -428,5 +430,7 @@ print_usage(const char *prgname)
>  		"  --tx-queue-size NPKTS: Tx queue size in decimal\n"
>  		"            Default: %d\n"
> -		"  --burst NPKTS: Burst size in decimal\n"
> +		"  --rx-burst NPKTS: RX Burst size in decimal\n"
> +		"            Default: %d\n"
> +		"  --tx-burst NPKTS: TX Burst size in decimal\n"
>  		"            Default: %d\n"
>  		"  --mbcache CACHESZ: Mbuf cache size in decimal\n"
> @@ -461,6 +465,6 @@ print_usage(const char *prgname)
>  		"  --rule_ipv6=FILE: Specify the ipv6 rules entries file.\n"
>  		"  --alg: ACL classify method to use, one of: %s.\n\n",
> -		prgname, RX_DESC_DEFAULT, TX_DESC_DEFAULT, DEFAULT_PKT_BURST, MEMPOOL_CACHE_SIZE,
> -		ACL_LEAD_CHAR, ROUTE_LEAD_CHAR, alg);
> +		prgname, RX_DESC_DEFAULT, TX_DESC_DEFAULT, DEFAULT_PKT_BURST, DEFAULT_PKT_BURST,
> +		MEMPOOL_CACHE_SIZE, ACL_LEAD_CHAR, ROUTE_LEAD_CHAR, alg);
>  }
>  
> @@ -696,5 +700,5 @@ parse_mbcache_size(const char *optarg)
>  
>  static void
> -parse_pkt_burst(const char *optarg)
> +parse_pkt_burst(const char *optarg, bool is_rx_burst, uint32_t *burst_sz)
>  {
>  	struct rte_eth_dev_info dev_info;
> @@ -711,29 +715,36 @@ parse_pkt_burst(const char *optarg)
>  	if (pkt_burst > MAX_PKT_BURST) {
>  		RTE_LOG(INFO, L3FWD, "User provided burst must be <= %d. Using default value %d\n",
> -			MAX_PKT_BURST, nb_pkt_per_burst);
> +			MAX_PKT_BURST, *burst_sz);
>  		return;
>  	} else if (pkt_burst > 0) {
> -		nb_pkt_per_burst = (uint32_t)pkt_burst;
> +		*burst_sz = (uint32_t)pkt_burst;
>  		return;
>  	}
>  
> -	/* If user gives a value of zero, query the PMD for its recommended Rx burst size. */
> -	ret = rte_eth_dev_info_get(0, &dev_info);
> -	if (ret != 0)
> -		return;
> -	burst_size = dev_info.default_rxportconf.burst_size;
> -	if (burst_size == 0) {
> -		RTE_LOG(INFO, L3FWD, "PMD does not recommend a burst size. Using default value %d. "
> -			"User provided value must be in [1, %d]\n",
> -			nb_pkt_per_burst, MAX_PKT_BURST);
> -		return;
> -	} else if (burst_size > MAX_PKT_BURST) {
> -		RTE_LOG(INFO, L3FWD, "PMD recommended burst size %d exceeds maximum value %d. "
> -			"Using default value %d\n",
> -			burst_size, MAX_PKT_BURST, nb_pkt_per_burst);
> -		return;
> +	if (is_rx_burst) {
> +		/* If user gives a value of zero, query the PMD for its recommended
> +		 * Rx burst size.
> +		 */
> +		ret = rte_eth_dev_info_get(0, &dev_info);
> +		if (ret != 0)
> +			return;
> +		burst_size = dev_info.default_rxportconf.burst_size;
> +		if (burst_size == 0) {
> +			RTE_LOG(INFO, L3FWD, "PMD does not recommend a burst size. Using default value %d. "
> +				"User provided value must be in [1, %d]\n",
> +				rx_burst_size, MAX_PKT_BURST);
> +			return;
> +		} else if (burst_size > MAX_PKT_BURST) {
> +			RTE_LOG(INFO, L3FWD, "PMD recommended burst size %d exceeds maximum value %d. "
> +				"Using default value %d\n",
> +				burst_size, MAX_PKT_BURST, rx_burst_size);
> +			return;
> +		}
> +		*burst_sz = burst_size;
> +		RTE_LOG(INFO, L3FWD, "Using PMD-provided RX burst value %d\n", burst_size);
> +	} else {
> +		RTE_LOG(INFO, L3FWD, "User provided TX burst is 0. Using default value %d\n",
> +			*burst_sz);
>  	}
> -	nb_pkt_per_burst = burst_size;
> -	RTE_LOG(INFO, L3FWD, "Using PMD-provided burst value %d\n", burst_size);
>  }
>  
> @@ -769,5 +780,6 @@ static const char short_options[] =
>  #define CMD_LINE_OPT_RULE_IPV6 "rule_ipv6"
>  #define CMD_LINE_OPT_ALG "alg"
> -#define CMD_LINE_OPT_PKT_BURST "burst"
> +#define CMD_LINE_OPT_PKT_RX_BURST "rx-burst"
> +#define CMD_LINE_OPT_PKT_TX_BURST "tx-burst"
>  #define CMD_LINE_OPT_MB_CACHE_SIZE "mbcache"
>  
> @@ -800,5 +812,6 @@ enum {
>  	CMD_LINE_OPT_VECTOR_SIZE_NUM,
>  	CMD_LINE_OPT_VECTOR_TMO_NS_NUM,
> -	CMD_LINE_OPT_PKT_BURST_NUM,
> +	CMD_LINE_OPT_PKT_RX_BURST_NUM,
> +	CMD_LINE_OPT_PKT_TX_BURST_NUM,
>  	CMD_LINE_OPT_MB_CACHE_SIZE_NUM,
>  };
> @@ -828,5 +841,6 @@ static const struct option lgopts[] = {
>  	{CMD_LINE_OPT_RULE_IPV6,   1, 0, CMD_LINE_OPT_RULE_IPV6_NUM},
>  	{CMD_LINE_OPT_ALG,   1, 0, CMD_LINE_OPT_ALG_NUM},
> -	{CMD_LINE_OPT_PKT_BURST,   1, 0, CMD_LINE_OPT_PKT_BURST_NUM},
> +	{CMD_LINE_OPT_PKT_RX_BURST,   1, 0, CMD_LINE_OPT_PKT_RX_BURST_NUM},
> +	{CMD_LINE_OPT_PKT_TX_BURST,   1, 0, CMD_LINE_OPT_PKT_TX_BURST_NUM},
>  	{CMD_LINE_OPT_MB_CACHE_SIZE,   1, 0, CMD_LINE_OPT_MB_CACHE_SIZE_NUM},
>  	{NULL, 0, 0, 0}
> @@ -918,6 +932,10 @@ parse_args(int argc, char **argv)
>  			break;
>  
> -		case CMD_LINE_OPT_PKT_BURST_NUM:
> -			parse_pkt_burst(optarg);
> +		case CMD_LINE_OPT_PKT_RX_BURST_NUM:
> +			parse_pkt_burst(optarg, true, &rx_burst_size);
> +			break;
> +
> +		case CMD_LINE_OPT_PKT_TX_BURST_NUM:
> +			parse_pkt_burst(optarg, false, &tx_burst_size);
>  			break;
>  
> @@ -1655,4 +1673,6 @@ main(int argc, char **argv)
>  		rte_exit(EXIT_FAILURE, "Invalid L3FWD parameters\n");
>  
> +	RTE_LOG(INFO, L3FWD, "Using Rx burst %u Tx burst %u\n", rx_burst_size, tx_burst_size);
> +
>  	/* Setup function pointers for lookup method. */
>  	setup_l3fwd_lookup_tables();


^ permalink raw reply	[flat|nested] 11+ messages in thread

* RE: patch 'examples/l3fwd: add Tx burst size configuration option' has been queued to stable release 24.11.4
  2025-11-26 11:08 ` patch 'examples/l3fwd: add Tx burst size configuration option' " Kevin Traynor
@ 2025-11-26 11:19   ` Ande, Venkat Kumar
  2025-11-26 11:51     ` Kevin Traynor
  0 siblings, 1 reply; 11+ messages in thread
From: Ande, Venkat Kumar @ 2025-11-26 11:19 UTC (permalink / raw)
  To: Kevin Traynor, Tummala, Sivaprasad
  Cc: Dengdui Huang, Pavan Nikhilesh, Chengwen Feng, dpdk stable, Shani Peretz

[AMD Official Use Only - AMD Internal Distribution Only]

Hi Kevin,


If the commit d5c4897ecfb2 ("examples/l3fwd: add option to set Rx burst > size"), is taken in stable branch, then this patch also should be taken. As the performance of few of our platforms drastically came down for l3fwd test scenario with that commit.


Regards,
Venkat

-----Original Message-----
From: Kevin Traynor <ktraynor@redhat.com>
Sent: Wednesday, November 26, 2025 4:39 PM
To: Tummala, Sivaprasad <Sivaprasad.Tummala@amd.com>
Cc: Ande, Venkat Kumar <VenkatKumar.Ande@amd.com>; Dengdui Huang <huangdengdui@huawei.com>; Pavan Nikhilesh <pbhagavatula@marvell.com>; Chengwen Feng <fengchengwen@huawei.com>; dpdk stable <stable@dpdk.org>; Shani Peretz <shperetz@nvidia.com>
Subject: Re: patch 'examples/l3fwd: add Tx burst size configuration option' has been queued to stable release 24.11.4

Caution: This message originated from an External Source. Use proper caution when opening attachments, clicking links, or responding.


On 25/11/2025 15:05, Kevin Traynor wrote:
> Hi,
>
> FYI, your patch has been queued to stable release 24.11.4
>
> 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/28/25. So please
> shout if anyone has objections.
>

Re-reading this patch. It doesn't have stable tags and I don't think we should take it to LTS branches, as it is changing defaults and seems to be a small performance improvement.

> 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/kevintraynor/dpdk-stable
>
> This queued commit can be viewed at:
> https://github.com/kevintraynor/dpdk-stable/commit/d150d3359e9f7cbd22b
> 2d34c0fdec7b101400e98
>
> Thanks.
>
> Kevin
>
> ---
>>From d150d3359e9f7cbd22b2d34c0fdec7b101400e98 Mon Sep 17 00:00:00 2001
> From: Sivaprasad Tummala <sivaprasad.tummala@amd.com>
> Date: Thu, 6 Nov 2025 14:16:31 +0000
> Subject: [PATCH] examples/l3fwd: add Tx burst size configuration
> option
>
> [ upstream commit 79375d1015b308234e8b6955671a296394249f9b ]
>
> Previously, the Tx burst size in l3fwd was fixed at 256, which could
> lead to suboptimal performance in certain scenarios.
>
> This patch introduces separate --rx-burst and --tx-burst options to
> explicitly configure Rx and Tx burst sizes. By default, the Tx burst
> size now matches the Rx burst size for better efficiency and pipeline
> balance.
>
> Fixes: d5c4897ecfb2 ("examples/l3fwd: add option to set Rx burst
> size")
>
> Signed-off-by: Sivaprasad Tummala <sivaprasad.tummala@amd.com>
> Tested-by: Venkat Kumar Ande <venkatkumar.ande@amd.com>
> Tested-by: Dengdui Huang <huangdengdui@huawei.com>
> Tested-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
> Acked-by: Chengwen Feng <fengchengwen@huawei.com>
> ---
>  doc/guides/sample_app_ug/l3_forward.rst |  6 ++
>  examples/l3fwd/l3fwd.h                  | 10 +---
>  examples/l3fwd/l3fwd_acl.c              |  2 +-
>  examples/l3fwd/l3fwd_common.h           |  5 +-
>  examples/l3fwd/l3fwd_em.c               |  2 +-
>  examples/l3fwd/l3fwd_fib.c              |  2 +-
>  examples/l3fwd/l3fwd_lpm.c              |  2 +-
>  examples/l3fwd/main.c                   | 80 +++++++++++++++----------
>  8 files changed, 67 insertions(+), 42 deletions(-)
>
> diff --git a/doc/guides/sample_app_ug/l3_forward.rst
> b/doc/guides/sample_app_ug/l3_forward.rst
> index de347eeeb1..aba671d2b7 100644
> --- a/doc/guides/sample_app_ug/l3_forward.rst
> +++ b/doc/guides/sample_app_ug/l3_forward.rst
> @@ -78,4 +78,6 @@ The application has a number of command line options::
>                               [--lookup LOOKUP_METHOD]
>
> --config(port,queue,lcore)[,(port,queue,lcore)]
> +                             [--rx-burst NPKTS]
> +                             [--tx-burst NPKTS]
>                               [--eth-dest=X,MM:MM:MM:MM:MM:MM]
>                               [--max-pkt-len PKTLEN] @@ -114,4 +116,8
> @@ Where,
>  * ``--config (port,queue,lcore)[,(port,queue,lcore)]:`` Determines which queues from which ports are mapped to which cores.
>
> +* ``--rx-burst NPKTS:`` Optional, Rx burst size in decimal (default 32).
> +
> +* ``--tx-burst NPKTS:`` Optional, Tx burst size in decimal (default 32).
> +
>  * ``--eth-dest=X,MM:MM:MM:MM:MM:MM:`` Optional, ethernet destination for port X.
>
> diff --git a/examples/l3fwd/l3fwd.h b/examples/l3fwd/l3fwd.h index
> 0cce3406ee..471e3b488f 100644
> --- a/examples/l3fwd/l3fwd.h
> +++ b/examples/l3fwd/l3fwd.h
> @@ -33,8 +33,4 @@
>  #define VECTOR_SIZE_DEFAULT   MAX_PKT_BURST
>  #define VECTOR_TMO_NS_DEFAULT 1E6 /* 1ms */
> -/*
> - * Try to avoid TX buffering if we have at least MAX_TX_BURST packets to send.
> - */
> -#define      MAX_TX_BURST      (MAX_PKT_BURST / 2)
>
>  #define NB_SOCKETS        8
> @@ -117,5 +113,5 @@ extern struct acl_algorithms acl_alg[];  extern
> uint32_t max_pkt_len;
>
> -extern uint32_t nb_pkt_per_burst;
> +extern uint32_t rx_burst_size;
>  extern uint32_t mb_mempool_cache_size;
>
> @@ -153,6 +149,6 @@ send_single_packet(struct lcore_conf *qconf,
>
>       /* enough pkts to be sent */
> -     if (unlikely(len == MAX_PKT_BURST)) {
> -             send_burst(qconf, MAX_PKT_BURST, port);
> +     if (unlikely(len == rx_burst_size)) {
> +             send_burst(qconf, rx_burst_size, port);
>               len = 0;
>       }
> diff --git a/examples/l3fwd/l3fwd_acl.c b/examples/l3fwd/l3fwd_acl.c
> index 4fc4b986cc..a1275e18bc 100644
> --- a/examples/l3fwd/l3fwd_acl.c
> +++ b/examples/l3fwd/l3fwd_acl.c
> @@ -1137,5 +1137,5 @@ acl_main_loop(__rte_unused void *dummy)
>                       queueid = qconf->rx_queue_list[i].queue_id;
>                       nb_rx = rte_eth_rx_burst(portid, queueid,
> -                             pkts_burst, nb_pkt_per_burst);
> +                             pkts_burst, rx_burst_size);
>
>                       if (nb_rx > 0) { diff --git
> a/examples/l3fwd/l3fwd_common.h b/examples/l3fwd/l3fwd_common.h index
> d94e5f1357..ccaf0cd402 100644
> --- a/examples/l3fwd/l3fwd_common.h
> +++ b/examples/l3fwd/l3fwd_common.h
> @@ -26,4 +26,7 @@
>  #define SENDM_PORT_OVERHEAD(x) (x)
>
> +extern uint32_t rx_burst_size;
> +extern uint32_t tx_burst_size;
> +
>  /*
>   * From http://www.rfc-editor.org/rfc/rfc1812.txt section 5.2.2:
> @@ -72,5 +75,5 @@ send_packetsx4(struct lcore_conf *qconf, uint16_t port, struct rte_mbuf *m[],
>        * then send them straightway.
>        */
> -     if (num >= MAX_TX_BURST && len == 0) {
> +     if (num >= tx_burst_size && len == 0) {
>               n = rte_eth_tx_burst(port, qconf->tx_queue_id[port], m, num);
>               if (unlikely(n < num)) { diff --git
> a/examples/l3fwd/l3fwd_em.c b/examples/l3fwd/l3fwd_em.c index
> da9c45e3a4..58c54ed77e 100644
> --- a/examples/l3fwd/l3fwd_em.c
> +++ b/examples/l3fwd/l3fwd_em.c
> @@ -645,5 +645,5 @@ em_main_loop(__rte_unused void *dummy)
>                       queueid = qconf->rx_queue_list[i].queue_id;
>                       nb_rx = rte_eth_rx_burst(portid, queueid, pkts_burst,
> -                             nb_pkt_per_burst);
> +                             rx_burst_size);
>                       if (nb_rx == 0)
>                               continue; diff --git
> a/examples/l3fwd/l3fwd_fib.c b/examples/l3fwd/l3fwd_fib.c index
> 82f1739df7..4fc6bf90d5 100644
> --- a/examples/l3fwd/l3fwd_fib.c
> +++ b/examples/l3fwd/l3fwd_fib.c
> @@ -240,5 +240,5 @@ fib_main_loop(__rte_unused void *dummy)
>                       queueid = qconf->rx_queue_list[i].queue_id;
>                       nb_rx = rte_eth_rx_burst(portid, queueid, pkts_burst,
> -                                     nb_pkt_per_burst);
> +                                     rx_burst_size);
>                       if (nb_rx == 0)
>                               continue; diff --git
> a/examples/l3fwd/l3fwd_lpm.c b/examples/l3fwd/l3fwd_lpm.c index
> fec0aeb79c..a71eee69ec 100644
> --- a/examples/l3fwd/l3fwd_lpm.c
> +++ b/examples/l3fwd/l3fwd_lpm.c
> @@ -206,5 +206,5 @@ lpm_main_loop(__rte_unused void *dummy)
>                       queueid = qconf->rx_queue_list[i].queue_id;
>                       nb_rx = rte_eth_rx_burst(portid, queueid, pkts_burst,
> -                             nb_pkt_per_burst);
> +                             rx_burst_size);
>                       if (nb_rx == 0)
>                               continue; diff --git
> a/examples/l3fwd/main.c b/examples/l3fwd/main.c index
> ae3b4f6439..11aed26f94 100644
> --- a/examples/l3fwd/main.c
> +++ b/examples/l3fwd/main.c
> @@ -58,6 +58,7 @@ static_assert(MEMPOOL_CACHE_SIZE >= MAX_PKT_BURST,
> "MAX_PKT_BURST should be at m  uint16_t nb_rxd = RX_DESC_DEFAULT;
> uint16_t nb_txd = TX_DESC_DEFAULT; -uint32_t nb_pkt_per_burst =
> DEFAULT_PKT_BURST;
> +uint32_t rx_burst_size = DEFAULT_PKT_BURST;
>  uint32_t mb_mempool_cache_size = MEMPOOL_CACHE_SIZE;
> +uint32_t tx_burst_size = DEFAULT_PKT_BURST;
>
>  /**< Ports set in promiscuous mode off by default. */ @@ -401,5
> +402,6 @@ print_usage(const char *prgname)
>               " [--rx-queue-size NPKTS]"
>               " [--tx-queue-size NPKTS]"
> -             " [--burst NPKTS]"
> +             " [--rx-burst NPKTS]"
> +             " [--tx-burst NPKTS]"
>               " [--mbcache CACHESZ]"
>               " [--eth-dest=X,MM:MM:MM:MM:MM:MM]"
> @@ -428,5 +430,7 @@ print_usage(const char *prgname)
>               "  --tx-queue-size NPKTS: Tx queue size in decimal\n"
>               "            Default: %d\n"
> -             "  --burst NPKTS: Burst size in decimal\n"
> +             "  --rx-burst NPKTS: RX Burst size in decimal\n"
> +             "            Default: %d\n"
> +             "  --tx-burst NPKTS: TX Burst size in decimal\n"
>               "            Default: %d\n"
>               "  --mbcache CACHESZ: Mbuf cache size in decimal\n"
> @@ -461,6 +465,6 @@ print_usage(const char *prgname)
>               "  --rule_ipv6=FILE: Specify the ipv6 rules entries file.\n"
>               "  --alg: ACL classify method to use, one of: %s.\n\n",
> -             prgname, RX_DESC_DEFAULT, TX_DESC_DEFAULT, DEFAULT_PKT_BURST, MEMPOOL_CACHE_SIZE,
> -             ACL_LEAD_CHAR, ROUTE_LEAD_CHAR, alg);
> +             prgname, RX_DESC_DEFAULT, TX_DESC_DEFAULT, DEFAULT_PKT_BURST, DEFAULT_PKT_BURST,
> +             MEMPOOL_CACHE_SIZE, ACL_LEAD_CHAR, ROUTE_LEAD_CHAR,
> + alg);
>  }
>
> @@ -696,5 +700,5 @@ parse_mbcache_size(const char *optarg)
>
>  static void
> -parse_pkt_burst(const char *optarg)
> +parse_pkt_burst(const char *optarg, bool is_rx_burst, uint32_t
> +*burst_sz)
>  {
>       struct rte_eth_dev_info dev_info; @@ -711,29 +715,36 @@
> parse_pkt_burst(const char *optarg)
>       if (pkt_burst > MAX_PKT_BURST) {
>               RTE_LOG(INFO, L3FWD, "User provided burst must be <= %d. Using default value %d\n",
> -                     MAX_PKT_BURST, nb_pkt_per_burst);
> +                     MAX_PKT_BURST, *burst_sz);
>               return;
>       } else if (pkt_burst > 0) {
> -             nb_pkt_per_burst = (uint32_t)pkt_burst;
> +             *burst_sz = (uint32_t)pkt_burst;
>               return;
>       }
>
> -     /* If user gives a value of zero, query the PMD for its recommended Rx burst size. */
> -     ret = rte_eth_dev_info_get(0, &dev_info);
> -     if (ret != 0)
> -             return;
> -     burst_size = dev_info.default_rxportconf.burst_size;
> -     if (burst_size == 0) {
> -             RTE_LOG(INFO, L3FWD, "PMD does not recommend a burst size. Using default value %d. "
> -                     "User provided value must be in [1, %d]\n",
> -                     nb_pkt_per_burst, MAX_PKT_BURST);
> -             return;
> -     } else if (burst_size > MAX_PKT_BURST) {
> -             RTE_LOG(INFO, L3FWD, "PMD recommended burst size %d exceeds maximum value %d. "
> -                     "Using default value %d\n",
> -                     burst_size, MAX_PKT_BURST, nb_pkt_per_burst);
> -             return;
> +     if (is_rx_burst) {
> +             /* If user gives a value of zero, query the PMD for its recommended
> +              * Rx burst size.
> +              */
> +             ret = rte_eth_dev_info_get(0, &dev_info);
> +             if (ret != 0)
> +                     return;
> +             burst_size = dev_info.default_rxportconf.burst_size;
> +             if (burst_size == 0) {
> +                     RTE_LOG(INFO, L3FWD, "PMD does not recommend a burst size. Using default value %d. "
> +                             "User provided value must be in [1, %d]\n",
> +                             rx_burst_size, MAX_PKT_BURST);
> +                     return;
> +             } else if (burst_size > MAX_PKT_BURST) {
> +                     RTE_LOG(INFO, L3FWD, "PMD recommended burst size %d exceeds maximum value %d. "
> +                             "Using default value %d\n",
> +                             burst_size, MAX_PKT_BURST, rx_burst_size);
> +                     return;
> +             }
> +             *burst_sz = burst_size;
> +             RTE_LOG(INFO, L3FWD, "Using PMD-provided RX burst value %d\n", burst_size);
> +     } else {
> +             RTE_LOG(INFO, L3FWD, "User provided TX burst is 0. Using default value %d\n",
> +                     *burst_sz);
>       }
> -     nb_pkt_per_burst = burst_size;
> -     RTE_LOG(INFO, L3FWD, "Using PMD-provided burst value %d\n", burst_size);
>  }
>
> @@ -769,5 +780,6 @@ static const char short_options[] =  #define
> CMD_LINE_OPT_RULE_IPV6 "rule_ipv6"
>  #define CMD_LINE_OPT_ALG "alg"
> -#define CMD_LINE_OPT_PKT_BURST "burst"
> +#define CMD_LINE_OPT_PKT_RX_BURST "rx-burst"
> +#define CMD_LINE_OPT_PKT_TX_BURST "tx-burst"
>  #define CMD_LINE_OPT_MB_CACHE_SIZE "mbcache"
>
> @@ -800,5 +812,6 @@ enum {
>       CMD_LINE_OPT_VECTOR_SIZE_NUM,
>       CMD_LINE_OPT_VECTOR_TMO_NS_NUM,
> -     CMD_LINE_OPT_PKT_BURST_NUM,
> +     CMD_LINE_OPT_PKT_RX_BURST_NUM,
> +     CMD_LINE_OPT_PKT_TX_BURST_NUM,
>       CMD_LINE_OPT_MB_CACHE_SIZE_NUM,
>  };
> @@ -828,5 +841,6 @@ static const struct option lgopts[] = {
>       {CMD_LINE_OPT_RULE_IPV6,   1, 0, CMD_LINE_OPT_RULE_IPV6_NUM},
>       {CMD_LINE_OPT_ALG,   1, 0, CMD_LINE_OPT_ALG_NUM},
> -     {CMD_LINE_OPT_PKT_BURST,   1, 0, CMD_LINE_OPT_PKT_BURST_NUM},
> +     {CMD_LINE_OPT_PKT_RX_BURST,   1, 0, CMD_LINE_OPT_PKT_RX_BURST_NUM},
> +     {CMD_LINE_OPT_PKT_TX_BURST,   1, 0, CMD_LINE_OPT_PKT_TX_BURST_NUM},
>       {CMD_LINE_OPT_MB_CACHE_SIZE,   1, 0, CMD_LINE_OPT_MB_CACHE_SIZE_NUM},
>       {NULL, 0, 0, 0}
> @@ -918,6 +932,10 @@ parse_args(int argc, char **argv)
>                       break;
>
> -             case CMD_LINE_OPT_PKT_BURST_NUM:
> -                     parse_pkt_burst(optarg);
> +             case CMD_LINE_OPT_PKT_RX_BURST_NUM:
> +                     parse_pkt_burst(optarg, true, &rx_burst_size);
> +                     break;
> +
> +             case CMD_LINE_OPT_PKT_TX_BURST_NUM:
> +                     parse_pkt_burst(optarg, false, &tx_burst_size);
>                       break;
>
> @@ -1655,4 +1673,6 @@ main(int argc, char **argv)
>               rte_exit(EXIT_FAILURE, "Invalid L3FWD parameters\n");
>
> +     RTE_LOG(INFO, L3FWD, "Using Rx burst %u Tx burst %u\n",
> + rx_burst_size, tx_burst_size);
> +
>       /* Setup function pointers for lookup method. */
>       setup_l3fwd_lookup_tables();


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: patch 'examples/l3fwd: add Tx burst size configuration option' has been queued to stable release 24.11.4
  2025-11-26 11:19   ` Ande, Venkat Kumar
@ 2025-11-26 11:51     ` Kevin Traynor
  0 siblings, 0 replies; 11+ messages in thread
From: Kevin Traynor @ 2025-11-26 11:51 UTC (permalink / raw)
  To: Ande, Venkat Kumar, Tummala, Sivaprasad
  Cc: Dengdui Huang, Pavan Nikhilesh, Chengwen Feng, dpdk stable, Shani Peretz

On 26/11/2025 11:19, Ande, Venkat Kumar wrote:
> [AMD Official Use Only - AMD Internal Distribution Only]
> 
> Hi Kevin,
> 
> 
> If the commit d5c4897ecfb2 ("examples/l3fwd: add option to set Rx burst > size"), is taken in stable branch, then this patch also should be taken. As the performance of few of our platforms drastically came down for l3fwd test scenario with that commit.
> 

Hi Venkat,

Commit d5c4897ecfb2 is part of the original 24.11 DPDK release.

A change of params name may make sense on DPDK main branch, but it is
not good to change user visible options on LTS branches.

However, as it's fixing a performance regression and is just an example
app, we can take it on 24.11 branch. It is not relevant for older LTS
branches as issue was introduced in 24.11.

thanks,
Kevin.

> 
> Regards,
> Venkat
> 
> -----Original Message-----
> From: Kevin Traynor <ktraynor@redhat.com>
> Sent: Wednesday, November 26, 2025 4:39 PM
> To: Tummala, Sivaprasad <Sivaprasad.Tummala@amd.com>
> Cc: Ande, Venkat Kumar <VenkatKumar.Ande@amd.com>; Dengdui Huang <huangdengdui@huawei.com>; Pavan Nikhilesh <pbhagavatula@marvell.com>; Chengwen Feng <fengchengwen@huawei.com>; dpdk stable <stable@dpdk.org>; Shani Peretz <shperetz@nvidia.com>
> Subject: Re: patch 'examples/l3fwd: add Tx burst size configuration option' has been queued to stable release 24.11.4
> 
> Caution: This message originated from an External Source. Use proper caution when opening attachments, clicking links, or responding.
> 
> 
> On 25/11/2025 15:05, Kevin Traynor wrote:
>> Hi,
>>
>> FYI, your patch has been queued to stable release 24.11.4
>>
>> 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/28/25. So please
>> shout if anyone has objections.
>>
> 
> Re-reading this patch. It doesn't have stable tags and I don't think we should take it to LTS branches, as it is changing defaults and seems to be a small performance improvement.
> 
>> 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/kevintraynor/dpdk-stable
>>
>> This queued commit can be viewed at:
>> https://github.com/kevintraynor/dpdk-stable/commit/d150d3359e9f7cbd22b
>> 2d34c0fdec7b101400e98
>>
>> Thanks.
>>
>> Kevin
>>
>> ---
>> >From d150d3359e9f7cbd22b2d34c0fdec7b101400e98 Mon Sep 17 00:00:00 2001
>> From: Sivaprasad Tummala <sivaprasad.tummala@amd.com>
>> Date: Thu, 6 Nov 2025 14:16:31 +0000
>> Subject: [PATCH] examples/l3fwd: add Tx burst size configuration
>> option
>>
>> [ upstream commit 79375d1015b308234e8b6955671a296394249f9b ]
>>
>> Previously, the Tx burst size in l3fwd was fixed at 256, which could
>> lead to suboptimal performance in certain scenarios.
>>
>> This patch introduces separate --rx-burst and --tx-burst options to
>> explicitly configure Rx and Tx burst sizes. By default, the Tx burst
>> size now matches the Rx burst size for better efficiency and pipeline
>> balance.
>>
>> Fixes: d5c4897ecfb2 ("examples/l3fwd: add option to set Rx burst
>> size")
>>
>> Signed-off-by: Sivaprasad Tummala <sivaprasad.tummala@amd.com>
>> Tested-by: Venkat Kumar Ande <venkatkumar.ande@amd.com>
>> Tested-by: Dengdui Huang <huangdengdui@huawei.com>
>> Tested-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
>> Acked-by: Chengwen Feng <fengchengwen@huawei.com>
>> ---
>>  doc/guides/sample_app_ug/l3_forward.rst |  6 ++
>>  examples/l3fwd/l3fwd.h                  | 10 +---
>>  examples/l3fwd/l3fwd_acl.c              |  2 +-
>>  examples/l3fwd/l3fwd_common.h           |  5 +-
>>  examples/l3fwd/l3fwd_em.c               |  2 +-
>>  examples/l3fwd/l3fwd_fib.c              |  2 +-
>>  examples/l3fwd/l3fwd_lpm.c              |  2 +-
>>  examples/l3fwd/main.c                   | 80 +++++++++++++++----------
>>  8 files changed, 67 insertions(+), 42 deletions(-)
>>
>> diff --git a/doc/guides/sample_app_ug/l3_forward.rst
>> b/doc/guides/sample_app_ug/l3_forward.rst
>> index de347eeeb1..aba671d2b7 100644
>> --- a/doc/guides/sample_app_ug/l3_forward.rst
>> +++ b/doc/guides/sample_app_ug/l3_forward.rst
>> @@ -78,4 +78,6 @@ The application has a number of command line options::
>>                               [--lookup LOOKUP_METHOD]
>>
>> --config(port,queue,lcore)[,(port,queue,lcore)]
>> +                             [--rx-burst NPKTS]
>> +                             [--tx-burst NPKTS]
>>                               [--eth-dest=X,MM:MM:MM:MM:MM:MM]
>>                               [--max-pkt-len PKTLEN] @@ -114,4 +116,8
>> @@ Where,
>>  * ``--config (port,queue,lcore)[,(port,queue,lcore)]:`` Determines which queues from which ports are mapped to which cores.
>>
>> +* ``--rx-burst NPKTS:`` Optional, Rx burst size in decimal (default 32).
>> +
>> +* ``--tx-burst NPKTS:`` Optional, Tx burst size in decimal (default 32).
>> +
>>  * ``--eth-dest=X,MM:MM:MM:MM:MM:MM:`` Optional, ethernet destination for port X.
>>
>> diff --git a/examples/l3fwd/l3fwd.h b/examples/l3fwd/l3fwd.h index
>> 0cce3406ee..471e3b488f 100644
>> --- a/examples/l3fwd/l3fwd.h
>> +++ b/examples/l3fwd/l3fwd.h
>> @@ -33,8 +33,4 @@
>>  #define VECTOR_SIZE_DEFAULT   MAX_PKT_BURST
>>  #define VECTOR_TMO_NS_DEFAULT 1E6 /* 1ms */
>> -/*
>> - * Try to avoid TX buffering if we have at least MAX_TX_BURST packets to send.
>> - */
>> -#define      MAX_TX_BURST      (MAX_PKT_BURST / 2)
>>
>>  #define NB_SOCKETS        8
>> @@ -117,5 +113,5 @@ extern struct acl_algorithms acl_alg[];  extern
>> uint32_t max_pkt_len;
>>
>> -extern uint32_t nb_pkt_per_burst;
>> +extern uint32_t rx_burst_size;
>>  extern uint32_t mb_mempool_cache_size;
>>
>> @@ -153,6 +149,6 @@ send_single_packet(struct lcore_conf *qconf,
>>
>>       /* enough pkts to be sent */
>> -     if (unlikely(len == MAX_PKT_BURST)) {
>> -             send_burst(qconf, MAX_PKT_BURST, port);
>> +     if (unlikely(len == rx_burst_size)) {
>> +             send_burst(qconf, rx_burst_size, port);
>>               len = 0;
>>       }
>> diff --git a/examples/l3fwd/l3fwd_acl.c b/examples/l3fwd/l3fwd_acl.c
>> index 4fc4b986cc..a1275e18bc 100644
>> --- a/examples/l3fwd/l3fwd_acl.c
>> +++ b/examples/l3fwd/l3fwd_acl.c
>> @@ -1137,5 +1137,5 @@ acl_main_loop(__rte_unused void *dummy)
>>                       queueid = qconf->rx_queue_list[i].queue_id;
>>                       nb_rx = rte_eth_rx_burst(portid, queueid,
>> -                             pkts_burst, nb_pkt_per_burst);
>> +                             pkts_burst, rx_burst_size);
>>
>>                       if (nb_rx > 0) { diff --git
>> a/examples/l3fwd/l3fwd_common.h b/examples/l3fwd/l3fwd_common.h index
>> d94e5f1357..ccaf0cd402 100644
>> --- a/examples/l3fwd/l3fwd_common.h
>> +++ b/examples/l3fwd/l3fwd_common.h
>> @@ -26,4 +26,7 @@
>>  #define SENDM_PORT_OVERHEAD(x) (x)
>>
>> +extern uint32_t rx_burst_size;
>> +extern uint32_t tx_burst_size;
>> +
>>  /*
>>   * From http://www.rfc-editor.org/rfc/rfc1812.txt section 5.2.2:
>> @@ -72,5 +75,5 @@ send_packetsx4(struct lcore_conf *qconf, uint16_t port, struct rte_mbuf *m[],
>>        * then send them straightway.
>>        */
>> -     if (num >= MAX_TX_BURST && len == 0) {
>> +     if (num >= tx_burst_size && len == 0) {
>>               n = rte_eth_tx_burst(port, qconf->tx_queue_id[port], m, num);
>>               if (unlikely(n < num)) { diff --git
>> a/examples/l3fwd/l3fwd_em.c b/examples/l3fwd/l3fwd_em.c index
>> da9c45e3a4..58c54ed77e 100644
>> --- a/examples/l3fwd/l3fwd_em.c
>> +++ b/examples/l3fwd/l3fwd_em.c
>> @@ -645,5 +645,5 @@ em_main_loop(__rte_unused void *dummy)
>>                       queueid = qconf->rx_queue_list[i].queue_id;
>>                       nb_rx = rte_eth_rx_burst(portid, queueid, pkts_burst,
>> -                             nb_pkt_per_burst);
>> +                             rx_burst_size);
>>                       if (nb_rx == 0)
>>                               continue; diff --git
>> a/examples/l3fwd/l3fwd_fib.c b/examples/l3fwd/l3fwd_fib.c index
>> 82f1739df7..4fc6bf90d5 100644
>> --- a/examples/l3fwd/l3fwd_fib.c
>> +++ b/examples/l3fwd/l3fwd_fib.c
>> @@ -240,5 +240,5 @@ fib_main_loop(__rte_unused void *dummy)
>>                       queueid = qconf->rx_queue_list[i].queue_id;
>>                       nb_rx = rte_eth_rx_burst(portid, queueid, pkts_burst,
>> -                                     nb_pkt_per_burst);
>> +                                     rx_burst_size);
>>                       if (nb_rx == 0)
>>                               continue; diff --git
>> a/examples/l3fwd/l3fwd_lpm.c b/examples/l3fwd/l3fwd_lpm.c index
>> fec0aeb79c..a71eee69ec 100644
>> --- a/examples/l3fwd/l3fwd_lpm.c
>> +++ b/examples/l3fwd/l3fwd_lpm.c
>> @@ -206,5 +206,5 @@ lpm_main_loop(__rte_unused void *dummy)
>>                       queueid = qconf->rx_queue_list[i].queue_id;
>>                       nb_rx = rte_eth_rx_burst(portid, queueid, pkts_burst,
>> -                             nb_pkt_per_burst);
>> +                             rx_burst_size);
>>                       if (nb_rx == 0)
>>                               continue; diff --git
>> a/examples/l3fwd/main.c b/examples/l3fwd/main.c index
>> ae3b4f6439..11aed26f94 100644
>> --- a/examples/l3fwd/main.c
>> +++ b/examples/l3fwd/main.c
>> @@ -58,6 +58,7 @@ static_assert(MEMPOOL_CACHE_SIZE >= MAX_PKT_BURST,
>> "MAX_PKT_BURST should be at m  uint16_t nb_rxd = RX_DESC_DEFAULT;
>> uint16_t nb_txd = TX_DESC_DEFAULT; -uint32_t nb_pkt_per_burst =
>> DEFAULT_PKT_BURST;
>> +uint32_t rx_burst_size = DEFAULT_PKT_BURST;
>>  uint32_t mb_mempool_cache_size = MEMPOOL_CACHE_SIZE;
>> +uint32_t tx_burst_size = DEFAULT_PKT_BURST;
>>
>>  /**< Ports set in promiscuous mode off by default. */ @@ -401,5
>> +402,6 @@ print_usage(const char *prgname)
>>               " [--rx-queue-size NPKTS]"
>>               " [--tx-queue-size NPKTS]"
>> -             " [--burst NPKTS]"
>> +             " [--rx-burst NPKTS]"
>> +             " [--tx-burst NPKTS]"
>>               " [--mbcache CACHESZ]"
>>               " [--eth-dest=X,MM:MM:MM:MM:MM:MM]"
>> @@ -428,5 +430,7 @@ print_usage(const char *prgname)
>>               "  --tx-queue-size NPKTS: Tx queue size in decimal\n"
>>               "            Default: %d\n"
>> -             "  --burst NPKTS: Burst size in decimal\n"
>> +             "  --rx-burst NPKTS: RX Burst size in decimal\n"
>> +             "            Default: %d\n"
>> +             "  --tx-burst NPKTS: TX Burst size in decimal\n"
>>               "            Default: %d\n"
>>               "  --mbcache CACHESZ: Mbuf cache size in decimal\n"
>> @@ -461,6 +465,6 @@ print_usage(const char *prgname)
>>               "  --rule_ipv6=FILE: Specify the ipv6 rules entries file.\n"
>>               "  --alg: ACL classify method to use, one of: %s.\n\n",
>> -             prgname, RX_DESC_DEFAULT, TX_DESC_DEFAULT, DEFAULT_PKT_BURST, MEMPOOL_CACHE_SIZE,
>> -             ACL_LEAD_CHAR, ROUTE_LEAD_CHAR, alg);
>> +             prgname, RX_DESC_DEFAULT, TX_DESC_DEFAULT, DEFAULT_PKT_BURST, DEFAULT_PKT_BURST,
>> +             MEMPOOL_CACHE_SIZE, ACL_LEAD_CHAR, ROUTE_LEAD_CHAR,
>> + alg);
>>  }
>>
>> @@ -696,5 +700,5 @@ parse_mbcache_size(const char *optarg)
>>
>>  static void
>> -parse_pkt_burst(const char *optarg)
>> +parse_pkt_burst(const char *optarg, bool is_rx_burst, uint32_t
>> +*burst_sz)
>>  {
>>       struct rte_eth_dev_info dev_info; @@ -711,29 +715,36 @@
>> parse_pkt_burst(const char *optarg)
>>       if (pkt_burst > MAX_PKT_BURST) {
>>               RTE_LOG(INFO, L3FWD, "User provided burst must be <= %d. Using default value %d\n",
>> -                     MAX_PKT_BURST, nb_pkt_per_burst);
>> +                     MAX_PKT_BURST, *burst_sz);
>>               return;
>>       } else if (pkt_burst > 0) {
>> -             nb_pkt_per_burst = (uint32_t)pkt_burst;
>> +             *burst_sz = (uint32_t)pkt_burst;
>>               return;
>>       }
>>
>> -     /* If user gives a value of zero, query the PMD for its recommended Rx burst size. */
>> -     ret = rte_eth_dev_info_get(0, &dev_info);
>> -     if (ret != 0)
>> -             return;
>> -     burst_size = dev_info.default_rxportconf.burst_size;
>> -     if (burst_size == 0) {
>> -             RTE_LOG(INFO, L3FWD, "PMD does not recommend a burst size. Using default value %d. "
>> -                     "User provided value must be in [1, %d]\n",
>> -                     nb_pkt_per_burst, MAX_PKT_BURST);
>> -             return;
>> -     } else if (burst_size > MAX_PKT_BURST) {
>> -             RTE_LOG(INFO, L3FWD, "PMD recommended burst size %d exceeds maximum value %d. "
>> -                     "Using default value %d\n",
>> -                     burst_size, MAX_PKT_BURST, nb_pkt_per_burst);
>> -             return;
>> +     if (is_rx_burst) {
>> +             /* If user gives a value of zero, query the PMD for its recommended
>> +              * Rx burst size.
>> +              */
>> +             ret = rte_eth_dev_info_get(0, &dev_info);
>> +             if (ret != 0)
>> +                     return;
>> +             burst_size = dev_info.default_rxportconf.burst_size;
>> +             if (burst_size == 0) {
>> +                     RTE_LOG(INFO, L3FWD, "PMD does not recommend a burst size. Using default value %d. "
>> +                             "User provided value must be in [1, %d]\n",
>> +                             rx_burst_size, MAX_PKT_BURST);
>> +                     return;
>> +             } else if (burst_size > MAX_PKT_BURST) {
>> +                     RTE_LOG(INFO, L3FWD, "PMD recommended burst size %d exceeds maximum value %d. "
>> +                             "Using default value %d\n",
>> +                             burst_size, MAX_PKT_BURST, rx_burst_size);
>> +                     return;
>> +             }
>> +             *burst_sz = burst_size;
>> +             RTE_LOG(INFO, L3FWD, "Using PMD-provided RX burst value %d\n", burst_size);
>> +     } else {
>> +             RTE_LOG(INFO, L3FWD, "User provided TX burst is 0. Using default value %d\n",
>> +                     *burst_sz);
>>       }
>> -     nb_pkt_per_burst = burst_size;
>> -     RTE_LOG(INFO, L3FWD, "Using PMD-provided burst value %d\n", burst_size);
>>  }
>>
>> @@ -769,5 +780,6 @@ static const char short_options[] =  #define
>> CMD_LINE_OPT_RULE_IPV6 "rule_ipv6"
>>  #define CMD_LINE_OPT_ALG "alg"
>> -#define CMD_LINE_OPT_PKT_BURST "burst"
>> +#define CMD_LINE_OPT_PKT_RX_BURST "rx-burst"
>> +#define CMD_LINE_OPT_PKT_TX_BURST "tx-burst"
>>  #define CMD_LINE_OPT_MB_CACHE_SIZE "mbcache"
>>
>> @@ -800,5 +812,6 @@ enum {
>>       CMD_LINE_OPT_VECTOR_SIZE_NUM,
>>       CMD_LINE_OPT_VECTOR_TMO_NS_NUM,
>> -     CMD_LINE_OPT_PKT_BURST_NUM,
>> +     CMD_LINE_OPT_PKT_RX_BURST_NUM,
>> +     CMD_LINE_OPT_PKT_TX_BURST_NUM,
>>       CMD_LINE_OPT_MB_CACHE_SIZE_NUM,
>>  };
>> @@ -828,5 +841,6 @@ static const struct option lgopts[] = {
>>       {CMD_LINE_OPT_RULE_IPV6,   1, 0, CMD_LINE_OPT_RULE_IPV6_NUM},
>>       {CMD_LINE_OPT_ALG,   1, 0, CMD_LINE_OPT_ALG_NUM},
>> -     {CMD_LINE_OPT_PKT_BURST,   1, 0, CMD_LINE_OPT_PKT_BURST_NUM},
>> +     {CMD_LINE_OPT_PKT_RX_BURST,   1, 0, CMD_LINE_OPT_PKT_RX_BURST_NUM},
>> +     {CMD_LINE_OPT_PKT_TX_BURST,   1, 0, CMD_LINE_OPT_PKT_TX_BURST_NUM},
>>       {CMD_LINE_OPT_MB_CACHE_SIZE,   1, 0, CMD_LINE_OPT_MB_CACHE_SIZE_NUM},
>>       {NULL, 0, 0, 0}
>> @@ -918,6 +932,10 @@ parse_args(int argc, char **argv)
>>                       break;
>>
>> -             case CMD_LINE_OPT_PKT_BURST_NUM:
>> -                     parse_pkt_burst(optarg);
>> +             case CMD_LINE_OPT_PKT_RX_BURST_NUM:
>> +                     parse_pkt_burst(optarg, true, &rx_burst_size);
>> +                     break;
>> +
>> +             case CMD_LINE_OPT_PKT_TX_BURST_NUM:
>> +                     parse_pkt_burst(optarg, false, &tx_burst_size);
>>                       break;
>>
>> @@ -1655,4 +1673,6 @@ main(int argc, char **argv)
>>               rte_exit(EXIT_FAILURE, "Invalid L3FWD parameters\n");
>>
>> +     RTE_LOG(INFO, L3FWD, "Using Rx burst %u Tx burst %u\n",
>> + rx_burst_size, tx_burst_size);
>> +
>>       /* Setup function pointers for lookup method. */
>>       setup_l3fwd_lookup_tables();
> 


^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2025-11-26 11:51 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-11-25 15:05 patch 'examples/l3fwd: add Tx burst size configuration option' has been queued to stable release 24.11.4 Kevin Traynor
2025-11-25 15:05 ` patch 'examples/server_node_efd: fix format overflow' " Kevin Traynor
2025-11-25 15:05 ` patch 'examples/vdpa: " Kevin Traynor
2025-11-25 15:05 ` patch 'net/mlx5: fix flex flow item header length' " Kevin Traynor
2025-11-25 15:05 ` patch 'doc: add Pollara 400 device in ionic guide' " Kevin Traynor
2025-11-25 15:13   ` Kevin Traynor
2025-11-25 15:26     ` Boyer, Andrew
2025-11-25 15:05 ` patch 'doc: fix note in FreeBSD " Kevin Traynor
2025-11-26 11:08 ` patch 'examples/l3fwd: add Tx burst size configuration option' " Kevin Traynor
2025-11-26 11:19   ` Ande, Venkat Kumar
2025-11-26 11:51     ` Kevin Traynor

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).