patch 'examples/packet_ordering: fix Rx with reorder mode disabled' has been queued to stable release 21.11.7

Kevin Traynor ktraynor at redhat.com
Fri Mar 8 15:28:21 CET 2024


Hi,

FYI, your patch has been queued to stable release 21.11.7

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 03/13/24. 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/dabf41766557e4879080529d179758df2433938a

Thanks.

Kevin

---
>From dabf41766557e4879080529d179758df2433938a Mon Sep 17 00:00:00 2001
From: Qian Hao <qi_an_hao at 126.com>
Date: Wed, 13 Dec 2023 19:07:18 +0800
Subject: [PATCH] examples/packet_ordering: fix Rx with reorder mode disabled

[ upstream commit 7ba49dc729937ea97642a615e9b08f33919b94f4 ]

The packet_ordering example works in two modes (opt via --disable-reorder):
  - When reorder is enabled: rx_thread - N*worker_thread - send_thread
  - When reorder is disabled: rx_thread - N*worker_thread - tx_thread
N parallel worker_thread(s) generate out-of-order packets.

When reorder is enabled, send_thread uses sequence number generated in
rx_thread (L459) to enforce packet ordering. Otherwise rx_thread just
sends any packet it receives.

rx_thread writes sequence number into a dynamic field, which is only
registered by calling rte_reorder_create() (Line 741) when reorder is
enabled. However, rx_thread marks sequence number onto each packet no
matter whether reorder is enabled, overwriting the leading bytes in packet
mbufs when reorder is disabled, resulting in segfaults when PMD tries to
DMA packets.

`if (!disable_reorder_flag) {...}` is added in rx_thread to fix the bug.
The test is inlined by the compiler to prevent any performance loss.

Signed-off-by: Qian Hao <qi_an_hao at 126.com>
Acked-by: Volodymyr Fialko <vfialko at marvell.com>
---
 .mailmap                        |  1 +
 examples/packet_ordering/main.c | 32 +++++++++++++++++++++++++-------
 2 files changed, 26 insertions(+), 7 deletions(-)

diff --git a/.mailmap b/.mailmap
index 7776e85d57..2e60e2b813 100644
--- a/.mailmap
+++ b/.mailmap
@@ -1089,4 +1089,5 @@ Przemyslaw Patynowski <przemyslawx.patynowski at intel.com>
 Przemyslaw Zegan <przemyslawx.zegan at intel.com>
 Pu Xu <583493798 at qq.com>
+Qian Hao <qi_an_hao at 126.com>
 Qian Xu <qian.q.xu at intel.com>
 Qiao Liu <qiao.liu at intel.com>
diff --git a/examples/packet_ordering/main.c b/examples/packet_ordering/main.c
index 99e67ef67b..f16afe8986 100644
--- a/examples/packet_ordering/main.c
+++ b/examples/packet_ordering/main.c
@@ -5,4 +5,5 @@
 #include <signal.h>
 #include <getopt.h>
+#include <stdbool.h>
 
 #include <rte_eal.h>
@@ -427,6 +428,6 @@ int_handler(int sig_num)
  * ring.
  */
-static int
-rx_thread(struct rte_ring *ring_out)
+static __rte_always_inline int
+rx_thread(struct rte_ring *ring_out, bool disable_reorder_flag)
 {
 	uint32_t seqn = 0;
@@ -454,7 +455,9 @@ rx_thread(struct rte_ring *ring_out)
 				app_stats.rx.rx_pkts += nb_rx_pkts;
 
-				/* mark sequence number */
-				for (i = 0; i < nb_rx_pkts; )
-					*rte_reorder_seqn(pkts[i++]) = seqn++;
+				/* mark sequence number if reorder is enabled */
+				if (!disable_reorder_flag) {
+					for (i = 0; i < nb_rx_pkts;)
+						*rte_reorder_seqn(pkts[i++]) = seqn++;
+				}
 
 				/* enqueue to rx_to_workers ring */
@@ -473,4 +476,16 @@ rx_thread(struct rte_ring *ring_out)
 }
 
+static __rte_noinline int
+rx_thread_reorder(struct rte_ring *ring_out)
+{
+	return rx_thread(ring_out, false);
+}
+
+static __rte_noinline int
+rx_thread_reorder_disabled(struct rte_ring *ring_out)
+{
+	return rx_thread(ring_out, true);
+}
+
 /**
  * This thread takes bursts of packets from the rx_to_workers ring and
@@ -772,6 +787,9 @@ main(int argc, char **argv)
 	}
 
-	/* Start rx_thread() on the main core */
-	rx_thread(rx_to_workers);
+	/* Start rx_thread_xxx() on the main core */
+	if (disable_reorder)
+		rx_thread_reorder_disabled(rx_to_workers);
+	else
+		rx_thread_reorder(rx_to_workers);
 
 	RTE_LCORE_FOREACH_WORKER(lcore_id) {
-- 
2.43.2

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2024-03-08 13:47:49.978872229 +0000
+++ 0033-examples-packet_ordering-fix-Rx-with-reorder-mode-di.patch	2024-03-08 13:47:49.042686735 +0000
@@ -1 +1 @@
-From 7ba49dc729937ea97642a615e9b08f33919b94f4 Mon Sep 17 00:00:00 2001
+From dabf41766557e4879080529d179758df2433938a Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 7ba49dc729937ea97642a615e9b08f33919b94f4 ]
+
@@ -25,2 +26,0 @@
-Cc: stable at dpdk.org
-
@@ -35 +35 @@
-index 1b346f630f..55913d0450 100644
+index 7776e85d57..2e60e2b813 100644
@@ -38 +38 @@
-@@ -1143,4 +1143,5 @@ Przemyslaw Patynowski <przemyslawx.patynowski at intel.com>
+@@ -1089,4 +1089,5 @@ Przemyslaw Patynowski <przemyslawx.patynowski at intel.com>
@@ -45 +45 @@
-index d2fd6f77e4..f839db9102 100644
+index 99e67ef67b..f16afe8986 100644
@@ -48 +48 @@
-@@ -6,4 +6,5 @@
+@@ -5,4 +5,5 @@
@@ -54 +54 @@
-@@ -428,6 +429,6 @@ int_handler(int sig_num)
+@@ -427,6 +428,6 @@ int_handler(int sig_num)
@@ -63 +63 @@
-@@ -455,7 +456,9 @@ rx_thread(struct rte_ring *ring_out)
+@@ -454,7 +455,9 @@ rx_thread(struct rte_ring *ring_out)
@@ -76 +76 @@
-@@ -474,4 +477,16 @@ rx_thread(struct rte_ring *ring_out)
+@@ -473,4 +476,16 @@ rx_thread(struct rte_ring *ring_out)
@@ -93 +93 @@
-@@ -773,6 +788,9 @@ main(int argc, char **argv)
+@@ -772,6 +787,9 @@ main(int argc, char **argv)



More information about the stable mailing list