* patch 'eal: fix plugin dir walk' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
@ 2025-10-27 16:18 ` luca.boccassi
2025-10-27 16:18 ` patch 'cmdline: fix port list parsing' " luca.boccassi
` (76 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:18 UTC (permalink / raw)
To: David Marchand; +Cc: Bruce Richardson, Chengwen Feng, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/61274adade73841b501017af50721b96c4c1e19b
Thanks.
Luca Boccassi
---
From 61274adade73841b501017af50721b96c4c1e19b Mon Sep 17 00:00:00 2001
From: David Marchand <david.marchand@redhat.com>
Date: Fri, 20 Dec 2024 09:34:31 +0100
Subject: [PATCH] eal: fix plugin dir walk
[ upstream commit c32e203ee23473ccf3c8526d12e1c59f17c50eab ]
For '.' and '..' directories (or any short file name),
a out of bound issue occurs.
Caught by UBSan:
EAL: Detected shared linkage of DPDK
../lib/eal/common/eal_common_options.c:420:15: runtime error: index -2
out of bounds for type 'char[256]'
#0 0x7f867eedf206 in eal_plugindir_init
eal_common_options.c
#1 0x7f867eede58a in eal_plugins_init
(build/lib/librte_eal.so.25+0xde58a)
(BuildId: e7e4a1935e4bacb51c82ab1a84098a27decf3b4c)
#2 0x7f867efb8587 in rte_eal_init
(build/lib/librte_eal.so.25+0x1b8587)
(BuildId: e7e4a1935e4bacb51c82ab1a84098a27decf3b4c)
#3 0x55b62360861e in main
(/home/runner/work/dpdk/dpdk/build/app/dpdk-testpmd+0x9e061e)
(BuildId: d821ec918612c83fad8b5ccb6cc518e66bee48cd)
#4 0x7f8667429d8f in __libc_start_call_main
csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#5 0x7f8667429e3f in __libc_start_main
csu/../csu/libc-start.c:392:3
#6 0x55b622d9d444 in _start
(/home/runner/work/dpdk/dpdk/build/app/dpdk-testpmd+0x175444)
(BuildId: d821ec918612c83fad8b5ccb6cc518e66bee48cd)
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior
../lib/eal/common/eal_common_options.c:420:15 in
../lib/eal/common/eal_common_options.c:421:15:
runtime error: index 18446744073709551609 out of bounds
for type 'char[256]'
Fixes: c57f6e5c604a ("eal: fix plugin loading")
Signed-off-by: David Marchand <david.marchand@redhat.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Chengwen Feng <fengchengwen@huawei.com>
---
lib/eal/common/eal_common_options.c | 17 +++++++++++------
1 file changed, 11 insertions(+), 6 deletions(-)
diff --git a/lib/eal/common/eal_common_options.c b/lib/eal/common/eal_common_options.c
index 8570f8f03e..b9ee8e05bf 100644
--- a/lib/eal/common/eal_common_options.c
+++ b/lib/eal/common/eal_common_options.c
@@ -397,12 +397,21 @@ eal_plugins_init(void)
}
#else
+static bool
+ends_with(const char *str, const char *tail)
+{
+ size_t tail_len = strlen(tail);
+ size_t str_len = strlen(str);
+
+ return str_len >= tail_len && strcmp(&str[str_len - tail_len], tail) == 0;
+}
+
static int
eal_plugindir_init(const char *path)
{
- DIR *d = NULL;
struct dirent *dent = NULL;
char sopath[PATH_MAX];
+ DIR *d = NULL;
if (path == NULL || *path == '\0')
return 0;
@@ -416,12 +425,8 @@ eal_plugindir_init(const char *path)
while ((dent = readdir(d)) != NULL) {
struct stat sb;
- int nlen = strnlen(dent->d_name, sizeof(dent->d_name));
- /* check if name ends in .so or .so.ABI_VERSION */
- if (strcmp(&dent->d_name[nlen - 3], ".so") != 0 &&
- strcmp(&dent->d_name[nlen - 4 - strlen(ABI_VERSION)],
- ".so."ABI_VERSION) != 0)
+ if (!ends_with(dent->d_name, ".so") && !ends_with(dent->d_name, ".so."ABI_VERSION))
continue;
snprintf(sopath, sizeof(sopath), "%s/%s", path, dent->d_name);
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:34.944218833 +0000
+++ 0002-eal-fix-plugin-dir-walk.patch 2025-10-27 15:54:34.719947643 +0000
@@ -1 +1 @@
-From c32e203ee23473ccf3c8526d12e1c59f17c50eab Mon Sep 17 00:00:00 2001
+From 61274adade73841b501017af50721b96c4c1e19b Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit c32e203ee23473ccf3c8526d12e1c59f17c50eab ]
+
@@ -39 +40,0 @@
-Cc: stable@dpdk.org
@@ -49 +50 @@
-index 3169dd069f..2f91b96190 100644
+index 8570f8f03e..b9ee8e05bf 100644
@@ -52 +53 @@
-@@ -399,12 +399,21 @@ eal_plugins_init(void)
+@@ -397,12 +397,21 @@ eal_plugins_init(void)
@@ -75 +76 @@
-@@ -418,12 +427,8 @@ eal_plugindir_init(const char *path)
+@@ -416,12 +425,8 @@ eal_plugindir_init(const char *path)
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'cmdline: fix port list parsing' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
2025-10-27 16:18 ` patch 'eal: fix plugin dir walk' " luca.boccassi
@ 2025-10-27 16:18 ` luca.boccassi
2025-10-27 16:18 ` patch 'cmdline: fix highest bit " luca.boccassi
` (75 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:18 UTC (permalink / raw)
To: David Marchand; +Cc: Bruce Richardson, Marat Khalili, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/712571041c9a7b6cc7fde5eeb504855d2c05d36a
Thanks.
Luca Boccassi
---
From 712571041c9a7b6cc7fde5eeb504855d2c05d36a Mon Sep 17 00:00:00 2001
From: David Marchand <david.marchand@redhat.com>
Date: Mon, 3 Feb 2025 13:47:33 +0100
Subject: [PATCH] cmdline: fix port list parsing
[ upstream commit 48e03475262798e6758b9c767e87e2f88375072c ]
Doing arithmetic with the NULL pointer is undefined.
Caught by UBSan:
../lib/cmdline/cmdline_parse_portlist.c:40:19: runtime error:
applying non-zero offset 1 to null pointer
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior
../lib/cmdline/cmdline_parse_portlist.c:40:19 in
Fixes: af75078fece3 ("first public release")
Signed-off-by: David Marchand <david.marchand@redhat.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Marat Khalili <marat.khalili@huawei.com>
---
lib/cmdline/cmdline_parse_portlist.c | 10 ++++------
1 file changed, 4 insertions(+), 6 deletions(-)
diff --git a/lib/cmdline/cmdline_parse_portlist.c b/lib/cmdline/cmdline_parse_portlist.c
index 2e2294553a..290e61f211 100644
--- a/lib/cmdline/cmdline_parse_portlist.c
+++ b/lib/cmdline/cmdline_parse_portlist.c
@@ -31,15 +31,12 @@ parse_set_list(cmdline_portlist_t *pl, size_t low, size_t high)
static int
parse_ports(cmdline_portlist_t *pl, const char *str)
{
+ const char *first = str;
size_t ps, pe;
- const char *first, *last;
char *end;
- for (first = str, last = first;
- first != NULL && last != NULL;
- first = last + 1) {
-
- last = strchr(first, ',');
+ while (first != NULL) {
+ const char *last = strchr(first, ',');
errno = 0;
ps = strtoul(first, &end, 10);
@@ -63,6 +60,7 @@ parse_ports(cmdline_portlist_t *pl, const char *str)
return -1;
parse_set_list(pl, ps, pe);
+ first = (last == NULL ? NULL : last + 1);
}
return 0;
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:34.977880376 +0000
+++ 0003-cmdline-fix-port-list-parsing.patch 2025-10-27 15:54:34.719947643 +0000
@@ -1 +1 @@
-From 48e03475262798e6758b9c767e87e2f88375072c Mon Sep 17 00:00:00 2001
+From 712571041c9a7b6cc7fde5eeb504855d2c05d36a Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 48e03475262798e6758b9c767e87e2f88375072c ]
+
@@ -16 +17,0 @@
-Cc: stable@dpdk.org
@@ -26 +27 @@
-index ef6ce223b5..549f6d9671 100644
+index 2e2294553a..290e61f211 100644
@@ -29 +30 @@
-@@ -33,15 +33,12 @@ parse_set_list(cmdline_portlist_t *pl, size_t low, size_t high)
+@@ -31,15 +31,12 @@ parse_set_list(cmdline_portlist_t *pl, size_t low, size_t high)
@@ -48 +49 @@
-@@ -65,6 +62,7 @@ parse_ports(cmdline_portlist_t *pl, const char *str)
+@@ -63,6 +60,7 @@ parse_ports(cmdline_portlist_t *pl, const char *str)
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'cmdline: fix highest bit port list parsing' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
2025-10-27 16:18 ` patch 'eal: fix plugin dir walk' " luca.boccassi
2025-10-27 16:18 ` patch 'cmdline: fix port list parsing' " luca.boccassi
@ 2025-10-27 16:18 ` luca.boccassi
2025-10-27 16:18 ` patch 'tailq: fix lookup macro' " luca.boccassi
` (74 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:18 UTC (permalink / raw)
To: David Marchand
Cc: Bruce Richardson, Marat Khalili, Chengwen Feng, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/60da73d65687b69136d2da18072777f5de6a6c9f
Thanks.
Luca Boccassi
---
From 60da73d65687b69136d2da18072777f5de6a6c9f Mon Sep 17 00:00:00 2001
From: David Marchand <david.marchand@redhat.com>
Date: Mon, 3 Feb 2025 13:50:48 +0100
Subject: [PATCH] cmdline: fix highest bit port list parsing
[ upstream commit f3a07a33d7b3a0b153f7f5b60c13bebede9a9104 ]
pl->map is a uint32_t.
Caught by UBSan:
../lib/cmdline/cmdline_parse_portlist.c:27:17: runtime error:
left shift of 1 by 31 places cannot be represented in type 'int'
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior
../lib/cmdline/cmdline_parse_portlist.c:27:17 in
Fixes: af75078fece3 ("first public release")
Signed-off-by: David Marchand <david.marchand@redhat.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
Reviewed-by: Marat Khalili <marat.khalili@huawei.com>
Acked-by: Chengwen Feng <fengchengwen@huawei.com>
---
lib/cmdline/cmdline_parse_portlist.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/lib/cmdline/cmdline_parse_portlist.c b/lib/cmdline/cmdline_parse_portlist.c
index 290e61f211..6b7096579e 100644
--- a/lib/cmdline/cmdline_parse_portlist.c
+++ b/lib/cmdline/cmdline_parse_portlist.c
@@ -9,7 +9,9 @@
#include <string.h>
#include <errno.h>
+#include <rte_bitops.h>
#include <rte_string_fns.h>
+
#include "cmdline_parse.h"
#include "cmdline_parse_portlist.h"
@@ -24,7 +26,8 @@ static void
parse_set_list(cmdline_portlist_t *pl, size_t low, size_t high)
{
do {
- pl->map |= (1 << low++);
+ pl->map |= RTE_BIT32(low);
+ low++;
} while (low <= high);
}
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:35.010248872 +0000
+++ 0004-cmdline-fix-highest-bit-port-list-parsing.patch 2025-10-27 15:54:34.719947643 +0000
@@ -1 +1 @@
-From f3a07a33d7b3a0b153f7f5b60c13bebede9a9104 Mon Sep 17 00:00:00 2001
+From 60da73d65687b69136d2da18072777f5de6a6c9f Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit f3a07a33d7b3a0b153f7f5b60c13bebede9a9104 ]
+
@@ -16 +17,0 @@
-Cc: stable@dpdk.org
@@ -27 +28 @@
-index 549f6d9671..3efe4143e3 100644
+index 290e61f211..6b7096579e 100644
@@ -30 +31,2 @@
-@@ -10,7 +10,9 @@
+@@ -9,7 +9,9 @@
+ #include <string.h>
@@ -33 +34,0 @@
- #include <eal_export.h>
@@ -40 +41 @@
-@@ -26,7 +28,8 @@ static void
+@@ -24,7 +26,8 @@ static void
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'tailq: fix lookup macro' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (2 preceding siblings ...)
2025-10-27 16:18 ` patch 'cmdline: fix highest bit " luca.boccassi
@ 2025-10-27 16:18 ` luca.boccassi
2025-10-27 16:18 ` patch 'hash: fix unaligned access in predictable RSS' " luca.boccassi
` (73 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:18 UTC (permalink / raw)
To: David Marchand; +Cc: Chengwen Feng, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/315102b82aae7bb6dc5bbf31f129d073994e30d3
Thanks.
Luca Boccassi
---
From 315102b82aae7bb6dc5bbf31f129d073994e30d3 Mon Sep 17 00:00:00 2001
From: David Marchand <david.marchand@redhat.com>
Date: Mon, 3 Feb 2025 17:09:54 +0100
Subject: [PATCH] tailq: fix lookup macro
[ upstream commit 5d2d4033abe5bb17f6e328fad1a615553573abd5 ]
Doing arithmetic with the NULL pointer is undefined.
Caught by UBSan:
../app/test/test_tailq.c:111:9: runtime error:
member access within null pointer of type 'struct rte_tailq_head'
Fixes: f6b4f6c9c123 ("tailq: use a single cast macro")
Signed-off-by: David Marchand <david.marchand@redhat.com>
Acked-by: Chengwen Feng <fengchengwen@huawei.com>
---
lib/eal/include/rte_tailq.h | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/lib/eal/include/rte_tailq.h b/lib/eal/include/rte_tailq.h
index 0f67f9e4db..e1d8d15c8d 100644
--- a/lib/eal/include/rte_tailq.h
+++ b/lib/eal/include/rte_tailq.h
@@ -70,11 +70,12 @@ struct rte_tailq_elem {
* @return
* The return value from rte_eal_tailq_lookup, typecast to the appropriate
* structure pointer type.
- * NULL on error, since the tailq_head is the first
- * element in the rte_tailq_head structure.
+ * NULL on error.
*/
-#define RTE_TAILQ_LOOKUP(name, struct_name) \
- RTE_TAILQ_CAST(rte_eal_tailq_lookup(name), struct_name)
+#define RTE_TAILQ_LOOKUP(name, struct_name) __extension__ ({ \
+ struct rte_tailq_head *head = rte_eal_tailq_lookup(name); \
+ head == NULL ? NULL : RTE_TAILQ_CAST(head, struct_name); \
+})
/**
* Dump tail queues to a file.
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:35.042830494 +0000
+++ 0005-tailq-fix-lookup-macro.patch 2025-10-27 15:54:34.719947643 +0000
@@ -1 +1 @@
-From 5d2d4033abe5bb17f6e328fad1a615553573abd5 Mon Sep 17 00:00:00 2001
+From 315102b82aae7bb6dc5bbf31f129d073994e30d3 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 5d2d4033abe5bb17f6e328fad1a615553573abd5 ]
+
@@ -14 +15,0 @@
-Cc: stable@dpdk.org
@@ -23 +24 @@
-index 89f7ef2134..e7caed6812 100644
+index 0f67f9e4db..e1d8d15c8d 100644
@@ -26 +27 @@
-@@ -69,11 +69,12 @@ struct rte_tailq_elem {
+@@ -70,11 +70,12 @@ struct rte_tailq_elem {
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'hash: fix unaligned access in predictable RSS' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (3 preceding siblings ...)
2025-10-27 16:18 ` patch 'tailq: fix lookup macro' " luca.boccassi
@ 2025-10-27 16:18 ` luca.boccassi
2025-10-27 16:18 ` patch 'graph: fix unaligned access in stats' " luca.boccassi
` (72 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:18 UTC (permalink / raw)
To: David Marchand
Cc: Bruce Richardson, Vladimir Medvedkin, Konstantin Ananyev,
Chengwen Feng, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/c9c2860199be5e07d4dade6e1229df0593208a57
Thanks.
Luca Boccassi
---
From c9c2860199be5e07d4dade6e1229df0593208a57 Mon Sep 17 00:00:00 2001
From: David Marchand <david.marchand@redhat.com>
Date: Wed, 18 Jun 2025 17:33:38 +0200
Subject: [PATCH] hash: fix unaligned access in predictable RSS
[ upstream commit b70d04d8ac6d47b221500d418df1de2b2c65b50a ]
Caught by UBSan:
../lib/hash/rte_thash.c:421:8: runtime error: load of misaligned address
0x0001816c2da3 for type 'uint32_t' (aka 'unsigned int'),
which requires 4 byte alignment
Fixes: 28ebff11c2dc ("hash: add predictable RSS")
Signed-off-by: David Marchand <david.marchand@redhat.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Vladimir Medvedkin <vladimir.medvedkin@intel.com>
Acked-by: Konstantin Ananyev <konstantin.ananyev@huawei.com>
Acked-by: Chengwen Feng <fengchengwen@huawei.com>
---
lib/hash/rte_thash.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/lib/hash/rte_thash.c b/lib/hash/rte_thash.c
index 363603c102..188cfca6c2 100644
--- a/lib/hash/rte_thash.c
+++ b/lib/hash/rte_thash.c
@@ -437,10 +437,10 @@ generate_subkey(struct rte_thash_ctx *ctx, struct thash_lfsr *lfsr,
static inline uint32_t
get_subvalue(struct rte_thash_ctx *ctx, uint32_t offset)
{
- uint32_t *tmp, val;
+ uint32_t tmp, val;
- tmp = (uint32_t *)(&ctx->hash_key[offset >> 3]);
- val = rte_be_to_cpu_32(*tmp);
+ tmp = *(unaligned_uint32_t *)&ctx->hash_key[offset >> 3];
+ val = rte_be_to_cpu_32(tmp);
val >>= (TOEPLITZ_HASH_LEN - ((offset & (CHAR_BIT - 1)) +
ctx->reta_sz_log));
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:35.075253233 +0000
+++ 0006-hash-fix-unaligned-access-in-predictable-RSS.patch 2025-10-27 15:54:34.719947643 +0000
@@ -1 +1 @@
-From b70d04d8ac6d47b221500d418df1de2b2c65b50a Mon Sep 17 00:00:00 2001
+From c9c2860199be5e07d4dade6e1229df0593208a57 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit b70d04d8ac6d47b221500d418df1de2b2c65b50a ]
+
@@ -13 +14,0 @@
-Cc: stable@dpdk.org
@@ -25 +26 @@
-index 6c662bf14f..0f9ed20d0d 100644
+index 363603c102..188cfca6c2 100644
@@ -28 +29 @@
-@@ -415,10 +415,10 @@ generate_subkey(struct rte_thash_ctx *ctx, struct thash_lfsr *lfsr,
+@@ -437,10 +437,10 @@ generate_subkey(struct rte_thash_ctx *ctx, struct thash_lfsr *lfsr,
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'graph: fix unaligned access in stats' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (4 preceding siblings ...)
2025-10-27 16:18 ` patch 'hash: fix unaligned access in predictable RSS' " luca.boccassi
@ 2025-10-27 16:18 ` luca.boccassi
2025-10-27 16:18 ` patch 'eventdev: fix listing timer adapters with telemetry' " luca.boccassi
` (71 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:18 UTC (permalink / raw)
To: David Marchand; +Cc: Kiran Kumar K, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/f4c9a3f5434a2ff68bbd783b41eaf402a416b22f
Thanks.
Luca Boccassi
---
From f4c9a3f5434a2ff68bbd783b41eaf402a416b22f Mon Sep 17 00:00:00 2001
From: David Marchand <david.marchand@redhat.com>
Date: Fri, 4 Jul 2025 11:15:03 +0200
Subject: [PATCH] graph: fix unaligned access in stats
[ upstream commit 826af93a68f358f8eb4f363e42d114b93fde0d69 ]
UBSan reports:
../lib/graph/graph_stats.c:208:13: runtime error:
member access within misaligned address 0x000054742c50
for type 'struct rte_graph_cluster_stats',
which requires 64 byte alignment
../lib/graph/graph_stats.c:257:12: runtime error:
member access within misaligned address 0x00002219fd30
for type 'struct rte_graph_cluster_stats',
which requires 64 byte alignment
The current code goes into various complex (non aligned) reallocations /
memset / memcpy.
Simplify this by computing how many nodes are present in the
cluster of graphes.
Then directly call rte_malloc for the whole stats object.
As a bonus, this change also fixes leaks:
- if any error occurred before call to rte_malloc, since the xstats
objects stored in the glibc allocated stats object were not freed,
- if an allocation failure occurs, with constructs using
ptr = realloc(ptr, sz), since the original ptr is lost,
Fixes: af1ae8b6a32c ("graph: implement stats")
Signed-off-by: David Marchand <david.marchand@redhat.com>
Acked-by: Kiran Kumar K <kirankumark@marvell.com>
---
lib/graph/graph_stats.c | 96 +++++++++++++++++++++++------------------
1 file changed, 55 insertions(+), 41 deletions(-)
diff --git a/lib/graph/graph_stats.c b/lib/graph/graph_stats.c
index c0140ba922..da2cff7a36 100644
--- a/lib/graph/graph_stats.c
+++ b/lib/graph/graph_stats.c
@@ -35,7 +35,6 @@ struct rte_graph_cluster_stats {
rte_node_t max_nodes;
int socket_id;
void *cookie;
- size_t sz;
struct cluster_node clusters[];
} __rte_cache_aligned;
@@ -99,15 +98,55 @@ graph_cluster_stats_cb(bool is_first, bool is_last, void *cookie,
return 0;
};
+static uint32_t
+cluster_count_nodes(const struct cluster *cluster)
+{
+ rte_node_t *nodes = NULL;
+ uint32_t max_nodes = 0;
+
+ for (unsigned int i = 0; i < cluster->nb_graphs; i++) {
+ struct graph_node *graph_node;
+
+ STAILQ_FOREACH(graph_node, &cluster->graphs[i]->node_list, next) {
+ rte_node_t *new_nodes;
+ unsigned int n;
+
+ for (n = 0; n < max_nodes; n++) {
+ if (nodes[n] != graph_node->node->id)
+ continue;
+ break;
+ }
+ if (n != max_nodes)
+ continue;
+
+ max_nodes++;
+ new_nodes = realloc(nodes, max_nodes * sizeof(nodes[0]));
+ if (new_nodes == NULL) {
+ free(nodes);
+ return 0;
+ }
+ nodes = new_nodes;
+ nodes[n] = graph_node->node->id;
+ }
+ }
+ free(nodes);
+
+ return max_nodes;
+}
+
static struct rte_graph_cluster_stats *
stats_mem_init(struct cluster *cluster,
const struct rte_graph_cluster_stats_param *prm)
{
- size_t sz = sizeof(struct rte_graph_cluster_stats);
struct rte_graph_cluster_stats *stats;
rte_graph_cluster_stats_cb_t fn;
int socket_id = prm->socket_id;
uint32_t cluster_node_size;
+ uint32_t max_nodes;
+
+ max_nodes = cluster_count_nodes(cluster);
+ if (max_nodes == 0)
+ return NULL;
/* Fix up callback */
fn = prm->fn;
@@ -119,25 +158,23 @@ stats_mem_init(struct cluster *cluster,
cluster_node_size += cluster->nb_graphs * sizeof(struct rte_node *);
cluster_node_size = RTE_ALIGN(cluster_node_size, RTE_CACHE_LINE_SIZE);
- stats = realloc(NULL, sz);
+ stats = rte_zmalloc_socket(NULL, sizeof(struct rte_graph_cluster_stats) +
+ max_nodes * cluster_node_size, 0, socket_id);
if (stats) {
- memset(stats, 0, sz);
stats->fn = fn;
stats->cluster_node_size = cluster_node_size;
stats->max_nodes = 0;
stats->socket_id = socket_id;
stats->cookie = prm->cookie;
- stats->sz = sz;
}
return stats;
}
static int
-stats_mem_populate(struct rte_graph_cluster_stats **stats_in,
+stats_mem_populate(struct rte_graph_cluster_stats *stats,
struct rte_graph *graph, struct graph_node *graph_node)
{
- struct rte_graph_cluster_stats *stats = *stats_in;
rte_node_t id = graph_node->node->id;
struct cluster_node *cluster;
struct rte_node *node;
@@ -162,41 +199,22 @@ stats_mem_populate(struct rte_graph_cluster_stats **stats_in,
cluster = RTE_PTR_ADD(cluster, stats->cluster_node_size);
}
- /* Hey, it is a new node, allocate space for it in the reel */
- stats = realloc(stats, stats->sz + stats->cluster_node_size);
- if (stats == NULL)
- SET_ERR_JMP(ENOMEM, err, "Realloc failed");
- *stats_in = NULL;
-
- /* Clear the new struct cluster_node area */
- cluster = RTE_PTR_ADD(stats, stats->sz),
- memset(cluster, 0, stats->cluster_node_size);
memcpy(cluster->stat.name, graph_node->node->name, RTE_NODE_NAMESIZE);
cluster->stat.id = graph_node->node->id;
cluster->stat.hz = rte_get_timer_hz();
node = graph_node_id_to_ptr(graph, id);
if (node == NULL)
- SET_ERR_JMP(ENOENT, free, "Failed to find node %s in graph %s",
+ SET_ERR_JMP(ENOENT, err, "Failed to find node %s in graph %s",
graph_node->node->name, graph->name);
cluster->nodes[cluster->nb_nodes++] = node;
- stats->sz += stats->cluster_node_size;
stats->max_nodes++;
- *stats_in = stats;
return 0;
-free:
- free(stats);
err:
return -rte_errno;
}
-static void
-stats_mem_fini(struct rte_graph_cluster_stats *stats)
-{
- free(stats);
-}
-
static void
cluster_init(struct cluster *cluster)
{
@@ -265,10 +283,7 @@ struct rte_graph_cluster_stats *
rte_graph_cluster_stats_create(const struct rte_graph_cluster_stats_param *prm)
{
struct rte_graph_cluster_stats *stats, *rc = NULL;
- struct graph_node *graph_node;
struct cluster cluster;
- struct graph *graph;
- const char *pattern;
rte_graph_t i;
/* Sanity checks */
@@ -286,35 +301,34 @@ rte_graph_cluster_stats_create(const struct rte_graph_cluster_stats_param *prm)
graph_spinlock_lock();
/* Expand graph pattern and add the graph to the cluster */
for (i = 0; i < prm->nb_graph_patterns; i++) {
- pattern = prm->graph_patterns[i];
- if (expand_pattern_to_cluster(&cluster, pattern))
+ if (expand_pattern_to_cluster(&cluster, prm->graph_patterns[i]))
goto bad_pattern;
}
/* Alloc the stats memory */
stats = stats_mem_init(&cluster, prm);
if (stats == NULL)
- SET_ERR_JMP(ENOMEM, bad_pattern, "Failed alloc stats memory");
+ SET_ERR_JMP(ENOMEM, bad_pattern, "Failed rte_malloc for stats memory");
/* Iterate over M(Graph) x N (Nodes in graph) */
for (i = 0; i < cluster.nb_graphs; i++) {
+ struct graph_node *graph_node;
+ struct graph *graph;
+
graph = cluster.graphs[i];
STAILQ_FOREACH(graph_node, &graph->node_list, next) {
struct rte_graph *graph_fp = graph->graph;
- if (stats_mem_populate(&stats, graph_fp, graph_node))
+ if (stats_mem_populate(stats, graph_fp, graph_node))
goto realloc_fail;
}
}
- /* Finally copy to hugepage memory to avoid pressure on rte_realloc */
- rc = rte_malloc_socket(NULL, stats->sz, 0, stats->socket_id);
- if (rc)
- rte_memcpy(rc, stats, stats->sz);
- else
- SET_ERR_JMP(ENOMEM, realloc_fail, "rte_malloc failed");
+ rc = stats;
+ stats = NULL;
realloc_fail:
- stats_mem_fini(stats);
+ if (stats != NULL)
+ rte_graph_cluster_stats_destroy(stats);
bad_pattern:
graph_spinlock_unlock();
cluster_fini(&cluster);
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:35.116080658 +0000
+++ 0007-graph-fix-unaligned-access-in-stats.patch 2025-10-27 15:54:34.719947643 +0000
@@ -1 +1 @@
-From 826af93a68f358f8eb4f363e42d114b93fde0d69 Mon Sep 17 00:00:00 2001
+From f4c9a3f5434a2ff68bbd783b41eaf402a416b22f Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 826af93a68f358f8eb4f363e42d114b93fde0d69 ]
+
@@ -32 +33,0 @@
-Cc: stable@dpdk.org
@@ -37,2 +38,2 @@
- lib/graph/graph_stats.c | 102 +++++++++++++++++++++++-----------------
- 1 file changed, 58 insertions(+), 44 deletions(-)
+ lib/graph/graph_stats.c | 96 +++++++++++++++++++++++------------------
+ 1 file changed, 55 insertions(+), 41 deletions(-)
@@ -41 +42 @@
-index 583ad8dbd5..e0fc8fd25c 100644
+index c0140ba922..da2cff7a36 100644
@@ -44 +45,2 @@
-@@ -37,7 +37,6 @@ struct __rte_cache_aligned rte_graph_cluster_stats {
+@@ -35,7 +35,6 @@ struct rte_graph_cluster_stats {
+ rte_node_t max_nodes;
@@ -46 +47,0 @@
- bool dispatch;
@@ -51,3 +52,3 @@
- };
-@@ -178,15 +177,55 @@ graph_cluster_stats_cb_dispatch(bool is_first, bool is_last, void *cookie,
- return graph_cluster_stats_cb(true, is_first, is_last, cookie, stat);
+ } __rte_cache_aligned;
+@@ -99,15 +98,55 @@ graph_cluster_stats_cb(bool is_first, bool is_last, void *cookie,
+ return 0;
@@ -109 +110 @@
-@@ -203,25 +242,23 @@ stats_mem_init(struct cluster *cluster,
+@@ -119,25 +158,23 @@ stats_mem_init(struct cluster *cluster,
@@ -138 +139 @@
-@@ -247,21 +284,12 @@ stats_mem_populate(struct rte_graph_cluster_stats **stats_in,
+@@ -162,41 +199,22 @@ stats_mem_populate(struct rte_graph_cluster_stats **stats_in,
@@ -160,30 +160,0 @@
- if (graph_node->node->xstats) {
-@@ -270,7 +298,7 @@ stats_mem_populate(struct rte_graph_cluster_stats **stats_in,
- sizeof(uint64_t) * graph_node->node->xstats->nb_xstats,
- RTE_CACHE_LINE_SIZE, stats->socket_id);
- if (cluster->stat.xstat_count == NULL)
-- SET_ERR_JMP(ENOMEM, free, "Failed to allocate memory node %s graph %s",
-+ SET_ERR_JMP(ENOMEM, err, "Failed to allocate memory node %s graph %s",
- graph_node->node->name, graph->name);
-
- cluster->stat.xstat_desc = rte_zmalloc_socket(NULL,
-@@ -278,7 +306,7 @@ stats_mem_populate(struct rte_graph_cluster_stats **stats_in,
- RTE_CACHE_LINE_SIZE, stats->socket_id);
- if (cluster->stat.xstat_desc == NULL) {
- rte_free(cluster->stat.xstat_count);
-- SET_ERR_JMP(ENOMEM, free, "Failed to allocate memory node %s graph %s",
-+ SET_ERR_JMP(ENOMEM, err, "Failed to allocate memory node %s graph %s",
- graph_node->node->name, graph->name);
- }
-
-@@ -288,30 +316,20 @@ stats_mem_populate(struct rte_graph_cluster_stats **stats_in,
- RTE_NODE_XSTAT_DESC_SIZE) < 0) {
- rte_free(cluster->stat.xstat_count);
- rte_free(cluster->stat.xstat_desc);
-- SET_ERR_JMP(E2BIG, free,
-+ SET_ERR_JMP(E2BIG, err,
- "Error description overflow node %s graph %s",
- graph_node->node->name, graph->name);
- }
- }
- }
@@ -211 +182 @@
-@@ -381,10 +399,7 @@ struct rte_graph_cluster_stats *
+@@ -265,10 +283,7 @@ struct rte_graph_cluster_stats *
@@ -222 +193 @@
-@@ -402,37 +417,36 @@ rte_graph_cluster_stats_create(const struct rte_graph_cluster_stats_param *prm)
+@@ -286,35 +301,34 @@ rte_graph_cluster_stats_create(const struct rte_graph_cluster_stats_param *prm)
@@ -250,2 +220,0 @@
- if (graph->graph->model == RTE_GRAPH_MODEL_MCORE_DISPATCH)
- stats->dispatch = true;
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'eventdev: fix listing timer adapters with telemetry' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (5 preceding siblings ...)
2025-10-27 16:18 ` patch 'graph: fix unaligned access in stats' " luca.boccassi
@ 2025-10-27 16:18 ` luca.boccassi
2025-10-27 16:18 ` patch 'cfgfile: fix section count with no name' " luca.boccassi
` (70 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:18 UTC (permalink / raw)
To: David Marchand; +Cc: Chengwen Feng, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/9ce4cdfd42be9d762d88fc760a5525861ae68970
Thanks.
Luca Boccassi
---
From 9ce4cdfd42be9d762d88fc760a5525861ae68970 Mon Sep 17 00:00:00 2001
From: David Marchand <david.marchand@redhat.com>
Date: Fri, 4 Jul 2025 14:58:25 +0200
Subject: [PATCH] eventdev: fix listing timer adapters with telemetry
[ upstream commit 94b2ff7ee1976f80dd4822dab090bbbf693d12ca ]
If no timer adapter is created, listing with telemetry can lead to crash
and is reported by UBSan as an undefined behavior:
../lib/eventdev/rte_event_timer_adapter.c:1418:13:
runtime error: applying zero offset to null pointer
../lib/eventdev/rte_event_timer_adapter.c:1464:13:
runtime error: applying zero offset to null pointer
Fixes: 791dfec24d00 ("eventdev/timer: add telemetry")
Signed-off-by: David Marchand <david.marchand@redhat.com>
Acked-by: Chengwen Feng <fengchengwen@huawei.com>
---
lib/eventdev/rte_event_timer_adapter.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/lib/eventdev/rte_event_timer_adapter.c b/lib/eventdev/rte_event_timer_adapter.c
index 34968f3105..c248d7c8d0 100644
--- a/lib/eventdev/rte_event_timer_adapter.c
+++ b/lib/eventdev/rte_event_timer_adapter.c
@@ -1324,7 +1324,7 @@ handle_ta_info(const char *cmd __rte_unused, const char *params,
adapter_id = atoi(params);
- if (adapter_id >= RTE_EVENT_TIMER_ADAPTER_NUM_MAX) {
+ if (adapters == NULL || adapter_id >= RTE_EVENT_TIMER_ADAPTER_NUM_MAX) {
EVTIM_LOG_ERR("Invalid timer adapter id %u", adapter_id);
return -EINVAL;
}
@@ -1365,7 +1365,7 @@ handle_ta_stats(const char *cmd __rte_unused, const char *params,
adapter_id = atoi(params);
- if (adapter_id >= RTE_EVENT_TIMER_ADAPTER_NUM_MAX) {
+ if (adapters == NULL || adapter_id >= RTE_EVENT_TIMER_ADAPTER_NUM_MAX) {
EVTIM_LOG_ERR("Invalid timer adapter id %u", adapter_id);
return -EINVAL;
}
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:35.149899760 +0000
+++ 0008-eventdev-fix-listing-timer-adapters-with-telemetry.patch 2025-10-27 15:54:34.719947643 +0000
@@ -1 +1 @@
-From 94b2ff7ee1976f80dd4822dab090bbbf693d12ca Mon Sep 17 00:00:00 2001
+From 9ce4cdfd42be9d762d88fc760a5525861ae68970 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 94b2ff7ee1976f80dd4822dab090bbbf693d12ca ]
+
@@ -16 +17,0 @@
-Cc: stable@dpdk.org
@@ -25 +26 @@
-index 06ce478d90..af98b1d9f6 100644
+index 34968f3105..c248d7c8d0 100644
@@ -28 +29 @@
-@@ -1410,7 +1410,7 @@ handle_ta_info(const char *cmd __rte_unused, const char *params,
+@@ -1324,7 +1324,7 @@ handle_ta_info(const char *cmd __rte_unused, const char *params,
@@ -37 +38 @@
-@@ -1456,7 +1456,7 @@ handle_ta_stats(const char *cmd __rte_unused, const char *params,
+@@ -1365,7 +1365,7 @@ handle_ta_stats(const char *cmd __rte_unused, const char *params,
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'cfgfile: fix section count with no name' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (6 preceding siblings ...)
2025-10-27 16:18 ` patch 'eventdev: fix listing timer adapters with telemetry' " luca.boccassi
@ 2025-10-27 16:18 ` luca.boccassi
2025-10-27 16:18 ` patch 'net/vmxnet3: fix mapping of mempools to queues' " luca.boccassi
` (69 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:18 UTC (permalink / raw)
To: David Marchand
Cc: Bruce Richardson, Cristian Dumitrescu, Chengwen Feng, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/1fe0c716154309029fa3a5d4fc550e159edaee35
Thanks.
Luca Boccassi
---
From 1fe0c716154309029fa3a5d4fc550e159edaee35 Mon Sep 17 00:00:00 2001
From: David Marchand <david.marchand@redhat.com>
Date: Mon, 3 Feb 2025 13:33:19 +0100
Subject: [PATCH] cfgfile: fix section count with no name
[ upstream commit 02bce2f1e938b409bb6f85391510a2a33ecc1443 ]
Passing a NULL to strncmp is incorrect.
+ ------------------------------------------------------- +
+ Test Suite : Test Cfgfile Unit Test Suite
+ ------------------------------------------------------- +
../lib/cfgfile/rte_cfgfile.c:475:7: runtime error: null pointer passed as
argument 2, which is declared to never be null
On the other hand, it seems the intent was to count all sections, so
skip the whole loop and section name comparisons.
Fixes: c54e7234bc9e ("test/cfgfile: add basic unit tests")
Signed-off-by: David Marchand <david.marchand@redhat.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Cristian Dumitrescu <cristian.dumitrescu@intel.com>
Acked-by: Chengwen Feng <fengchengwen@huawei.com>
---
lib/cfgfile/rte_cfgfile.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/lib/cfgfile/rte_cfgfile.c b/lib/cfgfile/rte_cfgfile.c
index e2f77d2b64..b3701eeeb4 100644
--- a/lib/cfgfile/rte_cfgfile.c
+++ b/lib/cfgfile/rte_cfgfile.c
@@ -465,10 +465,14 @@ int rte_cfgfile_close(struct rte_cfgfile *cfg)
int
rte_cfgfile_num_sections(struct rte_cfgfile *cfg, const char *sectionname,
-size_t length)
+ size_t length)
{
- int i;
int num_sections = 0;
+ int i;
+
+ if (sectionname == NULL)
+ return cfg->num_sections;
+
for (i = 0; i < cfg->num_sections; i++) {
if (strncmp(cfg->sections[i].name, sectionname, length) == 0)
num_sections++;
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:35.181996801 +0000
+++ 0009-cfgfile-fix-section-count-with-no-name.patch 2025-10-27 15:54:34.719947643 +0000
@@ -1 +1 @@
-From 02bce2f1e938b409bb6f85391510a2a33ecc1443 Mon Sep 17 00:00:00 2001
+From 1fe0c716154309029fa3a5d4fc550e159edaee35 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 02bce2f1e938b409bb6f85391510a2a33ecc1443 ]
+
@@ -28 +30 @@
-index 8bbdcf146e..9723ec756f 100644
+index e2f77d2b64..b3701eeeb4 100644
@@ -31,2 +33,2 @@
-@@ -477,10 +477,14 @@ int rte_cfgfile_close(struct rte_cfgfile *cfg)
- RTE_EXPORT_SYMBOL(rte_cfgfile_num_sections)
+@@ -465,10 +465,14 @@ int rte_cfgfile_close(struct rte_cfgfile *cfg)
+
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/vmxnet3: fix mapping of mempools to queues' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (7 preceding siblings ...)
2025-10-27 16:18 ` patch 'cfgfile: fix section count with no name' " luca.boccassi
@ 2025-10-27 16:18 ` luca.boccassi
2025-10-27 16:18 ` patch 'app/testpmd: increase size of set cores list command' " luca.boccassi
` (68 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:18 UTC (permalink / raw)
To: Ronak Doshi; +Cc: Jochen Behrens, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/38e40353dda82698162d1acf959c57bb0ac60f1c
Thanks.
Luca Boccassi
---
From 38e40353dda82698162d1acf959c57bb0ac60f1c Mon Sep 17 00:00:00 2001
From: Ronak Doshi <ronak.doshi@broadcom.com>
Date: Wed, 9 Jul 2025 21:29:03 +0000
Subject: [PATCH] net/vmxnet3: fix mapping of mempools to queues
[ upstream commit 387b6e0cca4ebbb1d2f8c03da5b9d4051dfef913 ]
Index bitmask variable used was uint8_t, too small for bitmask with
9 or more queues. This patch changes it to uint16_t for now, to be
same as in the Vmxnet3_MemoryRegion structure. This way txQueues
can be lesser than rxQueues and have correct mapping of memory regions.
Also, the patch fixes memory region check as 16 queues are allowed on
both RX and TX.
Fixes: 6a113992060e ("net/vmxnet3: add cmd to register memory region")
Signed-off-by: Ronak Doshi <ronak.doshi@broadcom.com>
Acked-by: Jochen Behrens <jochen.behrens@broadcom.com>
---
drivers/net/vmxnet3/base/vmxnet3_defs.h | 3 +++
drivers/net/vmxnet3/vmxnet3_ethdev.c | 23 ++++++++++++++---------
2 files changed, 17 insertions(+), 9 deletions(-)
diff --git a/drivers/net/vmxnet3/base/vmxnet3_defs.h b/drivers/net/vmxnet3/base/vmxnet3_defs.h
index bd6695e69d..04167b6743 100644
--- a/drivers/net/vmxnet3/base/vmxnet3_defs.h
+++ b/drivers/net/vmxnet3/base/vmxnet3_defs.h
@@ -575,6 +575,9 @@ enum vmxnet3_intr_type {
/* addition 1 for events */
#define VMXNET3_MAX_INTRS 25
+/* Max number of queues that can request memreg, for both RX and TX. */
+#define VMXNET3_MAX_MEMREG_QUEUES 16
+
/* Version 6 and later will use below macros */
#define VMXNET3_EXT_MAX_TX_QUEUES 32
#define VMXNET3_EXT_MAX_RX_QUEUES 32
diff --git a/drivers/net/vmxnet3/vmxnet3_ethdev.c b/drivers/net/vmxnet3/vmxnet3_ethdev.c
index f4cdb1bb31..eadfd6f230 100644
--- a/drivers/net/vmxnet3/vmxnet3_ethdev.c
+++ b/drivers/net/vmxnet3/vmxnet3_ethdev.c
@@ -725,14 +725,15 @@ vmxnet3_dev_setup_memreg(struct rte_eth_dev *dev)
Vmxnet3_DriverShared *shared = hw->shared;
Vmxnet3_CmdInfo *cmdInfo;
struct rte_mempool *mp[VMXNET3_MAX_RX_QUEUES];
- uint8_t index[VMXNET3_MAX_RX_QUEUES + VMXNET3_MAX_TX_QUEUES];
- uint32_t num, i, j, size;
+ uint16_t index[VMXNET3_MAX_MEMREG_QUEUES];
+ uint16_t tx_index_mask;
+ uint32_t num, tx_num, i, j, size;
if (hw->memRegsPA == 0) {
const struct rte_memzone *mz;
size = sizeof(Vmxnet3_MemRegs) +
- (VMXNET3_MAX_RX_QUEUES + VMXNET3_MAX_TX_QUEUES) *
+ (2 * VMXNET3_MAX_MEMREG_QUEUES) *
sizeof(Vmxnet3_MemoryRegion);
mz = gpa_zone_reserve(dev, size, "memRegs", rte_socket_id(), 8,
@@ -746,7 +747,9 @@ vmxnet3_dev_setup_memreg(struct rte_eth_dev *dev)
hw->memRegsPA = mz->iova;
}
- num = hw->num_rx_queues;
+ num = RTE_MIN(hw->num_rx_queues, VMXNET3_MAX_MEMREG_QUEUES);
+ tx_num = RTE_MIN(hw->num_tx_queues, VMXNET3_MAX_MEMREG_QUEUES);
+ tx_index_mask = (uint16_t)((1UL << tx_num) - 1);
for (i = 0; i < num; i++) {
vmxnet3_rx_queue_t *rxq = dev->data->rx_queues[i];
@@ -781,13 +784,15 @@ vmxnet3_dev_setup_memreg(struct rte_eth_dev *dev)
(uintptr_t)STAILQ_FIRST(&mp[i]->mem_list)->iova;
mr->length = STAILQ_FIRST(&mp[i]->mem_list)->len <= INT32_MAX ?
STAILQ_FIRST(&mp[i]->mem_list)->len : INT32_MAX;
- mr->txQueueBits = index[i];
mr->rxQueueBits = index[i];
+ /* tx uses same pool, but there may be fewer tx queues */
+ mr->txQueueBits = index[i] & tx_index_mask;
PMD_INIT_LOG(INFO,
"index: %u startPA: %" PRIu64 " length: %u, "
- "rxBits: %x",
- j, mr->startPA, mr->length, mr->rxQueueBits);
+ "rxBits: %x, txBits: %x",
+ j, mr->startPA, mr->length,
+ mr->rxQueueBits, mr->txQueueBits);
j++;
}
hw->memRegs->numRegs = j;
@@ -995,8 +1000,8 @@ vmxnet3_dev_start(struct rte_eth_dev *dev)
}
/* Check memregs restrictions first */
- if (dev->data->nb_rx_queues <= VMXNET3_MAX_RX_QUEUES &&
- dev->data->nb_tx_queues <= VMXNET3_MAX_TX_QUEUES) {
+ if (dev->data->nb_rx_queues <= VMXNET3_MAX_MEMREG_QUEUES &&
+ dev->data->nb_tx_queues <= VMXNET3_MAX_MEMREG_QUEUES) {
ret = vmxnet3_dev_setup_memreg(dev);
if (ret == 0) {
VMXNET3_WRITE_BAR1_REG(hw, VMXNET3_REG_CMD,
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:35.214323919 +0000
+++ 0010-net-vmxnet3-fix-mapping-of-mempools-to-queues.patch 2025-10-27 15:54:34.723947744 +0000
@@ -1 +1 @@
-From 387b6e0cca4ebbb1d2f8c03da5b9d4051dfef913 Mon Sep 17 00:00:00 2001
+From 38e40353dda82698162d1acf959c57bb0ac60f1c Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 387b6e0cca4ebbb1d2f8c03da5b9d4051dfef913 ]
+
@@ -15 +16,0 @@
-Cc: stable@dpdk.org
@@ -25 +26 @@
-index a6bb281d8d..15d4d88c5c 100644
+index bd6695e69d..04167b6743 100644
@@ -28 +29 @@
-@@ -598,6 +598,9 @@ enum vmxnet3_intr_type {
+@@ -575,6 +575,9 @@ enum vmxnet3_intr_type {
@@ -39 +40 @@
-index 15ca25b187..e19aa43888 100644
+index f4cdb1bb31..eadfd6f230 100644
@@ -42 +43 @@
-@@ -801,14 +801,15 @@ vmxnet3_dev_setup_memreg(struct rte_eth_dev *dev)
+@@ -725,14 +725,15 @@ vmxnet3_dev_setup_memreg(struct rte_eth_dev *dev)
@@ -61 +62 @@
-@@ -822,7 +823,9 @@ vmxnet3_dev_setup_memreg(struct rte_eth_dev *dev)
+@@ -746,7 +747,9 @@ vmxnet3_dev_setup_memreg(struct rte_eth_dev *dev)
@@ -72 +73 @@
-@@ -857,13 +860,15 @@ vmxnet3_dev_setup_memreg(struct rte_eth_dev *dev)
+@@ -781,13 +784,15 @@ vmxnet3_dev_setup_memreg(struct rte_eth_dev *dev)
@@ -91 +92 @@
-@@ -1087,8 +1092,8 @@ vmxnet3_dev_start(struct rte_eth_dev *dev)
+@@ -995,8 +1000,8 @@ vmxnet3_dev_start(struct rte_eth_dev *dev)
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'app/testpmd: increase size of set cores list command' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (8 preceding siblings ...)
2025-10-27 16:18 ` patch 'net/vmxnet3: fix mapping of mempools to queues' " luca.boccassi
@ 2025-10-27 16:18 ` luca.boccassi
2025-10-27 16:18 ` patch 'net/dpaa2: fix shaper rate' " luca.boccassi
` (67 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:18 UTC (permalink / raw)
To: Dengdui Huang; +Cc: Chengwen Feng, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/51fe85245db78a68ace64aabe67450965c56e171
Thanks.
Luca Boccassi
---
From 51fe85245db78a68ace64aabe67450965c56e171 Mon Sep 17 00:00:00 2001
From: Dengdui Huang <huangdengdui@huawei.com>
Date: Tue, 8 Jul 2025 20:51:59 +0800
Subject: [PATCH] app/testpmd: increase size of set cores list command
[ upstream commit d0f4f0779898e41a940e9a6f83f782750ffbfbb7 ]
The cmdline_fixed_string_t has a length of only 128, which will
become insufficient when there are many cores, so it should be
replaced with a cmdline_multi_string_t of larger capacity.
Fixes: af75078fece3 ("first public release")
Signed-off-by: Dengdui Huang <huangdengdui@huawei.com>
Acked-by: Chengwen Feng <fengchengwen@huawei.com>
---
app/test-pmd/cmdline.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
index c4aab4defa..3d888a2f78 100644
--- a/app/test-pmd/cmdline.c
+++ b/app/test-pmd/cmdline.c
@@ -3491,7 +3491,7 @@ parse_item_list(const char *str, const char *item_name, unsigned int max_items,
value = 0;
nb_item = 0;
value_ok = 0;
- for (i = 0; i < strnlen(str, STR_TOKEN_SIZE); i++) {
+ for (i = 0; i < strnlen(str, STR_MULTI_TOKEN_SIZE); i++) {
c = str[i];
if ((c >= '0') && (c <= '9')) {
value = (unsigned int) (value * 10 + (c - '0'));
@@ -3542,7 +3542,7 @@ parse_item_list(const char *str, const char *item_name, unsigned int max_items,
struct cmd_set_list_result {
cmdline_fixed_string_t cmd_keyword;
cmdline_fixed_string_t list_name;
- cmdline_fixed_string_t list_of_items;
+ cmdline_multi_string_t list_of_items;
};
static void cmd_set_list_parsed(void *parsed_result,
@@ -3591,7 +3591,7 @@ static cmdline_parse_token_string_t cmd_set_list_name =
"corelist#portlist");
static cmdline_parse_token_string_t cmd_set_list_of_items =
TOKEN_STRING_INITIALIZER(struct cmd_set_list_result, list_of_items,
- NULL);
+ TOKEN_STRING_MULTI);
static cmdline_parse_inst_t cmd_set_fwd_list = {
.f = cmd_set_list_parsed,
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:35.249535185 +0000
+++ 0011-app-testpmd-increase-size-of-set-cores-list-command.patch 2025-10-27 15:54:34.731947944 +0000
@@ -1 +1 @@
-From d0f4f0779898e41a940e9a6f83f782750ffbfbb7 Mon Sep 17 00:00:00 2001
+From 51fe85245db78a68ace64aabe67450965c56e171 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit d0f4f0779898e41a940e9a6f83f782750ffbfbb7 ]
+
@@ -11 +12,0 @@
-Cc: stable@dpdk.org
@@ -20 +21 @@
-index 7b4e27eddf..801dee4456 100644
+index c4aab4defa..3d888a2f78 100644
@@ -23 +24 @@
-@@ -4063,7 +4063,7 @@ parse_item_list(const char *str, const char *item_name, unsigned int max_items,
+@@ -3491,7 +3491,7 @@ parse_item_list(const char *str, const char *item_name, unsigned int max_items,
@@ -32 +33 @@
-@@ -4114,7 +4114,7 @@ parse_item_list(const char *str, const char *item_name, unsigned int max_items,
+@@ -3542,7 +3542,7 @@ parse_item_list(const char *str, const char *item_name, unsigned int max_items,
@@ -41 +42 @@
-@@ -4163,7 +4163,7 @@ static cmdline_parse_token_string_t cmd_set_list_name =
+@@ -3591,7 +3591,7 @@ static cmdline_parse_token_string_t cmd_set_list_name =
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/dpaa2: fix shaper rate' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (9 preceding siblings ...)
2025-10-27 16:18 ` patch 'app/testpmd: increase size of set cores list command' " luca.boccassi
@ 2025-10-27 16:18 ` luca.boccassi
2025-10-27 16:18 ` patch 'app/testpmd: monitor state of primary process' " luca.boccassi
` (66 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:18 UTC (permalink / raw)
To: Gagandeep Singh; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/548ea3aa37583adf216897406d4c9e56c4c682d2
Thanks.
Luca Boccassi
---
From 548ea3aa37583adf216897406d4c9e56c4c682d2 Mon Sep 17 00:00:00 2001
From: Gagandeep Singh <g.singh@nxp.com>
Date: Wed, 2 Jul 2025 15:21:41 +0530
Subject: [PATCH] net/dpaa2: fix shaper rate
[ upstream commit 953b5576093dcd148b674bd2d53e5482970c1270 ]
This patch fixes the shaper rate by configuring the
user given rate in bytes. Earlier driver was considering
the user given rate value in bits.
Fixes: ac624068ee25 ("net/dpaa2: support traffic management")
Signed-off-by: Gagandeep Singh <g.singh@nxp.com>
---
drivers/net/dpaa2/dpaa2_tm.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/drivers/net/dpaa2/dpaa2_tm.c b/drivers/net/dpaa2/dpaa2_tm.c
index 0633259624..9b9cbe4259 100644
--- a/drivers/net/dpaa2/dpaa2_tm.c
+++ b/drivers/net/dpaa2/dpaa2_tm.c
@@ -1,5 +1,5 @@
/* SPDX-License-Identifier: BSD-3-Clause
- * Copyright 2020-2021 NXP
+ * Copyright 2020-2024 NXP
*/
#include <rte_ethdev.h>
@@ -726,12 +726,12 @@ dpaa2_hierarchy_commit(struct rte_eth_dev *dev, int clear_on_fail,
tx_cr_shaper.max_burst_size =
node->profile->params.committed.size;
tx_cr_shaper.rate_limit =
- node->profile->params.committed.rate /
- (1024 * 1024);
+ (node->profile->params.committed.rate /
+ (1024 * 1024)) * 8;
tx_er_shaper.max_burst_size =
node->profile->params.peak.size;
tx_er_shaper.rate_limit =
- node->profile->params.peak.rate / (1024 * 1024);
+ (node->profile->params.peak.rate / (1024 * 1024)) * 8;
/* root node */
if (node->parent == NULL) {
DPAA2_PMD_DEBUG("LNI S.rate = %u, burst =%u\n",
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:35.288904851 +0000
+++ 0012-net-dpaa2-fix-shaper-rate.patch 2025-10-27 15:54:34.731947944 +0000
@@ -1 +1 @@
-From 953b5576093dcd148b674bd2d53e5482970c1270 Mon Sep 17 00:00:00 2001
+From 548ea3aa37583adf216897406d4c9e56c4c682d2 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 953b5576093dcd148b674bd2d53e5482970c1270 ]
+
@@ -11 +12,0 @@
-Cc: stable@dpdk.org
@@ -19 +20 @@
-index f91392b092..dbf66c756e 100644
+index 0633259624..9b9cbe4259 100644
@@ -24 +25 @@
-- * Copyright 2020-2023 NXP
+- * Copyright 2020-2021 NXP
@@ -29 +30 @@
-@@ -733,12 +733,12 @@ dpaa2_hierarchy_commit(struct rte_eth_dev *dev, int clear_on_fail,
+@@ -726,12 +726,12 @@ dpaa2_hierarchy_commit(struct rte_eth_dev *dev, int clear_on_fail,
@@ -44 +45 @@
- DPAA2_PMD_DEBUG("LNI S.rate = %u, burst =%u",
+ DPAA2_PMD_DEBUG("LNI S.rate = %u, burst =%u\n",
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'app/testpmd: monitor state of primary process' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (10 preceding siblings ...)
2025-10-27 16:18 ` patch 'net/dpaa2: fix shaper rate' " luca.boccassi
@ 2025-10-27 16:18 ` luca.boccassi
2025-10-27 16:18 ` patch 'app/testpmd: fix conntrack action query' " luca.boccassi
` (65 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:18 UTC (permalink / raw)
To: Khadem Ullah; +Cc: Stephen Hemminger, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/7b609f1130635dd8e03954a0c4d9e265742d4ad4
Thanks.
Luca Boccassi
---
From 7b609f1130635dd8e03954a0c4d9e265742d4ad4 Mon Sep 17 00:00:00 2001
From: Khadem Ullah <14pwcse1224@uetpeshawar.edu.pk>
Date: Mon, 4 Aug 2025 07:33:22 -0400
Subject: [PATCH] app/testpmd: monitor state of primary process
[ upstream commit 7628f5bbb7e882e57c956d98731cac12a436c9a7 ]
In secondary processes, accessing device after primary has exited
will cause crash.
This patch adds a mechanism in testpmd to monitor the primary process
from the secondary process.
When primary process exits it forces secondary to exit avoiding
issues from cleanup logic.
Fixes: a550baf24af9 ("app/testpmd: support multi-process")
Signed-off-by: Khadem Ullah <14pwcse1224@uetpeshawar.edu.pk>
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
app/test-pmd/testpmd.c | 47 +++++++++++++++++++++++++++++++++++++++++-
1 file changed, 46 insertions(+), 1 deletion(-)
diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c
index 340c713c19..a293018341 100644
--- a/app/test-pmd/testpmd.c
+++ b/app/test-pmd/testpmd.c
@@ -101,12 +101,14 @@
uint16_t verbose_level = 0; /**< Silent by default. */
int testpmd_logtype; /**< Log type for testpmd logs */
+/* Maximum delay for exiting after primary process. */
+#define MONITOR_INTERVAL (500 * 1000)
+
/* use main core for command line ? */
uint8_t interactive = 0;
uint8_t auto_start = 0;
uint8_t tx_first;
char cmdline_filename[PATH_MAX] = {0};
-
/*
* NUMA support configuration.
* When set, the NUMA support attempts to dispatch the allocation of the
@@ -4431,6 +4433,38 @@ signal_handler(int signum __rte_unused)
prompt_exit();
}
+#ifndef RTE_EXEC_ENV_WINDOWS
+/* Alarm signal handler, used to check that primary process */
+static void
+monitor_primary(void *arg __rte_unused)
+{
+ if (rte_eal_primary_proc_alive(NULL)) {
+ rte_eal_alarm_set(MONITOR_INTERVAL, monitor_primary, NULL);
+ } else {
+ /*
+ * If primary process exits, then all the device information
+ * is no longer valid. Calling any cleanup code is going to
+ * run into use after free.
+ */
+ fprintf(stderr, "\nPrimary process is no longer active, exiting...\n");
+ exit(EXIT_FAILURE);
+ }
+}
+
+/* Setup handler to check when primary exits. */
+static int
+enable_primary_monitor(void)
+{
+ return rte_eal_alarm_set(MONITOR_INTERVAL, monitor_primary, NULL);
+}
+
+static void
+disable_primary_monitor(void)
+{
+ rte_eal_alarm_cancel(monitor_primary, NULL);
+}
+#endif
+
int
main(int argc, char** argv)
{
@@ -4462,6 +4496,12 @@ main(int argc, char** argv)
rte_exit(EXIT_FAILURE, "Cannot init EAL: %s\n",
rte_strerror(rte_errno));
+#ifndef RTE_EXEC_ENV_WINDOWS
+ if (rte_eal_process_type() == RTE_PROC_SECONDARY &&
+ enable_primary_monitor() < 0)
+ rte_exit(EXIT_FAILURE, "Cannot setup primary monitor");
+#endif
+
/* allocate port structures, and init them */
init_port();
@@ -4659,6 +4699,11 @@ main(int argc, char** argv)
}
}
+#ifndef RTE_EXEC_ENV_WINDOWS
+ if (rte_eal_process_type() == RTE_PROC_SECONDARY)
+ disable_primary_monitor();
+#endif
+
pmd_test_exit();
#ifdef RTE_LIB_PDUMP
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:35.320924375 +0000
+++ 0013-app-testpmd-monitor-state-of-primary-process.patch 2025-10-27 15:54:34.731947944 +0000
@@ -1 +1 @@
-From 7628f5bbb7e882e57c956d98731cac12a436c9a7 Mon Sep 17 00:00:00 2001
+From 7b609f1130635dd8e03954a0c4d9e265742d4ad4 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 7628f5bbb7e882e57c956d98731cac12a436c9a7 ]
+
@@ -15 +16,0 @@
-Cc: stable@dpdk.org
@@ -24 +25 @@
-index db52ed22f1..0f58a31eb5 100644
+index 340c713c19..a293018341 100644
@@ -27 +28 @@
-@@ -102,13 +102,15 @@
+@@ -101,12 +101,14 @@
@@ -39 +39,0 @@
- bool echo_cmdline_file;
@@ -44 +44 @@
-@@ -4363,6 +4365,38 @@ signal_handler(int signum __rte_unused)
+@@ -4431,6 +4433,38 @@ signal_handler(int signum __rte_unused)
@@ -83 +83 @@
-@@ -4394,6 +4428,12 @@ main(int argc, char** argv)
+@@ -4462,6 +4496,12 @@ main(int argc, char** argv)
@@ -96 +96 @@
-@@ -4587,6 +4627,11 @@ main(int argc, char** argv)
+@@ -4659,6 +4699,11 @@ main(int argc, char** argv)
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'app/testpmd: fix conntrack action query' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (11 preceding siblings ...)
2025-10-27 16:18 ` patch 'app/testpmd: monitor state of primary process' " luca.boccassi
@ 2025-10-27 16:18 ` luca.boccassi
2025-10-27 16:18 ` patch 'doc: add conntrack state inspect command to testpmd guide' " luca.boccassi
` (64 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:18 UTC (permalink / raw)
To: Dariusz Sosnowski; +Cc: Bing Zhao, Khadem Ullah, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/e75914bd0227e2afaef58e9b4bf81a4bd94160e4
Thanks.
Luca Boccassi
---
From e75914bd0227e2afaef58e9b4bf81a4bd94160e4 Mon Sep 17 00:00:00 2001
From: Dariusz Sosnowski <dsosnowski@nvidia.com>
Date: Tue, 12 Aug 2025 11:43:23 +0200
Subject: [PATCH] app/testpmd: fix conntrack action query
[ upstream commit d23bcfb1821cf134deb6e7ae171fcf0238a8bc98 ]
RTE_FLOW_ACTION_TYPE_CONNTRACK handling was missing in a switch case
which filtered action types which have action query support in testpmd.
This prevented the conntrack query to succeed.
Fixes: 4d07cbefe3ba ("app/testpmd: add commands for conntrack")
Signed-off-by: Dariusz Sosnowski <dsosnowski@nvidia.com>
Acked-by: Bing Zhao <bingz@nvidia.com>
Acked-by: Khadem Ullah <14pwcse1224@uetpeshawar.edu.pk>
---
app/test-pmd/config.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c
index 17c335e625..c76a8cb11c 100644
--- a/app/test-pmd/config.c
+++ b/app/test-pmd/config.c
@@ -2001,6 +2001,7 @@ port_action_handle_query(portid_t port_id, uint32_t id)
switch (pia->type) {
case RTE_FLOW_ACTION_TYPE_AGE:
case RTE_FLOW_ACTION_TYPE_COUNT:
+ case RTE_FLOW_ACTION_TYPE_CONNTRACK:
break;
default:
fprintf(stderr,
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:35.356930040 +0000
+++ 0014-app-testpmd-fix-conntrack-action-query.patch 2025-10-27 15:54:34.735948044 +0000
@@ -1 +1 @@
-From d23bcfb1821cf134deb6e7ae171fcf0238a8bc98 Mon Sep 17 00:00:00 2001
+From e75914bd0227e2afaef58e9b4bf81a4bd94160e4 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit d23bcfb1821cf134deb6e7ae171fcf0238a8bc98 ]
+
@@ -11 +12,0 @@
-Cc: stable@dpdk.org
@@ -21 +22 @@
-index 85f148a174..c1bd6921ea 100644
+index 17c335e625..c76a8cb11c 100644
@@ -24 +25,2 @@
-@@ -2171,6 +2171,7 @@ port_action_handle_query(portid_t port_id, uint32_t id)
+@@ -2001,6 +2001,7 @@ port_action_handle_query(portid_t port_id, uint32_t id)
+ switch (pia->type) {
@@ -27 +28,0 @@
- case RTE_FLOW_ACTION_TYPE_QUOTA:
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'doc: add conntrack state inspect command to testpmd guide' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (12 preceding siblings ...)
2025-10-27 16:18 ` patch 'app/testpmd: fix conntrack action query' " luca.boccassi
@ 2025-10-27 16:18 ` luca.boccassi
2025-10-27 16:18 ` patch 'app/testpmd: validate DSCP and VLAN for meter creation' " luca.boccassi
` (63 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:18 UTC (permalink / raw)
To: Khadem Ullah; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/108ad3de716210b83e4e2c5d38977ba57845e170
Thanks.
Luca Boccassi
---
From 108ad3de716210b83e4e2c5d38977ba57845e170 Mon Sep 17 00:00:00 2001
From: Khadem Ullah <14pwcse1224@uetpeshawar.edu.pk>
Date: Fri, 15 Aug 2025 07:15:14 -0400
Subject: [PATCH] doc: add conntrack state inspect command to testpmd guide
[ upstream commit 307b5b42b6258b8a8deecdf13cc334b3ceffe4a7 ]
Add command in testpmd user guide to inspect conntrack states.
The conntract possible CT states are:
SYN_RECV, ESTABLISHED, FIN_WAIT, CLOSE_WAIT, LAST_ACK and
TIME_WAIT.
Fixes: 4d07cbefe3ba0 ("app/testpmd: add commands for conntrack")
Signed-off-by: Khadem Ullah <14pwcse1224@uetpeshawar.edu.pk>
---
doc/guides/testpmd_app_ug/testpmd_funcs.rst | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
index 9ff0af1f0e..973e3eee56 100644
--- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst
+++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
@@ -5062,6 +5062,10 @@ rules like above for the peer port.
testpmd> flow indirect_action 0 update 0 action conntrack_update dir / end
+Inspect the conntrack action state through the following command::
+
+ testpmd> flow indirect_action 0 query <action ID>
+
Sample meter with policy rules
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:35.393197142 +0000
+++ 0015-doc-add-conntrack-state-inspect-command-to-testpmd-g.patch 2025-10-27 15:54:34.739948146 +0000
@@ -1 +1 @@
-From 307b5b42b6258b8a8deecdf13cc334b3ceffe4a7 Mon Sep 17 00:00:00 2001
+From 108ad3de716210b83e4e2c5d38977ba57845e170 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 307b5b42b6258b8a8deecdf13cc334b3ceffe4a7 ]
+
@@ -13 +14,0 @@
-Cc: stable@dpdk.org
@@ -21 +22 @@
-index ea0ab9bcab..fefcf5b419 100644
+index 9ff0af1f0e..973e3eee56 100644
@@ -24 +25 @@
-@@ -5392,6 +5392,10 @@ rules like above for the peer port.
+@@ -5062,6 +5062,10 @@ rules like above for the peer port.
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'app/testpmd: validate DSCP and VLAN for meter creation' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (13 preceding siblings ...)
2025-10-27 16:18 ` patch 'doc: add conntrack state inspect command to testpmd guide' " luca.boccassi
@ 2025-10-27 16:18 ` luca.boccassi
2025-10-27 16:18 ` patch 'net/mlx5: fix min and max MTU reporting' " luca.boccassi
` (62 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:18 UTC (permalink / raw)
To: Khadem Ullah; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/def7b6f7e5cabc671b488d6d410cda7f1c8d70ce
Thanks.
Luca Boccassi
---
From def7b6f7e5cabc671b488d6d410cda7f1c8d70ce Mon Sep 17 00:00:00 2001
From: Khadem Ullah <14pwcse1224@uetpeshawar.edu.pk>
Date: Thu, 28 Aug 2025 01:29:01 -0400
Subject: [PATCH] app/testpmd: validate DSCP and VLAN for meter creation
[ upstream commit 00092e969aad2fb2a2017b7eec86f033d4527950 ]
Add validation mechanism for meter creation. The maximum
possible entries are
[<dscp_tbl_entry0> <dscp_tbl_entry1> ...<dscp_tbl_entry63>]
[<vlan_tbl_entry0> <vlan_tbl_entry1> ... <vlan_tbl_entry15>].
Currently, testpmd allows any input table entries for DSCP
and VLAN tables.
This patch validates the maximum possible DSCP and VLAN table
entries for meter creation.
Fixes: 9f5488e326d3b ("app/testpmd: support different input color method")
Signed-off-by: Khadem Ullah <14pwcse1224@uetpeshawar.edu.pk>
---
app/test-pmd/cmdline_mtr.c | 30 +++++++++++++++++++++++++-----
1 file changed, 25 insertions(+), 5 deletions(-)
diff --git a/app/test-pmd/cmdline_mtr.c b/app/test-pmd/cmdline_mtr.c
index e16c5b268f..0c5897ada8 100644
--- a/app/test-pmd/cmdline_mtr.c
+++ b/app/test-pmd/cmdline_mtr.c
@@ -85,15 +85,35 @@ parse_uint(uint64_t *value, const char *str)
return 0;
}
+static int
+validate_input_color_table_entries(char *str)
+{
+ char *saveptr;
+ char *token = strtok_r(str, PARSE_DELIMITER, &saveptr);
+ for (int i = 0; token != NULL; i++) {
+ if (i > ((MAX_DSCP_TABLE_ENTRIES + MAX_VLAN_TABLE_ENTRIES) - 1))
+ return -1;
+ token = strtok_r(NULL, PARSE_DELIMITER, &saveptr);
+ }
+ return 0;
+}
+
static int
parse_input_color_table_entries(char *str, enum rte_color **dscp_table,
enum rte_color **vlan_table)
{
enum rte_color *vlan, *dscp;
- char *token;
+ char *token, *saveptr;
+ char *temp_str = strdup(str);
int i = 0;
- token = strtok_r(str, PARSE_DELIMITER, &str);
+ if (validate_input_color_table_entries(temp_str)) {
+ free(temp_str);
+ return -1;
+ }
+ free(temp_str);
+
+ token = strtok_r(str, PARSE_DELIMITER, &saveptr);
if (token == NULL)
return 0;
@@ -117,7 +137,7 @@ parse_input_color_table_entries(char *str, enum rte_color **dscp_table,
if (i == MAX_DSCP_TABLE_ENTRIES)
break;
- token = strtok_r(str, PARSE_DELIMITER, &str);
+ token = strtok_r(NULL, PARSE_DELIMITER, &saveptr);
if (token == NULL) {
free(dscp);
return -1;
@@ -126,7 +146,7 @@ parse_input_color_table_entries(char *str, enum rte_color **dscp_table,
*dscp_table = dscp;
- token = strtok_r(str, PARSE_DELIMITER, &str);
+ token = strtok_r(NULL, PARSE_DELIMITER, &saveptr);
if (token == NULL)
return 0;
@@ -154,7 +174,7 @@ parse_input_color_table_entries(char *str, enum rte_color **dscp_table,
if (i == MAX_VLAN_TABLE_ENTRIES)
break;
- token = strtok_r(str, PARSE_DELIMITER, &str);
+ token = strtok_r(NULL, PARSE_DELIMITER, &saveptr);
if (token == NULL) {
free(vlan);
free(*dscp_table);
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:35.428776298 +0000
+++ 0016-app-testpmd-validate-DSCP-and-VLAN-for-meter-creatio.patch 2025-10-27 15:54:34.739948146 +0000
@@ -1 +1 @@
-From 00092e969aad2fb2a2017b7eec86f033d4527950 Mon Sep 17 00:00:00 2001
+From def7b6f7e5cabc671b488d6d410cda7f1c8d70ce Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 00092e969aad2fb2a2017b7eec86f033d4527950 ]
+
@@ -17 +18,0 @@
-Cc: stable@dpdk.org
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/mlx5: fix min and max MTU reporting' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (14 preceding siblings ...)
2025-10-27 16:18 ` patch 'app/testpmd: validate DSCP and VLAN for meter creation' " luca.boccassi
@ 2025-10-27 16:18 ` luca.boccassi
2025-10-27 16:18 ` patch 'net/mlx5: fix unsupported flow rule port action' " luca.boccassi
` (61 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:18 UTC (permalink / raw)
To: Dariusz Sosnowski; +Cc: Viacheslav Ovsiienko, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/b1be3bbf46a8d9c6a422db5c9359904dafe9048f
Thanks.
Luca Boccassi
---
From b1be3bbf46a8d9c6a422db5c9359904dafe9048f Mon Sep 17 00:00:00 2001
From: Dariusz Sosnowski <dsosnowski@nvidia.com>
Date: Wed, 16 Jul 2025 12:25:45 +0200
Subject: [PATCH] net/mlx5: fix min and max MTU reporting
[ upstream commit 44d657109216a32e8718446f20f91272e10575dd ]
mlx5 PMD used hardcoded and incorrect values when reporting
maximum MTU and maximum Rx packet length through rte_eth_dev_info_get().
This patch adds support for querying OS for minimum and maximum
allowed MTU values. Maximum Rx packet length is then calculated
based on these values.
On Linux, these values are queried through netlink,
using IFLA_MIN_MTU and IFLA_MAX_MTU attributes added in Linux 4.18.
Windows API unfortunately does not expose minimum and maximum
allowed MTU values. In this case, fallback hardcoded values
(working on currently supported HW) will be used.
Bugzilla ID: 1719
Fixes: e60fbd5b24fc ("mlx5: add device configure/start/stop")
Signed-off-by: Dariusz Sosnowski <dsosnowski@nvidia.com>
Acked-by: Viacheslav Ovsiienko <viacheslavo@nvidia.com>
---
drivers/common/mlx5/linux/mlx5_nl.c | 108 ++++++++++++++++++++++
drivers/common/mlx5/linux/mlx5_nl.h | 3 +
drivers/common/mlx5/version.map | 1 +
drivers/net/mlx5/linux/mlx5_ethdev_os.c | 30 ++++++
drivers/net/mlx5/linux/mlx5_os.c | 2 +
drivers/net/mlx5/mlx5.h | 13 +++
drivers/net/mlx5/mlx5_ethdev.c | 42 ++++++++-
drivers/net/mlx5/windows/mlx5_ethdev_os.c | 28 ++++++
drivers/net/mlx5/windows/mlx5_os.c | 2 +
9 files changed, 228 insertions(+), 1 deletion(-)
diff --git a/drivers/common/mlx5/linux/mlx5_nl.c b/drivers/common/mlx5/linux/mlx5_nl.c
index 5d04857b38..4fa2410a81 100644
--- a/drivers/common/mlx5/linux/mlx5_nl.c
+++ b/drivers/common/mlx5/linux/mlx5_nl.c
@@ -1962,3 +1962,111 @@ mlx5_nl_read_events(int nlsk_fd, mlx5_nl_event_cb *cb, void *cb_arg)
}
return 0;
}
+
+struct mlx5_mtu {
+ uint32_t min_mtu;
+ bool min_mtu_set;
+ uint32_t max_mtu;
+ bool max_mtu_set;
+};
+
+static int
+mlx5_nl_get_mtu_bounds_cb(struct nlmsghdr *nh, void *arg)
+{
+ size_t off = NLMSG_LENGTH(sizeof(struct ifinfomsg));
+ struct mlx5_mtu *out = arg;
+
+ while (off < nh->nlmsg_len) {
+ struct rtattr *ra = RTE_PTR_ADD(nh, off);
+ uint32_t *payload;
+
+ switch (ra->rta_type) {
+ case IFLA_MIN_MTU:
+ payload = RTA_DATA(ra);
+ out->min_mtu = *payload;
+ out->min_mtu_set = true;
+ break;
+ case IFLA_MAX_MTU:
+ payload = RTA_DATA(ra);
+ out->max_mtu = *payload;
+ out->max_mtu_set = true;
+ break;
+ default:
+ /* Nothing to do for other attributes. */
+ break;
+ }
+ off += RTA_ALIGN(ra->rta_len);
+ }
+
+ return 0;
+}
+
+/**
+ * Query minimum and maximum allowed MTU values for given Linux network interface.
+ *
+ * This function queries the following interface attributes exposed in netlink since Linux 4.18:
+ *
+ * - IFLA_MIN_MTU - minimum allowed MTU
+ * - IFLA_MAX_MTU - maximum allowed MTU
+ *
+ * @param[in] nl
+ * Netlink socket of the ROUTE kind (NETLINK_ROUTE).
+ * @param[in] ifindex
+ * Linux network device index.
+ * @param[out] min_mtu
+ * Pointer to minimum allowed MTU. Populated only if both minimum and maximum MTU was queried.
+ * @param[out] max_mtu
+ * Pointer to maximum allowed MTU. Populated only if both minimum and maximum MTU was queried.
+ *
+ * @return
+ * 0 on success, negative on error and rte_errno is set.
+ *
+ * Known errors:
+ *
+ * - (-EINVAL) - either @p min_mtu or @p max_mtu is NULL.
+ * - (-ENOENT) - either minimum or maximum allowed MTU was not found in interface attributes.
+ */
+int
+mlx5_nl_get_mtu_bounds(int nl, unsigned int ifindex, uint16_t *min_mtu, uint16_t *max_mtu)
+{
+ struct mlx5_mtu out = { 0 };
+ struct {
+ struct nlmsghdr nh;
+ struct ifinfomsg info;
+ } req = {
+ .nh = {
+ .nlmsg_len = NLMSG_LENGTH(sizeof(req.info)),
+ .nlmsg_type = RTM_GETLINK,
+ .nlmsg_flags = NLM_F_REQUEST | NLM_F_ACK,
+ },
+ .info = {
+ .ifi_family = AF_UNSPEC,
+ .ifi_index = ifindex,
+ },
+ };
+ uint32_t sn = MLX5_NL_SN_GENERATE;
+ int ret;
+
+ if (min_mtu == NULL || max_mtu == NULL) {
+ rte_errno = EINVAL;
+ return -rte_errno;
+ }
+
+ ret = mlx5_nl_send(nl, &req.nh, sn);
+ if (ret < 0)
+ return ret;
+
+ ret = mlx5_nl_recv(nl, sn, mlx5_nl_get_mtu_bounds_cb, &out);
+ if (ret < 0)
+ return ret;
+
+ if (!out.min_mtu_set || !out.max_mtu_set) {
+ rte_errno = ENOENT;
+ return -rte_errno;
+ }
+
+ *min_mtu = out.min_mtu;
+ *max_mtu = out.max_mtu;
+
+ return ret;
+}
diff --git a/drivers/common/mlx5/linux/mlx5_nl.h b/drivers/common/mlx5/linux/mlx5_nl.h
index db01d7323e..ed3bad213a 100644
--- a/drivers/common/mlx5/linux/mlx5_nl.h
+++ b/drivers/common/mlx5/linux/mlx5_nl.h
@@ -82,4 +82,7 @@ int mlx5_nl_read_events(int nlsk_fd, mlx5_nl_event_cb *cb, void *cb_arg);
__rte_internal
int mlx5_nl_parse_link_status_update(struct nlmsghdr *hdr, uint32_t *ifindex);
+__rte_internal
+int mlx5_nl_get_mtu_bounds(int nl, unsigned int ifindex, uint16_t *min_mtu, uint16_t *max_mtu);
+
#endif /* RTE_PMD_MLX5_NL_H_ */
diff --git a/drivers/common/mlx5/version.map b/drivers/common/mlx5/version.map
index 03c8ce5593..75fed298cd 100644
--- a/drivers/common/mlx5/version.map
+++ b/drivers/common/mlx5/version.map
@@ -123,6 +123,7 @@ INTERNAL {
mlx5_mr_mb2mr_bh;
mlx5_nl_allmulti; # WINDOWS_NO_EXPORT
+ mlx5_nl_get_mtu_bounds; # WINDOWS_NO_EXPORT
mlx5_nl_ifindex; # WINDOWS_NO_EXPORT
mlx5_nl_init; # WINDOWS_NO_EXPORT
mlx5_nl_mac_addr_add; # WINDOWS_NO_EXPORT
diff --git a/drivers/net/mlx5/linux/mlx5_ethdev_os.c b/drivers/net/mlx5/linux/mlx5_ethdev_os.c
index 1d999ef66b..4d126751a2 100644
--- a/drivers/net/mlx5/linux/mlx5_ethdev_os.c
+++ b/drivers/net/mlx5/linux/mlx5_ethdev_os.c
@@ -242,6 +242,36 @@ mlx5_ifreq(const struct rte_eth_dev *dev, int req, struct ifreq *ifr)
return mlx5_ifreq_by_ifname(ifname, req, ifr);
}
+/**
+ * Get device minimum and maximum allowed MTU values.
+ *
+ * @param dev
+ * Pointer to Ethernet device.
+ * @param[out] min_mtu
+ * Minimum MTU value output buffer.
+ * @param[out] max_mtu
+ * Maximum MTU value output buffer.
+ *
+ * @return
+ * 0 on success, a negative errno value otherwise and rte_errno is set.
+ */
+int
+mlx5_os_get_mtu_bounds(struct rte_eth_dev *dev, uint16_t *min_mtu, uint16_t *max_mtu)
+{
+ struct mlx5_priv *priv = dev->data->dev_private;
+ int nl_route;
+ int ret;
+
+ nl_route = mlx5_nl_init(NETLINK_ROUTE, 0);
+ if (nl_route < 0)
+ return nl_route;
+
+ ret = mlx5_nl_get_mtu_bounds(nl_route, priv->if_index, min_mtu, max_mtu);
+
+ close(nl_route);
+ return ret;
+}
+
/**
* Get device MTU.
*
diff --git a/drivers/net/mlx5/linux/mlx5_os.c b/drivers/net/mlx5/linux/mlx5_os.c
index 073d81291a..38a774ade7 100644
--- a/drivers/net/mlx5/linux/mlx5_os.c
+++ b/drivers/net/mlx5/linux/mlx5_os.c
@@ -1484,6 +1484,8 @@ err_secondary:
eth_dev->data->mac_addrs = priv->mac;
eth_dev->device = dpdk_dev;
eth_dev->data->dev_flags |= RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS;
+ /* Fetch minimum and maximum allowed MTU from the device. */
+ mlx5_get_mtu_bounds(eth_dev, &priv->min_mtu, &priv->max_mtu);
/* Configure the first MAC address by default. */
if (mlx5_get_mac(eth_dev, &mac.addr_bytes)) {
DRV_LOG(ERR,
diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h
index 8052d8c426..b82142f2bc 100644
--- a/drivers/net/mlx5/mlx5.h
+++ b/drivers/net/mlx5/mlx5.h
@@ -65,6 +65,15 @@
/* Maximal number of field/field parts to map into sample registers .*/
#define MLX5_FLEX_ITEM_MAPPING_NUM 32
+/* Number of bytes not included in MTU. */
+#define MLX5_ETH_OVERHEAD (RTE_ETHER_HDR_LEN + RTE_VLAN_HLEN + RTE_ETHER_CRC_LEN)
+
+/* Minimum allowed MTU to be reported whenever PMD cannot query it from OS. */
+#define MLX5_ETH_MIN_MTU (RTE_ETHER_MIN_MTU)
+
+/* Maximum allowed MTU to be reported whenever PMD cannot query it from OS. */
+#define MLX5_ETH_MAX_MTU (9978)
+
enum mlx5_ipool_index {
#if defined(HAVE_IBV_FLOW_DV_SUPPORT) || !defined(HAVE_INFINIBAND_VERBS_H)
MLX5_IPOOL_DECAP_ENCAP = 0, /* Pool for encap/decap resource. */
@@ -1714,6 +1723,8 @@ struct mlx5_priv {
unsigned int vlan_filter_n; /* Number of configured VLAN filters. */
/* Device properties. */
uint16_t mtu; /* Configured MTU. */
+ uint16_t min_mtu; /* Minimum MTU allowed on the NIC. */
+ uint16_t max_mtu; /* Maximum MTU allowed on the NIC. */
unsigned int isolated:1; /* Whether isolated mode is enabled. */
unsigned int representor:1; /* Device is a port representor. */
unsigned int master:1; /* Device is a E-Switch master. */
@@ -1952,6 +1963,7 @@ eth_rx_burst_t mlx5_select_rx_function(struct rte_eth_dev *dev);
struct mlx5_priv *mlx5_port_to_eswitch_info(uint16_t port, bool valid);
struct mlx5_priv *mlx5_dev_to_eswitch_info(struct rte_eth_dev *dev);
int mlx5_dev_configure_rss_reta(struct rte_eth_dev *dev);
+void mlx5_get_mtu_bounds(struct rte_eth_dev *dev, uint16_t *min_mtu, uint16_t *max_mtu);
/* mlx5_ethdev_os.c */
@@ -1990,6 +2002,7 @@ int mlx5_os_get_stats_n(struct rte_eth_dev *dev, bool bond_master,
uint16_t *n_stats, uint16_t *n_stats_sec);
void mlx5_os_stats_init(struct rte_eth_dev *dev);
int mlx5_get_flag_dropless_rq(struct rte_eth_dev *dev);
+int mlx5_os_get_mtu_bounds(struct rte_eth_dev *dev, uint16_t *min_mtu, uint16_t *max_mtu);
/* mlx5_mac.c */
diff --git a/drivers/net/mlx5/mlx5_ethdev.c b/drivers/net/mlx5/mlx5_ethdev.c
index b5b5a4f287..8fc62e9d04 100644
--- a/drivers/net/mlx5/mlx5_ethdev.c
+++ b/drivers/net/mlx5/mlx5_ethdev.c
@@ -352,9 +352,11 @@ mlx5_dev_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *info)
unsigned int max;
uint16_t max_wqe;
+ info->min_mtu = priv->min_mtu;
+ info->max_mtu = priv->max_mtu;
+ info->max_rx_pktlen = info->max_mtu + MLX5_ETH_OVERHEAD;
/* FIXME: we should ask the device for these values. */
info->min_rx_bufsize = 32;
- info->max_rx_pktlen = 65536;
info->max_lro_pkt_size = MLX5_MAX_LRO_SIZE;
/*
* Since we need one CQ per QP, the limit is the minimum number
@@ -801,3 +803,41 @@ mlx5_hairpin_cap_get(struct rte_eth_dev *dev, struct rte_eth_hairpin_cap *cap)
cap->tx_cap.rte_memory = hca_attr->hairpin_sq_wq_in_host_mem;
return 0;
}
+
+/**
+ * Query minimum and maximum allowed MTU value on the device.
+ *
+ * This functions will always return valid MTU bounds.
+ * In case platform-specific implementation fails or current platform does not support it,
+ * the fallback default values will be used.
+ *
+ * @param[in] dev
+ * Pointer to Ethernet device
+ * @param[out] min_mtu
+ * Minimum MTU value output buffer.
+ * @param[out] max_mtu
+ * Maximum MTU value output buffer.
+ */
+void
+mlx5_get_mtu_bounds(struct rte_eth_dev *dev, uint16_t *min_mtu, uint16_t *max_mtu)
+{
+ int ret;
+
+ MLX5_ASSERT(min_mtu != NULL);
+ MLX5_ASSERT(max_mtu != NULL);
+
+ ret = mlx5_os_get_mtu_bounds(dev, min_mtu, max_mtu);
+ if (ret < 0) {
+ if (ret != -ENOTSUP)
+ DRV_LOG(INFO, "port %u failed to query MTU bounds, using fallback values",
+ dev->data->port_id);
+ *min_mtu = MLX5_ETH_MIN_MTU;
+ *max_mtu = MLX5_ETH_MAX_MTU;
+
+ /* This function does not fail. Clear rte_errno. */
+ rte_errno = 0;
+ }
+
+ DRV_LOG(INFO, "port %u minimum MTU is %u", dev->data->port_id, *min_mtu);
+ DRV_LOG(INFO, "port %u maximum MTU is %u", dev->data->port_id, *max_mtu);
+}
diff --git a/drivers/net/mlx5/windows/mlx5_ethdev_os.c b/drivers/net/mlx5/windows/mlx5_ethdev_os.c
index 49f750be68..4f43b95a09 100644
--- a/drivers/net/mlx5/windows/mlx5_ethdev_os.c
+++ b/drivers/net/mlx5/windows/mlx5_ethdev_os.c
@@ -71,6 +71,34 @@ mlx5_get_ifname(const struct rte_eth_dev *dev, char (*ifname)[MLX5_NAMESIZE])
return 0;
}
+/**
+ * Get device minimum and maximum allowed MTU.
+ *
+ * Windows API does not expose minimum and maximum allowed MTU.
+ * In this case, this just returns (-ENOTSUP) to allow platform-independent code
+ * to fallback to default values.
+ *
+ * @param dev
+ * Pointer to Ethernet device.
+ * @param[out] min_mtu
+ * Minimum MTU value output buffer.
+ * @param[out] max_mtu
+ * Maximum MTU value output buffer.
+ *
+ * @return
+ * (-ENOTSUP) - not supported on Windows
+ */
+int
+mlx5_os_get_mtu_bounds(struct rte_eth_dev *dev, uint16_t *min_mtu, uint16_t *max_mtu)
+{
+ RTE_SET_USED(dev);
+ RTE_SET_USED(min_mtu);
+ RTE_SET_USED(max_mtu);
+
+ rte_errno = ENOTSUP;
+ return -rte_errno;
+}
+
/**
* Get device MTU.
*
diff --git a/drivers/net/mlx5/windows/mlx5_os.c b/drivers/net/mlx5/windows/mlx5_os.c
index d35b949b34..a2c2b37773 100644
--- a/drivers/net/mlx5/windows/mlx5_os.c
+++ b/drivers/net/mlx5/windows/mlx5_os.c
@@ -431,6 +431,8 @@ mlx5_dev_spawn(struct rte_device *dpdk_dev,
eth_dev->data->mac_addrs = priv->mac;
eth_dev->device = dpdk_dev;
eth_dev->data->dev_flags |= RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS;
+ /* Fetch minimum and maximum allowed MTU from the device. */
+ mlx5_get_mtu_bounds(eth_dev, &priv->min_mtu, &priv->max_mtu);
/* Configure the first MAC address by default. */
if (mlx5_get_mac(eth_dev, &mac.addr_bytes)) {
DRV_LOG(ERR,
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:35.463064942 +0000
+++ 0017-net-mlx5-fix-min-and-max-MTU-reporting.patch 2025-10-27 15:54:34.743948245 +0000
@@ -1 +1 @@
-From 44d657109216a32e8718446f20f91272e10575dd Mon Sep 17 00:00:00 2001
+From b1be3bbf46a8d9c6a422db5c9359904dafe9048f Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 44d657109216a32e8718446f20f91272e10575dd ]
+
@@ -22 +23,0 @@
-Cc: stable@dpdk.org
@@ -27 +28 @@
- drivers/common/mlx5/linux/mlx5_nl.c | 109 ++++++++++++++++++++++
+ drivers/common/mlx5/linux/mlx5_nl.c | 108 ++++++++++++++++++++++
@@ -28,0 +30 @@
+ drivers/common/mlx5/version.map | 1 +
@@ -35 +37 @@
- 8 files changed, 228 insertions(+), 1 deletion(-)
+ 9 files changed, 228 insertions(+), 1 deletion(-)
@@ -38 +40 @@
-index 86166e92d0..dd69e229e3 100644
+index 5d04857b38..4fa2410a81 100644
@@ -41 +43 @@
-@@ -2247,3 +2247,112 @@ mlx5_nl_rdma_monitor_cap_get(int nl, uint8_t *cap)
+@@ -1962,3 +1962,111 @@ mlx5_nl_read_events(int nlsk_fd, mlx5_nl_event_cb *cb, void *cb_arg)
@@ -109 +110,0 @@
-+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_nl_get_mtu_bounds)
@@ -155 +156 @@
-index e32080fa63..26923a88fd 100644
+index db01d7323e..ed3bad213a 100644
@@ -158 +159 @@
-@@ -117,4 +117,7 @@ void mlx5_nl_rdma_monitor_info_get(struct nlmsghdr *hdr, struct mlx5_nl_port_inf
+@@ -82,4 +82,7 @@ int mlx5_nl_read_events(int nlsk_fd, mlx5_nl_event_cb *cb, void *cb_arg);
@@ -160 +161 @@
- int mlx5_nl_rdma_monitor_cap_get(int nl, uint8_t *cap);
+ int mlx5_nl_parse_link_status_update(struct nlmsghdr *hdr, uint32_t *ifindex);
@@ -165,0 +167,12 @@
+diff --git a/drivers/common/mlx5/version.map b/drivers/common/mlx5/version.map
+index 03c8ce5593..75fed298cd 100644
+--- a/drivers/common/mlx5/version.map
++++ b/drivers/common/mlx5/version.map
+@@ -123,6 +123,7 @@ INTERNAL {
+ mlx5_mr_mb2mr_bh;
+
+ mlx5_nl_allmulti; # WINDOWS_NO_EXPORT
++ mlx5_nl_get_mtu_bounds; # WINDOWS_NO_EXPORT
+ mlx5_nl_ifindex; # WINDOWS_NO_EXPORT
+ mlx5_nl_init; # WINDOWS_NO_EXPORT
+ mlx5_nl_mac_addr_add; # WINDOWS_NO_EXPORT
@@ -167 +180 @@
-index 9daeda5435..a371c2c747 100644
+index 1d999ef66b..4d126751a2 100644
@@ -170 +183 @@
-@@ -159,6 +159,36 @@ mlx5_ifreq(const struct rte_eth_dev *dev, int req, struct ifreq *ifr)
+@@ -242,6 +242,36 @@ mlx5_ifreq(const struct rte_eth_dev *dev, int req, struct ifreq *ifr)
@@ -208 +221 @@
-index 696a3e12c7..2bc8ca9284 100644
+index 073d81291a..38a774ade7 100644
@@ -211 +224 @@
-@@ -1562,6 +1562,8 @@ err_secondary:
+@@ -1484,6 +1484,8 @@ err_secondary:
@@ -221 +234 @@
-index c08894cd03..53f0a27445 100644
+index 8052d8c426..b82142f2bc 100644
@@ -224 +237 @@
-@@ -74,6 +74,15 @@
+@@ -65,6 +65,15 @@
@@ -240 +253 @@
-@@ -1981,6 +1990,8 @@ struct mlx5_priv {
+@@ -1714,6 +1723,8 @@ struct mlx5_priv {
@@ -249 +262,3 @@
-@@ -2333,6 +2344,7 @@ struct mlx5_priv *mlx5_dev_to_eswitch_info(struct rte_eth_dev *dev);
+@@ -1952,6 +1963,7 @@ eth_rx_burst_t mlx5_select_rx_function(struct rte_eth_dev *dev);
+ struct mlx5_priv *mlx5_port_to_eswitch_info(uint16_t port, bool valid);
+ struct mlx5_priv *mlx5_dev_to_eswitch_info(struct rte_eth_dev *dev);
@@ -251,2 +265,0 @@
- uint64_t mlx5_get_restore_flags(struct rte_eth_dev *dev,
- enum rte_eth_dev_operation op);
@@ -257 +270 @@
-@@ -2372,6 +2384,7 @@ int mlx5_os_get_stats_n(struct rte_eth_dev *dev, bool bond_master,
+@@ -1990,6 +2002,7 @@ int mlx5_os_get_stats_n(struct rte_eth_dev *dev, bool bond_master,
@@ -266 +279 @@
-index 68d1c1bfa7..7747b0c869 100644
+index b5b5a4f287..8fc62e9d04 100644
@@ -269 +282 @@
-@@ -360,9 +360,11 @@ mlx5_dev_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *info)
+@@ -352,9 +352,11 @@ mlx5_dev_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *info)
@@ -282,2 +295,2 @@
-@@ -863,3 +865,41 @@ mlx5_get_restore_flags(__rte_unused struct rte_eth_dev *dev,
- /* mlx5 PMD does not require any configuration restore. */
+@@ -801,3 +803,41 @@ mlx5_hairpin_cap_get(struct rte_eth_dev *dev, struct rte_eth_hairpin_cap *cap)
+ cap->tx_cap.rte_memory = hca_attr->hairpin_sq_wq_in_host_mem;
@@ -364 +377 @@
-index d583730066..c4e3430bdc 100644
+index d35b949b34..a2c2b37773 100644
@@ -367 +380 @@
-@@ -477,6 +477,8 @@ mlx5_dev_spawn(struct rte_device *dpdk_dev,
+@@ -431,6 +431,8 @@ mlx5_dev_spawn(struct rte_device *dpdk_dev,
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/mlx5: fix unsupported flow rule port action' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (15 preceding siblings ...)
2025-10-27 16:18 ` patch 'net/mlx5: fix min and max MTU reporting' " luca.boccassi
@ 2025-10-27 16:18 ` luca.boccassi
2025-10-27 16:18 ` patch 'net/mlx5: fix non-template age rules flush' " luca.boccassi
` (60 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:18 UTC (permalink / raw)
To: Maayan Kashani; +Cc: Dariusz Sosnowski, Ivan Malov, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/def814b06fd87d79f247e907f82269737e47eb3e
Thanks.
Luca Boccassi
---
From def814b06fd87d79f247e907f82269737e47eb3e Mon Sep 17 00:00:00 2001
From: Maayan Kashani <mkashani@nvidia.com>
Date: Thu, 7 Aug 2025 12:12:47 +0300
Subject: [PATCH] net/mlx5: fix unsupported flow rule port action
[ upstream commit c040e9a85a1fbce46528e9bc15d1ce4bbc911346 ]
When dv_flow_en=2, the port ID action is not supported.
Although a rule can be created successfully in non-template mode,
the specified action will be silently ignored and not applied.
To prevent this ambiguous behavior, explicitly return an error
when a port ID action is used with dv_flow_en=2,
and recommend using a represented port action instead.
Fixes: f1fecffa88df ("net/mlx5: support Direct Rules action template API")
Signed-off-by: Maayan Kashani <mkashani@nvidia.com>
Acked-by: Dariusz Sosnowski <dsosnowski@nvidia.com>
Acked-by: Ivan Malov <ivan.malov@arknetworks.am>
---
drivers/net/mlx5/mlx5_flow_hw.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/drivers/net/mlx5/mlx5_flow_hw.c b/drivers/net/mlx5/mlx5_flow_hw.c
index a2cd9b8b5c..7a8455baf6 100644
--- a/drivers/net/mlx5/mlx5_flow_hw.c
+++ b/drivers/net/mlx5/mlx5_flow_hw.c
@@ -1666,6 +1666,10 @@ __flow_hw_actions_translate(struct rte_eth_dev *dev,
case RTE_FLOW_ACTION_TYPE_END:
actions_end = true;
break;
+ case RTE_FLOW_ACTION_TYPE_PORT_ID:
+ DRV_LOG(ERR, "RTE_FLOW_ACTION_TYPE_PORT_ID action is not supported. "
+ "Use RTE_FLOW_ACTION_TYPE_REPRESENTED_PORT instead.");
+ goto err;
default:
break;
}
@@ -4274,6 +4278,10 @@ flow_hw_dr_actions_template_create(struct rte_flow_actions_template *at)
at->actions_off[i] = curr_off;
action_types[curr_off++] = MLX5DR_ACTION_TYP_MISS;
break;
+ case RTE_FLOW_ACTION_TYPE_PORT_ID:
+ DRV_LOG(ERR, "RTE_FLOW_ACTION_TYPE_PORT_ID action is not supported. "
+ "Use RTE_FLOW_ACTION_TYPE_REPRESENTED_PORT instead.\n");
+ return NULL;
default:
type = mlx5_hw_dr_action_types[at->actions[i].type];
at->actions_off[i] = curr_off;
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:35.502533826 +0000
+++ 0018-net-mlx5-fix-unsupported-flow-rule-port-action.patch 2025-10-27 15:54:34.751948446 +0000
@@ -1 +1 @@
-From c040e9a85a1fbce46528e9bc15d1ce4bbc911346 Mon Sep 17 00:00:00 2001
+From def814b06fd87d79f247e907f82269737e47eb3e Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit c040e9a85a1fbce46528e9bc15d1ce4bbc911346 ]
+
@@ -15 +16,0 @@
-Cc: stable@dpdk.org
@@ -21,2 +22,2 @@
- drivers/net/mlx5/mlx5_flow_hw.c | 10 +++++++++-
- 1 file changed, 9 insertions(+), 1 deletion(-)
+ drivers/net/mlx5/mlx5_flow_hw.c | 8 ++++++++
+ 1 file changed, 8 insertions(+)
@@ -25 +26 @@
-index 016370f68b..0c3f554479 100644
+index a2cd9b8b5c..7a8455baf6 100644
@@ -28 +29 @@
-@@ -2913,6 +2913,10 @@ __flow_hw_translate_actions_template(struct rte_eth_dev *dev,
+@@ -1666,6 +1666,10 @@ __flow_hw_actions_translate(struct rte_eth_dev *dev,
@@ -39,6 +40,4 @@
-@@ -7648,7 +7652,11 @@ flow_hw_parse_flow_actions_to_dr_actions(struct rte_eth_dev *dev,
- case MLX5_RTE_FLOW_ACTION_TYPE_MIRROR:
- at->dr_off[i] = curr_off;
- action_types[curr_off++] = MLX5DR_ACTION_TYP_DEST_ARRAY;
-- break;
-+ break;
+@@ -4274,6 +4278,10 @@ flow_hw_dr_actions_template_create(struct rte_flow_actions_template *at)
+ at->actions_off[i] = curr_off;
+ action_types[curr_off++] = MLX5DR_ACTION_TYP_MISS;
+ break;
@@ -47,2 +46,2 @@
-+ "Use RTE_FLOW_ACTION_TYPE_REPRESENTED_PORT instead.");
-+ return -EINVAL;
++ "Use RTE_FLOW_ACTION_TYPE_REPRESENTED_PORT instead.\n");
++ return NULL;
@@ -51 +50 @@
- at->dr_off[i] = curr_off;
+ at->actions_off[i] = curr_off;
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/mlx5: fix non-template age rules flush' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (16 preceding siblings ...)
2025-10-27 16:18 ` patch 'net/mlx5: fix unsupported flow rule port action' " luca.boccassi
@ 2025-10-27 16:18 ` luca.boccassi
2025-10-27 16:18 ` patch 'net/mlx5: fix connection tracking state item validation' " luca.boccassi
` (59 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:18 UTC (permalink / raw)
To: Maayan Kashani; +Cc: Dariusz Sosnowski, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/efd6af31a6b84440c252bb12548651fc1fb12fc1
Thanks.
Luca Boccassi
---
From efd6af31a6b84440c252bb12548651fc1fb12fc1 Mon Sep 17 00:00:00 2001
From: Maayan Kashani <mkashani@nvidia.com>
Date: Sun, 10 Aug 2025 09:47:31 +0300
Subject: [PATCH] net/mlx5: fix non-template age rules flush
[ upstream commit 7fb2007bb1fc0b949661e316cfa60bbdf60e54ac ]
When a user creates a non-template rule with both age and counter actions,
both actions share the same counter.
If a flow flush occurs, the rule is destroyed and the counter is released.
However, the age sampling callback may still access the age/counter during
the free, leading to a panic on assertion in debug mode.
This creates a race condition: one thread samples the age while another
releases the age/counter info used by the age action.
The fix is to ignore this case where the age is
free and counter not freed yet,
or the counter was freed during the age check.
Fixes: 04a4de756e14 ("net/mlx5: support flow age action with HWS")
Signed-off-by: Maayan Kashani <mkashani@nvidia.com>
Acked-by: Dariusz Sosnowski <dsosnowski@nvidia.com>
---
drivers/net/mlx5/mlx5_hws_cnt.c | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/drivers/net/mlx5/mlx5_hws_cnt.c b/drivers/net/mlx5/mlx5_hws_cnt.c
index 6e4b093bd8..6a0c371cd9 100644
--- a/drivers/net/mlx5/mlx5_hws_cnt.c
+++ b/drivers/net/mlx5/mlx5_hws_cnt.c
@@ -179,10 +179,13 @@ mlx5_hws_aging_check(struct mlx5_priv *priv, struct mlx5_hws_cnt_pool *cpool)
break;
case HWS_AGE_FREE:
/*
- * AGE parameter with state "FREE" couldn't be pointed
- * by any counter since counter is destroyed first.
- * Fall-through.
+ * Since this check is async, we may reach a race condition
+ * where the age and counter are used in the same rule,
+ * using the same counter index,
+ * age was freed first, and counter was not freed yet.
+ * Aging check can be safely ignored in that case.
*/
+ continue;
default:
MLX5_ASSERT(0);
continue;
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:35.544102379 +0000
+++ 0019-net-mlx5-fix-non-template-age-rules-flush.patch 2025-10-27 15:54:34.755948546 +0000
@@ -1 +1 @@
-From 7fb2007bb1fc0b949661e316cfa60bbdf60e54ac Mon Sep 17 00:00:00 2001
+From efd6af31a6b84440c252bb12548651fc1fb12fc1 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 7fb2007bb1fc0b949661e316cfa60bbdf60e54ac ]
+
@@ -19 +20,0 @@
-Cc: stable@dpdk.org
@@ -28 +29 @@
-index fce7a7e815..5c738f38ca 100644
+index 6e4b093bd8..6a0c371cd9 100644
@@ -31 +32 @@
-@@ -170,10 +170,13 @@ mlx5_hws_aging_check(struct mlx5_priv *priv, struct mlx5_hws_cnt_pool *cpool)
+@@ -179,10 +179,13 @@ mlx5_hws_aging_check(struct mlx5_priv *priv, struct mlx5_hws_cnt_pool *cpool)
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/mlx5: fix connection tracking state item validation' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (17 preceding siblings ...)
2025-10-27 16:18 ` patch 'net/mlx5: fix non-template age rules flush' " luca.boccassi
@ 2025-10-27 16:18 ` luca.boccassi
2025-10-27 16:18 ` patch 'net/mlx5: fix indirect flow age action handling' " luca.boccassi
` (58 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:18 UTC (permalink / raw)
To: Khadem Ullah; +Cc: Dariusz Sosnowski, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/22388ebd621d3554ab259e159f4f0964702ecc7e
Thanks.
Luca Boccassi
---
From 22388ebd621d3554ab259e159f4f0964702ecc7e Mon Sep 17 00:00:00 2001
From: Khadem Ullah <14pwcse1224@uetpeshawar.edu.pk>
Date: Thu, 14 Aug 2025 06:16:01 -0400
Subject: [PATCH] net/mlx5: fix connection tracking state item validation
[ upstream commit 179e70fd7ad2027705b42e7416d436d299eca78c ]
This patch validate a connection tracking state when matching
'conntrack is' in rte_flow rules. Since conntrack item flags
is a bitmap, then any combination of RTE_FLOW_CONNTRACK_PKT_STATE_*
flags is a valid value to match on.
This patch validate the CT state item.
Fixes: aca19061e4b9 ("net/mlx5: validate connection tracking item")
Signed-off-by: Khadem Ullah <14pwcse1224@uetpeshawar.edu.pk>
Acked-by: Dariusz Sosnowski <dsosnowski@nvidia.com>
---
drivers/net/mlx5/mlx5_flow.h | 5 +++++
drivers/net/mlx5/mlx5_flow_dv.c | 5 +++++
2 files changed, 10 insertions(+)
diff --git a/drivers/net/mlx5/mlx5_flow.h b/drivers/net/mlx5/mlx5_flow.h
index eb7040ee4d..3a23954697 100644
--- a/drivers/net/mlx5/mlx5_flow.h
+++ b/drivers/net/mlx5/mlx5_flow.h
@@ -95,6 +95,11 @@ enum {
#define MLX5_ACTION_CTX_CT_GET_OWNER MLX5_INDIRECT_ACT_CT_GET_OWNER
#define MLX5_ACTION_CTX_CT_GEN_IDX MLX5_INDIRECT_ACT_CT_GEN_IDX
+#define MLX5_FLOW_CONNTRACK_PKT_STATE_ALL \
+ (RTE_FLOW_CONNTRACK_PKT_STATE_VALID | RTE_FLOW_CONNTRACK_PKT_STATE_CHANGED | \
+ RTE_FLOW_CONNTRACK_PKT_STATE_INVALID | RTE_FLOW_CONNTRACK_PKT_STATE_DISABLED | \
+ RTE_FLOW_CONNTRACK_PKT_STATE_BAD)
+
/* Matches on selected register. */
struct mlx5_rte_flow_item_tag {
enum modify_reg id;
diff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow_dv.c
index f3a76f9e93..ff8d58db64 100644
--- a/drivers/net/mlx5/mlx5_flow_dv.c
+++ b/drivers/net/mlx5/mlx5_flow_dv.c
@@ -2862,6 +2862,11 @@ flow_dv_validate_item_aso_ct(struct rte_eth_dev *dev,
return rte_flow_error_set(error, EINVAL,
RTE_FLOW_ERROR_TYPE_ITEM, NULL,
"Conflict status bits");
+ if (spec->flags & ~MLX5_FLOW_CONNTRACK_PKT_STATE_ALL)
+ return rte_flow_error_set(error, EINVAL,
+ RTE_FLOW_ERROR_TYPE_ITEM,
+ NULL,
+ "Invalid CT item flags");
/* State change also needs to be considered. */
*item_flags |= MLX5_FLOW_LAYER_ASO_CT;
return 0;
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:35.576474552 +0000
+++ 0020-net-mlx5-fix-connection-tracking-state-item-validati.patch 2025-10-27 15:54:34.767948846 +0000
@@ -1 +1 @@
-From 179e70fd7ad2027705b42e7416d436d299eca78c Mon Sep 17 00:00:00 2001
+From 22388ebd621d3554ab259e159f4f0964702ecc7e Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 179e70fd7ad2027705b42e7416d436d299eca78c ]
+
@@ -14 +15,0 @@
-Cc: stable@dpdk.org
@@ -19,4 +20,3 @@
- drivers/net/mlx5/mlx5_flow.h | 5 +++++
- drivers/net/mlx5/mlx5_flow_dv.c | 5 +++++
- drivers/net/mlx5/mlx5_flow_hw.c | 10 ++++++++++
- 3 files changed, 20 insertions(+)
+ drivers/net/mlx5/mlx5_flow.h | 5 +++++
+ drivers/net/mlx5/mlx5_flow_dv.c | 5 +++++
+ 2 files changed, 10 insertions(+)
@@ -25 +25 @@
-index e890e732c3..ed0c1fcfd2 100644
+index eb7040ee4d..3a23954697 100644
@@ -28,3 +28,3 @@
-@@ -100,6 +100,11 @@ enum mlx5_indirect_type {
- #define MLX5_INDIRECT_ACT_CT_GET_IDX(index) \
- ((index) & ((1 << MLX5_INDIRECT_ACT_CT_OWNER_SHIFT) - 1))
+@@ -95,6 +95,11 @@ enum {
+ #define MLX5_ACTION_CTX_CT_GET_OWNER MLX5_INDIRECT_ACT_CT_GET_OWNER
+ #define MLX5_ACTION_CTX_CT_GEN_IDX MLX5_INDIRECT_ACT_CT_GEN_IDX
@@ -37,3 +37,3 @@
- /*
- * When HW steering flow engine is used, the CT action handles are encoded in a following way:
- * - bits 31:29 - type
+ /* Matches on selected register. */
+ struct mlx5_rte_flow_item_tag {
+ enum modify_reg id;
@@ -41 +41 @@
-index 7b9e5018b8..f673637e7d 100644
+index f3a76f9e93..ff8d58db64 100644
@@ -44,10 +44,9 @@
-@@ -3289,6 +3289,11 @@ mlx5_flow_dv_validate_item_aso_ct(struct rte_eth_dev *dev,
- RTE_FLOW_ERROR_TYPE_ITEM,
- NULL,
- "Conflict status bits");
-+ if (spec->flags & ~MLX5_FLOW_CONNTRACK_PKT_STATE_ALL)
-+ return rte_flow_error_set(error, EINVAL,
-+ RTE_FLOW_ERROR_TYPE_ITEM,
-+ NULL,
-+ "Invalid CT item flags");
- }
+@@ -2862,6 +2862,11 @@ flow_dv_validate_item_aso_ct(struct rte_eth_dev *dev,
+ return rte_flow_error_set(error, EINVAL,
+ RTE_FLOW_ERROR_TYPE_ITEM, NULL,
+ "Conflict status bits");
++ if (spec->flags & ~MLX5_FLOW_CONNTRACK_PKT_STATE_ALL)
++ return rte_flow_error_set(error, EINVAL,
++ RTE_FLOW_ERROR_TYPE_ITEM,
++ NULL,
++ "Invalid CT item flags");
@@ -56,28 +55 @@
-diff --git a/drivers/net/mlx5/mlx5_flow_hw.c b/drivers/net/mlx5/mlx5_flow_hw.c
-index 3da8d93454..bca396a9ab 100644
---- a/drivers/net/mlx5/mlx5_flow_hw.c
-+++ b/drivers/net/mlx5/mlx5_flow_hw.c
-@@ -17010,6 +17010,7 @@ flow_hw_validate_rule_pattern(struct rte_eth_dev *dev,
- switch (items->type) {
- const struct rte_flow_item_ethdev *ethdev;
- const struct rte_flow_item_tx_queue *tx_queue;
-+ const struct rte_flow_item_conntrack *spec;
- struct mlx5_txq_ctrl *txq;
-
- case RTE_FLOW_ITEM_TYPE_REPRESENTED_PORT:
-@@ -17030,6 +17031,15 @@ flow_hw_validate_rule_pattern(struct rte_eth_dev *dev,
- RTE_FLOW_ERROR_TYPE_ITEM_SPEC, items,
- "Invalid Tx queue");
- mlx5_txq_release(dev, tx_queue->tx_queue);
-+ break;
-+ case RTE_FLOW_ITEM_TYPE_CONNTRACK:
-+ spec = items->spec;
-+ if (spec->flags & ~MLX5_FLOW_CONNTRACK_PKT_STATE_ALL)
-+ return rte_flow_error_set(error, EINVAL,
-+ RTE_FLOW_ERROR_TYPE_ITEM,
-+ NULL,
-+ "Invalid CT item flags");
-+ break;
- default:
- break;
- }
+ return 0;
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/mlx5: fix indirect flow age action handling' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (18 preceding siblings ...)
2025-10-27 16:18 ` patch 'net/mlx5: fix connection tracking state item validation' " luca.boccassi
@ 2025-10-27 16:18 ` luca.boccassi
2025-10-27 16:19 ` patch 'net/mlx5: fix Direct Verbs counter offset detection' " luca.boccassi
` (57 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:18 UTC (permalink / raw)
To: Dariusz Sosnowski; +Cc: Bing Zhao, Raslan Darawsheh, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/4d16e6e800843b5c4e5134d15a2a856dca6d56df
Thanks.
Luca Boccassi
---
From 4d16e6e800843b5c4e5134d15a2a856dca6d56df Mon Sep 17 00:00:00 2001
From: Dariusz Sosnowski <dsosnowski@nvidia.com>
Date: Tue, 19 Aug 2025 13:27:42 +0200
Subject: [PATCH] net/mlx5: fix indirect flow age action handling
[ upstream commit 8bc72d9f277593f6d8b27278bad3a5bb92e7347f ]
Indirect AGE flow actions can be created either through synchronous
or asynchronous flow API.
mlx5 PMD stores the queue used to create that action to support
strict queueing. When action is created through synchronous API
invalid queue index is stored instead.
Whenever a flow rule is created with indirect AGE and
direct COUNT flow actions, PMD allocates a HW counter for ageing
that flow rule during rule creation.
During allocation of the counter a queue index is needed
to select a proper counter pool cache.
In case when indirect AGE action created through synchronous API
was used in that case, the associated queue index was used
to select pool cache. Since queue index was invalid, PMD crashed.
Counter can be allocated using the index of currently used queue and
it does not have to match the queue used to create AGE action.
This patch fixes the crash by using the index of currently used queue
for counter allocation.
This patch also adds missing validation for synchronous
and asynchronous AGE flow action creation:
- If strict queueing is disabled, only synchronous creation is allowed.
- If strict queueing is enabled, only asynchronous creation is allowed.
PMD documentation is updated accordingly.
It also updates validation of synchronous query
of aged flow rules in regards to strict queueing.
When strict queueing is enabled, synchronous query is rejected.
This aligns PMD behavior with API description.
Fixes: 04a4de756e14 ("net/mlx5: support flow age action with HWS")
Signed-off-by: Dariusz Sosnowski <dsosnowski@nvidia.com>
Acked-by: Bing Zhao <bingz@nvidia.com>
Acked-by: Raslan Darawsheh <rasland@nvidia.com>
---
doc/guides/nics/mlx5.rst | 4 ++++
drivers/net/mlx5/mlx5_flow_hw.c | 24 +++++++++++++++++-------
2 files changed, 21 insertions(+), 7 deletions(-)
diff --git a/doc/guides/nics/mlx5.rst b/doc/guides/nics/mlx5.rst
index d2f741a472..e74c1d8e8d 100644
--- a/doc/guides/nics/mlx5.rst
+++ b/doc/guides/nics/mlx5.rst
@@ -1700,6 +1700,10 @@ applications are allowed to:
This option is supported only for Tx hairpin queues.
+#. With strict queueing enabled
+ (``RTE_FLOW_PORT_FLAG_STRICT_QUEUE`` passed to ``rte_flow_configure()``),
+ indirect age actions can be created only through asynchronous flow API.
+
Notes for testpmd
-----------------
diff --git a/drivers/net/mlx5/mlx5_flow_hw.c b/drivers/net/mlx5/mlx5_flow_hw.c
index 7a8455baf6..5fbbd487de 100644
--- a/drivers/net/mlx5/mlx5_flow_hw.c
+++ b/drivers/net/mlx5/mlx5_flow_hw.c
@@ -1886,6 +1886,7 @@ flow_hw_shared_action_construct(struct rte_eth_dev *dev, uint32_t queue,
uint32_t idx = act_idx &
((1u << MLX5_INDIRECT_ACTION_TYPE_OFFSET) - 1);
uint64_t item_flags;
+ uint32_t *cnt_queue;
cnt_id_t age_cnt;
memset(&act_data, 0, sizeof(act_data));
@@ -1931,9 +1932,8 @@ flow_hw_shared_action_construct(struct rte_eth_dev *dev, uint32_t queue,
if (param == NULL)
return -1;
if (action_flags & MLX5_FLOW_ACTION_COUNT) {
- if (mlx5_hws_cnt_pool_get(priv->hws_cpool,
- ¶m->queue_id, &age_cnt,
- idx) < 0)
+ cnt_queue = mlx5_hws_cnt_get_queue(priv, &queue);
+ if (mlx5_hws_cnt_pool_get(priv->hws_cpool, cnt_queue, &age_cnt, idx) < 0)
return -1;
flow->cnt_id = age_cnt;
param->nb_cnts++;
@@ -8469,6 +8469,14 @@ flow_hw_action_create(struct rte_eth_dev *dev,
const struct rte_flow_action *action,
struct rte_flow_error *err)
{
+ struct mlx5_priv *priv = dev->data->dev_private;
+
+ if (action->type == RTE_FLOW_ACTION_TYPE_AGE && priv->hws_strict_queue) {
+ rte_flow_error_set(err, EINVAL, RTE_FLOW_ERROR_TYPE_STATE, NULL,
+ "Cannot create age action synchronously with strict queueing");
+ return NULL;
+ }
+
return flow_hw_action_handle_create(dev, MLX5_HW_INV_QUEUE,
NULL, conf, action, NULL, err);
}
@@ -8640,6 +8648,8 @@ flow_hw_get_q_aged_flows(struct rte_eth_dev *dev, uint32_t queue_id,
RTE_FLOW_ERROR_TYPE_UNSPECIFIED,
NULL, "No aging initialized");
if (priv->hws_strict_queue) {
+ /* Queue is invalid in sync query. Sync query and strict queueing is disallowed. */
+ MLX5_ASSERT(queue_id != MLX5_HW_INV_QUEUE);
if (queue_id >= age_info->hw_q_age->nb_rings)
return rte_flow_error_set(error, EINVAL,
RTE_FLOW_ERROR_TYPE_UNSPECIFIED,
@@ -8693,10 +8703,10 @@ flow_hw_get_aged_flows(struct rte_eth_dev *dev, void **contexts,
struct mlx5_priv *priv = dev->data->dev_private;
if (priv->hws_strict_queue)
- DRV_LOG(WARNING,
- "port %u get aged flows called in strict queue mode.",
- dev->data->port_id);
- return flow_hw_get_q_aged_flows(dev, 0, contexts, nb_contexts, error);
+ return rte_flow_error_set(error, EINVAL, RTE_FLOW_ERROR_TYPE_STATE, NULL,
+ "Cannot get aged flows synchronously with strict queueing");
+
+ return flow_hw_get_q_aged_flows(dev, MLX5_HW_INV_QUEUE, contexts, nb_contexts, error);
}
const struct mlx5_flow_driver_ops mlx5_flow_hw_drv_ops = {
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:35.632116018 +0000
+++ 0021-net-mlx5-fix-indirect-flow-age-action-handling.patch 2025-10-27 15:54:34.771948947 +0000
@@ -1 +1 @@
-From 8bc72d9f277593f6d8b27278bad3a5bb92e7347f Mon Sep 17 00:00:00 2001
+From 4d16e6e800843b5c4e5134d15a2a856dca6d56df Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 8bc72d9f277593f6d8b27278bad3a5bb92e7347f ]
+
@@ -42 +43,0 @@
-Cc: stable@dpdk.org
@@ -53 +54 @@
-index 761dcad542..20056f61d6 100644
+index d2f741a472..e74c1d8e8d 100644
@@ -56,3 +57,3 @@
-@@ -2740,6 +2740,10 @@ With :ref:`HW steering <mlx5_hws>`,
- in addition to flow rules using only age (without count action).
- - ``nb_aging_objects`` is the number of flow rules containing age action.
+@@ -1700,6 +1700,10 @@ applications are allowed to:
+
+ This option is supported only for Tx hairpin queues.
@@ -65,2 +66,2 @@
- .. _mlx5_quota:
-
+ Notes for testpmd
+ -----------------
@@ -68 +69 @@
-index 84f39c467e..c84ae726a7 100644
+index 7a8455baf6..5fbbd487de 100644
@@ -71,2 +72 @@
-@@ -3180,6 +3180,7 @@ flow_hw_shared_action_construct(struct rte_eth_dev *dev, uint32_t queue,
- uint32_t type = act_idx >> MLX5_INDIRECT_ACTION_TYPE_OFFSET;
+@@ -1886,6 +1886,7 @@ flow_hw_shared_action_construct(struct rte_eth_dev *dev, uint32_t queue,
@@ -74,0 +75 @@
+ uint64_t item_flags;
@@ -79 +80 @@
-@@ -3230,9 +3231,8 @@ flow_hw_shared_action_construct(struct rte_eth_dev *dev, uint32_t queue,
+@@ -1931,9 +1932,8 @@ flow_hw_shared_action_construct(struct rte_eth_dev *dev, uint32_t queue,
@@ -89 +89,0 @@
- flow->flags |= MLX5_FLOW_HW_FLOW_FLAG_CNT_ID;
@@ -91 +91,2 @@
-@@ -13142,6 +13142,14 @@ flow_hw_action_create(struct rte_eth_dev *dev,
+ param->nb_cnts++;
+@@ -8469,6 +8469,14 @@ flow_hw_action_create(struct rte_eth_dev *dev,
@@ -106 +107 @@
-@@ -13361,6 +13369,8 @@ flow_hw_get_q_aged_flows(struct rte_eth_dev *dev, uint32_t queue_id,
+@@ -8640,6 +8648,8 @@ flow_hw_get_q_aged_flows(struct rte_eth_dev *dev, uint32_t queue_id,
@@ -115 +116 @@
-@@ -13414,10 +13424,10 @@ flow_hw_get_aged_flows(struct rte_eth_dev *dev, void **contexts,
+@@ -8693,10 +8703,10 @@ flow_hw_get_aged_flows(struct rte_eth_dev *dev, void **contexts,
@@ -128,2 +129,2 @@
- /**
- * Initialization function for non template API which calls
+
+ const struct mlx5_flow_driver_ops mlx5_flow_hw_drv_ops = {
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/mlx5: fix Direct Verbs counter offset detection' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (19 preceding siblings ...)
2025-10-27 16:18 ` patch 'net/mlx5: fix indirect flow age action handling' " luca.boccassi
@ 2025-10-27 16:19 ` luca.boccassi
2025-10-27 16:19 ` patch 'net/mlx5: fix interface name parameter definition' " luca.boccassi
` (56 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:19 UTC (permalink / raw)
To: Dariusz Sosnowski; +Cc: Andre Muezerie, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/9d536ec45e17d575b632ae93a1df5e39b64b3cb5
Thanks.
Luca Boccassi
---
From 9d536ec45e17d575b632ae93a1df5e39b64b3cb5 Mon Sep 17 00:00:00 2001
From: Dariusz Sosnowski <dsosnowski@nvidia.com>
Date: Wed, 20 Aug 2025 10:45:21 +0200
Subject: [PATCH] net/mlx5: fix Direct Verbs counter offset detection
[ upstream commit d953431da8e1ece042e33ba71650a3ba6b1e27c1 ]
This patch fixes a bug in
mlx5_flow_dv_discover_counter_offset_support()
uncovered by a warning reported by MSVC:
../drivers/net/mlx5/mlx5_flow_dv.c(19636): warning C5287:
operands are different enum types 'ibv_flow_attr_type' and
'ibv_flow_flags';
use an explicit cast to silence this warning
IBV_FLOW_ATTR_FLAGS_EGRESS was incorrectly passed in to
type field of mlx5dv_flow_matcher_attr struct,
instead of flags field.
As a result counter offset support discovery returned a false positive
result on application with old rdma-core.
Bugzilla ID: 1758
Fixes: 4fd5e1484887 ("net/mlx5: fix counter offset detection")
Reported-by: Andre Muezerie <andremue@linux.microsoft.com>
Signed-off-by: Dariusz Sosnowski <dsosnowski@nvidia.com>
Acked-by: Andre Muezerie <andremue@linux.microsoft.com>
---
drivers/net/mlx5/mlx5_flow_dv.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow_dv.c
index ff8d58db64..d7e886fa4f 100644
--- a/drivers/net/mlx5/mlx5_flow_dv.c
+++ b/drivers/net/mlx5/mlx5_flow_dv.c
@@ -18461,7 +18461,8 @@ mlx5_flow_dv_discover_counter_offset_support(struct rte_eth_dev *dev)
.size = sizeof(value.buf),
};
struct mlx5dv_flow_matcher_attr dv_attr = {
- .type = IBV_FLOW_ATTR_NORMAL | IBV_FLOW_ATTR_FLAGS_EGRESS,
+ .type = IBV_FLOW_ATTR_NORMAL,
+ .flags = IBV_FLOW_ATTR_FLAGS_EGRESS,
.priority = 0,
.match_criteria_enable = 0,
.match_mask = (void *)&mask,
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:35.676008294 +0000
+++ 0022-net-mlx5-fix-Direct-Verbs-counter-offset-detection.patch 2025-10-27 15:54:34.783949248 +0000
@@ -1 +1 @@
-From d953431da8e1ece042e33ba71650a3ba6b1e27c1 Mon Sep 17 00:00:00 2001
+From 9d536ec45e17d575b632ae93a1df5e39b64b3cb5 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit d953431da8e1ece042e33ba71650a3ba6b1e27c1 ]
+
@@ -23 +24,0 @@
-Cc: stable@dpdk.org
@@ -33 +34 @@
-index f673637e7d..abfd54da1a 100644
+index ff8d58db64..d7e886fa4f 100644
@@ -36 +37 @@
-@@ -19657,7 +19657,8 @@ mlx5_flow_dv_discover_counter_offset_support(struct rte_eth_dev *dev)
+@@ -18461,7 +18461,8 @@ mlx5_flow_dv_discover_counter_offset_support(struct rte_eth_dev *dev)
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/mlx5: fix interface name parameter definition' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (20 preceding siblings ...)
2025-10-27 16:19 ` patch 'net/mlx5: fix Direct Verbs counter offset detection' " luca.boccassi
@ 2025-10-27 16:19 ` luca.boccassi
2025-10-27 16:19 ` patch 'net/intel: fix assumption about tag placement order' " luca.boccassi
` (55 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:19 UTC (permalink / raw)
To: Gregory Etelson; +Cc: Dariusz Sosnowski, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/0458512915113b2da620fcf44f40beed30aefbe9
Thanks.
Luca Boccassi
---
From 0458512915113b2da620fcf44f40beed30aefbe9 Mon Sep 17 00:00:00 2001
From: Gregory Etelson <getelson@nvidia.com>
Date: Sun, 10 Aug 2025 16:22:59 +0300
Subject: [PATCH] net/mlx5: fix interface name parameter definition
[ upstream commit 9e58a50c059f3760c51ddee16073496c6e1d510a ]
The patch fixes `ifname` parameter as a character buffer.
Fixes: 1256805dd54d ("net/mlx5: move Linux-specific functions")
Signed-off-by: Gregory Etelson <getelson@nvidia.com>
Acked-by: Dariusz Sosnowski <dsosnowski@nvidia.com>
---
drivers/net/mlx5/linux/mlx5_ethdev_os.c | 11 +++++------
drivers/net/mlx5/linux/mlx5_os.c | 2 +-
drivers/net/mlx5/mlx5.h | 3 +--
drivers/net/mlx5/windows/mlx5_ethdev_os.c | 4 ++--
4 files changed, 9 insertions(+), 11 deletions(-)
diff --git a/drivers/net/mlx5/linux/mlx5_ethdev_os.c b/drivers/net/mlx5/linux/mlx5_ethdev_os.c
index 4d126751a2..ea89ce8e05 100644
--- a/drivers/net/mlx5/linux/mlx5_ethdev_os.c
+++ b/drivers/net/mlx5/linux/mlx5_ethdev_os.c
@@ -156,7 +156,7 @@ mlx5_auxiliary_get_ifindex(const char *sf_name)
* 0 on success, a negative errno value otherwise and rte_errno is set.
*/
int
-mlx5_get_ifname(const struct rte_eth_dev *dev, char (*ifname)[MLX5_NAMESIZE])
+mlx5_get_ifname(const struct rte_eth_dev *dev, char ifname[MLX5_NAMESIZE])
{
struct mlx5_priv *priv = dev->data->dev_private;
unsigned int ifindex;
@@ -170,12 +170,11 @@ mlx5_get_ifname(const struct rte_eth_dev *dev, char (*ifname)[MLX5_NAMESIZE])
ifindex = mlx5_ifindex(dev);
if (!ifindex) {
if (!priv->representor)
- return mlx5_get_ifname_sysfs(priv->sh->ibdev_path,
- *ifname);
+ return mlx5_get_ifname_sysfs(priv->sh->ibdev_path, ifname);
rte_errno = ENXIO;
return -rte_errno;
}
- if (if_indextoname(ifindex, &(*ifname)[0]))
+ if (if_indextoname(ifindex, ifname))
return 0;
rte_errno = errno;
return -rte_errno;
@@ -233,10 +232,10 @@ error:
static int
mlx5_ifreq(const struct rte_eth_dev *dev, int req, struct ifreq *ifr)
{
- char ifname[sizeof(ifr->ifr_name)];
+ char ifname[MLX5_NAMESIZE];
int ret;
- ret = mlx5_get_ifname(dev, &ifname);
+ ret = mlx5_get_ifname(dev, ifname);
if (ret)
return -rte_errno;
return mlx5_ifreq_by_ifname(ifname, req, ifr);
diff --git a/drivers/net/mlx5/linux/mlx5_os.c b/drivers/net/mlx5/linux/mlx5_os.c
index 38a774ade7..23093b404a 100644
--- a/drivers/net/mlx5/linux/mlx5_os.c
+++ b/drivers/net/mlx5/linux/mlx5_os.c
@@ -1502,7 +1502,7 @@ err_secondary:
{
char ifname[MLX5_NAMESIZE];
- if (mlx5_get_ifname(eth_dev, &ifname) == 0)
+ if (mlx5_get_ifname(eth_dev, ifname) == 0)
DRV_LOG(DEBUG, "port %u ifname is \"%s\"",
eth_dev->data->port_id, ifname);
else
diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h
index b82142f2bc..ad90b090cf 100644
--- a/drivers/net/mlx5/mlx5.h
+++ b/drivers/net/mlx5/mlx5.h
@@ -1967,8 +1967,7 @@ void mlx5_get_mtu_bounds(struct rte_eth_dev *dev, uint16_t *min_mtu, uint16_t *m
/* mlx5_ethdev_os.c */
-int mlx5_get_ifname(const struct rte_eth_dev *dev,
- char (*ifname)[MLX5_NAMESIZE]);
+int mlx5_get_ifname(const struct rte_eth_dev *dev, char ifname[MLX5_NAMESIZE]);
unsigned int mlx5_ifindex(const struct rte_eth_dev *dev);
int mlx5_get_mac(struct rte_eth_dev *dev, uint8_t (*mac)[RTE_ETHER_ADDR_LEN]);
int mlx5_get_mtu(struct rte_eth_dev *dev, uint16_t *mtu);
diff --git a/drivers/net/mlx5/windows/mlx5_ethdev_os.c b/drivers/net/mlx5/windows/mlx5_ethdev_os.c
index 4f43b95a09..32a9f599b2 100644
--- a/drivers/net/mlx5/windows/mlx5_ethdev_os.c
+++ b/drivers/net/mlx5/windows/mlx5_ethdev_os.c
@@ -56,7 +56,7 @@ mlx5_get_mac(struct rte_eth_dev *dev, uint8_t (*mac)[RTE_ETHER_ADDR_LEN])
* 0 on success, a negative errno value otherwise and rte_errno is set.
*/
int
-mlx5_get_ifname(const struct rte_eth_dev *dev, char (*ifname)[MLX5_NAMESIZE])
+mlx5_get_ifname(const struct rte_eth_dev *dev, char ifname[MLX5_NAMESIZE])
{
struct mlx5_priv *priv;
mlx5_context_st *context_obj;
@@ -67,7 +67,7 @@ mlx5_get_ifname(const struct rte_eth_dev *dev, char (*ifname)[MLX5_NAMESIZE])
}
priv = dev->data->dev_private;
context_obj = (mlx5_context_st *)priv->sh->cdev->ctx;
- strncpy(*ifname, context_obj->mlx5_dev.name, MLX5_NAMESIZE);
+ strncpy(ifname, context_obj->mlx5_dev.name, MLX5_NAMESIZE);
return 0;
}
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:35.720784190 +0000
+++ 0023-net-mlx5-fix-interface-name-parameter-definition.patch 2025-10-27 15:54:34.787949348 +0000
@@ -1 +1 @@
-From 9e58a50c059f3760c51ddee16073496c6e1d510a Mon Sep 17 00:00:00 2001
+From 0458512915113b2da620fcf44f40beed30aefbe9 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 9e58a50c059f3760c51ddee16073496c6e1d510a ]
+
@@ -9 +10,0 @@
-Cc: stable@dpdk.org
@@ -21 +22 @@
-index a371c2c747..4acaaca9ca 100644
+index 4d126751a2..ea89ce8e05 100644
@@ -24 +25 @@
-@@ -73,7 +73,7 @@ mlx5_auxiliary_get_ifindex(const char *sf_name)
+@@ -156,7 +156,7 @@ mlx5_auxiliary_get_ifindex(const char *sf_name)
@@ -33 +34 @@
-@@ -87,12 +87,11 @@ mlx5_get_ifname(const struct rte_eth_dev *dev, char (*ifname)[MLX5_NAMESIZE])
+@@ -170,12 +170,11 @@ mlx5_get_ifname(const struct rte_eth_dev *dev, char (*ifname)[MLX5_NAMESIZE])
@@ -48 +49 @@
-@@ -150,10 +149,10 @@ error:
+@@ -233,10 +232,10 @@ error:
@@ -62 +63 @@
-index 85b3fabaf5..3d87aec5bc 100644
+index 38a774ade7..23093b404a 100644
@@ -65 +66 @@
-@@ -1587,7 +1587,7 @@ err_secondary:
+@@ -1502,7 +1502,7 @@ err_secondary:
@@ -75 +76 @@
-index 53f0a27445..93e298d648 100644
+index b82142f2bc..ad90b090cf 100644
@@ -78 +79 @@
-@@ -2348,8 +2348,7 @@ void mlx5_get_mtu_bounds(struct rte_eth_dev *dev, uint16_t *min_mtu, uint16_t *m
+@@ -1967,8 +1967,7 @@ void mlx5_get_mtu_bounds(struct rte_eth_dev *dev, uint16_t *min_mtu, uint16_t *m
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/intel: fix assumption about tag placement order' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (21 preceding siblings ...)
2025-10-27 16:19 ` patch 'net/mlx5: fix interface name parameter definition' " luca.boccassi
@ 2025-10-27 16:19 ` luca.boccassi
2025-10-27 16:19 ` patch 'net/ice/base: fix adding special words' " luca.boccassi
` (54 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:19 UTC (permalink / raw)
To: Bruce Richardson; +Cc: Ciara Loftus, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/c093725ca89688e1dcf44c477f9c73e25be8ab37
Thanks.
Luca Boccassi
---
From c093725ca89688e1dcf44c477f9c73e25be8ab37 Mon Sep 17 00:00:00 2001
From: Bruce Richardson <bruce.richardson@intel.com>
Date: Fri, 18 Jul 2025 16:43:12 +0100
Subject: [PATCH] net/intel: fix assumption about tag placement order
[ upstream commit 21168355589ea9edfcb2925f4952ecb05470f92f ]
The specific placement of outer/inner VLAN tags in NIC descriptors
is configurable. Therefore, remove the assumption that if the L2Tag2
field is filled in, that the L2Tag1 must also be. Instead, check the
existing mbuf VLAN flags, and move tags and set flags as appropriate.
This fixes an issue where, with QinQ packets with different Tag ethtypes
(0x88a8 vs 0x8100), we get an mbuf reporting two valid tags, but only
having had one tag stripped.
Fixes: cc9d0456b870 ("i40e: support double vlan stripping and insertion")
Fixes: 1e728b01120c ("net/iavf: rework Tx path")
Fixes: e0dcf94a0d7f ("net/ice: support VLAN ops")
Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Ciara Loftus <ciara.loftus@intel.com>
---
drivers/net/i40e/i40e_rxtx.c | 10 +++++++---
drivers/net/iavf/iavf_rxtx.c | 12 +++++++-----
drivers/net/ice/ice_rxtx.c | 10 +++++++---
3 files changed, 21 insertions(+), 11 deletions(-)
diff --git a/drivers/net/i40e/i40e_rxtx.c b/drivers/net/i40e/i40e_rxtx.c
index 55985e7e37..952ccf2083 100644
--- a/drivers/net/i40e/i40e_rxtx.c
+++ b/drivers/net/i40e/i40e_rxtx.c
@@ -128,9 +128,13 @@ i40e_rxd_to_vlan_tci(struct rte_mbuf *mb, volatile union i40e_rx_desc *rxdp)
#ifndef RTE_LIBRTE_I40E_16BYTE_RX_DESC
if (rte_le_to_cpu_16(rxdp->wb.qword2.ext_status) &
(1 << I40E_RX_DESC_EXT_STATUS_L2TAG2P_SHIFT)) {
- mb->ol_flags |= RTE_MBUF_F_RX_QINQ_STRIPPED | RTE_MBUF_F_RX_QINQ |
- RTE_MBUF_F_RX_VLAN_STRIPPED | RTE_MBUF_F_RX_VLAN;
- mb->vlan_tci_outer = mb->vlan_tci;
+ if ((mb->ol_flags & RTE_MBUF_F_RX_VLAN_STRIPPED) == 0) {
+ mb->ol_flags |= RTE_MBUF_F_RX_VLAN | RTE_MBUF_F_RX_VLAN_STRIPPED;
+ } else {
+ /* if two tags, move Tag1 to outer tag field */
+ mb->ol_flags |= RTE_MBUF_F_RX_QINQ_STRIPPED | RTE_MBUF_F_RX_QINQ;
+ mb->vlan_tci_outer = mb->vlan_tci;
+ }
mb->vlan_tci = rte_le_to_cpu_16(rxdp->wb.qword2.l2tag2_2);
PMD_RX_LOG(DEBUG, "Descriptor l2tag2_1: %u, l2tag2_2: %u",
rte_le_to_cpu_16(rxdp->wb.qword2.l2tag2_1),
diff --git a/drivers/net/iavf/iavf_rxtx.c b/drivers/net/iavf/iavf_rxtx.c
index 1f82d1cf3f..4418b620c4 100644
--- a/drivers/net/iavf/iavf_rxtx.c
+++ b/drivers/net/iavf/iavf_rxtx.c
@@ -1131,11 +1131,13 @@ iavf_flex_rxd_to_vlan_tci(struct rte_mbuf *mb,
#ifndef RTE_LIBRTE_IAVF_16BYTE_RX_DESC
if (rte_le_to_cpu_16(rxdp->wb.status_error1) &
(1 << IAVF_RX_FLEX_DESC_STATUS1_L2TAG2P_S)) {
- mb->ol_flags |= RTE_MBUF_F_RX_QINQ_STRIPPED |
- RTE_MBUF_F_RX_QINQ |
- RTE_MBUF_F_RX_VLAN_STRIPPED |
- RTE_MBUF_F_RX_VLAN;
- mb->vlan_tci_outer = mb->vlan_tci;
+ if ((mb->ol_flags & RTE_MBUF_F_RX_VLAN_STRIPPED) == 0) {
+ mb->ol_flags |= RTE_MBUF_F_RX_VLAN | RTE_MBUF_F_RX_VLAN_STRIPPED;
+ } else {
+ /* if two tags, move Tag1 to outer tag field */
+ mb->ol_flags |= RTE_MBUF_F_RX_QINQ_STRIPPED | RTE_MBUF_F_RX_QINQ;
+ mb->vlan_tci_outer = mb->vlan_tci;
+ }
mb->vlan_tci = rte_le_to_cpu_16(rxdp->wb.l2tag2_2nd);
PMD_RX_LOG(DEBUG, "Descriptor l2tag2_1: %u, l2tag2_2: %u",
rte_le_to_cpu_16(rxdp->wb.l2tag2_1st),
diff --git a/drivers/net/ice/ice_rxtx.c b/drivers/net/ice/ice_rxtx.c
index 0814c79bde..bfbce8f151 100644
--- a/drivers/net/ice/ice_rxtx.c
+++ b/drivers/net/ice/ice_rxtx.c
@@ -1658,9 +1658,13 @@ ice_rxd_to_vlan_tci(struct rte_mbuf *mb, volatile union ice_rx_flex_desc *rxdp)
#ifndef RTE_LIBRTE_ICE_16BYTE_RX_DESC
if (rte_le_to_cpu_16(rxdp->wb.status_error1) &
(1 << ICE_RX_FLEX_DESC_STATUS1_L2TAG2P_S)) {
- mb->ol_flags |= RTE_MBUF_F_RX_QINQ_STRIPPED | RTE_MBUF_F_RX_QINQ |
- RTE_MBUF_F_RX_VLAN_STRIPPED | RTE_MBUF_F_RX_VLAN;
- mb->vlan_tci_outer = mb->vlan_tci;
+ if ((mb->ol_flags & RTE_MBUF_F_RX_VLAN_STRIPPED) == 0) {
+ mb->ol_flags |= RTE_MBUF_F_RX_VLAN | RTE_MBUF_F_RX_VLAN_STRIPPED;
+ } else {
+ /* if two tags, move Tag1 to outer tag field */
+ mb->ol_flags |= RTE_MBUF_F_RX_QINQ_STRIPPED | RTE_MBUF_F_RX_QINQ;
+ mb->vlan_tci_outer = mb->vlan_tci;
+ }
mb->vlan_tci = rte_le_to_cpu_16(rxdp->wb.l2tag2_2nd);
PMD_RX_LOG(DEBUG, "Descriptor l2tag2_1: %u, l2tag2_2: %u",
rte_le_to_cpu_16(rxdp->wb.l2tag2_1st),
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:35.758189805 +0000
+++ 0024-net-intel-fix-assumption-about-tag-placement-order.patch 2025-10-27 15:54:34.791949450 +0000
@@ -1 +1 @@
-From 21168355589ea9edfcb2925f4952ecb05470f92f Mon Sep 17 00:00:00 2001
+From c093725ca89688e1dcf44c477f9c73e25be8ab37 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 21168355589ea9edfcb2925f4952ecb05470f92f ]
+
@@ -17 +18,0 @@
-Cc: stable@dpdk.org
@@ -22,3 +23,3 @@
- drivers/net/intel/i40e/i40e_rxtx.c | 10 +++++++---
- drivers/net/intel/iavf/iavf_rxtx.c | 12 +++++++-----
- drivers/net/intel/ice/ice_rxtx.c | 10 +++++++---
+ drivers/net/i40e/i40e_rxtx.c | 10 +++++++---
+ drivers/net/iavf/iavf_rxtx.c | 12 +++++++-----
+ drivers/net/ice/ice_rxtx.c | 10 +++++++---
@@ -27,6 +28,6 @@
-diff --git a/drivers/net/intel/i40e/i40e_rxtx.c b/drivers/net/intel/i40e/i40e_rxtx.c
-index b149a4c127..50b74149e3 100644
---- a/drivers/net/intel/i40e/i40e_rxtx.c
-+++ b/drivers/net/intel/i40e/i40e_rxtx.c
-@@ -128,9 +128,13 @@ i40e_rxd_to_vlan_tci(struct rte_mbuf *mb, volatile union ci_rx_desc *rxdp)
- #ifndef RTE_NET_INTEL_USE_16BYTE_DESC
+diff --git a/drivers/net/i40e/i40e_rxtx.c b/drivers/net/i40e/i40e_rxtx.c
+index 55985e7e37..952ccf2083 100644
+--- a/drivers/net/i40e/i40e_rxtx.c
++++ b/drivers/net/i40e/i40e_rxtx.c
+@@ -128,9 +128,13 @@ i40e_rxd_to_vlan_tci(struct rte_mbuf *mb, volatile union i40e_rx_desc *rxdp)
+ #ifndef RTE_LIBRTE_I40E_16BYTE_RX_DESC
@@ -48,6 +49,6 @@
-diff --git a/drivers/net/intel/iavf/iavf_rxtx.c b/drivers/net/intel/iavf/iavf_rxtx.c
-index 50adc7ea1a..982e16f929 100644
---- a/drivers/net/intel/iavf/iavf_rxtx.c
-+++ b/drivers/net/intel/iavf/iavf_rxtx.c
-@@ -1184,11 +1184,13 @@ iavf_flex_rxd_to_vlan_tci(struct rte_mbuf *mb,
-
+diff --git a/drivers/net/iavf/iavf_rxtx.c b/drivers/net/iavf/iavf_rxtx.c
+index 1f82d1cf3f..4418b620c4 100644
+--- a/drivers/net/iavf/iavf_rxtx.c
++++ b/drivers/net/iavf/iavf_rxtx.c
+@@ -1131,11 +1131,13 @@ iavf_flex_rxd_to_vlan_tci(struct rte_mbuf *mb,
+ #ifndef RTE_LIBRTE_IAVF_16BYTE_RX_DESC
@@ -71,6 +72,6 @@
-diff --git a/drivers/net/intel/ice/ice_rxtx.c b/drivers/net/intel/ice/ice_rxtx.c
-index 5e72c231f7..aa8b838955 100644
---- a/drivers/net/intel/ice/ice_rxtx.c
-+++ b/drivers/net/intel/ice/ice_rxtx.c
-@@ -1835,9 +1835,13 @@ ice_rxd_to_vlan_tci(struct rte_mbuf *mb, volatile union ci_rx_flex_desc *rxdp)
- #ifndef RTE_NET_INTEL_USE_16BYTE_DESC
+diff --git a/drivers/net/ice/ice_rxtx.c b/drivers/net/ice/ice_rxtx.c
+index 0814c79bde..bfbce8f151 100644
+--- a/drivers/net/ice/ice_rxtx.c
++++ b/drivers/net/ice/ice_rxtx.c
+@@ -1658,9 +1658,13 @@ ice_rxd_to_vlan_tci(struct rte_mbuf *mb, volatile union ice_rx_flex_desc *rxdp)
+ #ifndef RTE_LIBRTE_ICE_16BYTE_RX_DESC
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/ice/base: fix adding special words' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (22 preceding siblings ...)
2025-10-27 16:19 ` patch 'net/intel: fix assumption about tag placement order' " luca.boccassi
@ 2025-10-27 16:19 ` luca.boccassi
2025-10-27 16:19 ` patch 'net/ice/base: fix memory leak in HW profile handling' " luca.boccassi
` (53 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:19 UTC (permalink / raw)
To: Shaiq Wani; +Cc: Jeff Shaw, Anatoly Burakov, Bruce Richardson, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/7d2b27c099024bb4ba0299149fe47fbe6cfa8fa1
Thanks.
Luca Boccassi
---
From 7d2b27c099024bb4ba0299149fe47fbe6cfa8fa1 Mon Sep 17 00:00:00 2001
From: Shaiq Wani <shaiq.wani@intel.com>
Date: Tue, 2 Sep 2025 18:26:52 +0100
Subject: [PATCH] net/ice/base: fix adding special words
[ upstream commit e563992fba809bcae90b4734f555e354024ec564 ]
The function ice_add_special_words() is meant to add special words (such
as traffic direction) to the rule. The function that
interprets/translates these additional words is ice_get_sw_fv_list().
However, the ice_get_sw_fv_list() is called *before*
ice_add_special_words(), so the "special" words weren't added at that
point yet, hence they're not translated. This results in the driver
ignoring whatever special words that were added. The fix is to call
ice_get_sw_fv_list() *after* ice_add_special_words().
Fixes: ed3066a3b1b0 ("net/ice/base: refactor DDP code")
Signed-off-by: Jeff Shaw <jeffrey.b.shaw@intel.com>
Signed-off-by: Shaiq Wani <shaiq.wani@intel.com>
Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
---
drivers/net/ice/base/ice_switch.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/drivers/net/ice/base/ice_switch.c b/drivers/net/ice/base/ice_switch.c
index 89270a477d..0ab3abe276 100644
--- a/drivers/net/ice/base/ice_switch.c
+++ b/drivers/net/ice/base/ice_switch.c
@@ -7868,10 +7868,6 @@ ice_add_adv_recipe(struct ice_hw *hw, struct ice_adv_lkup_elem *lkups,
*/
ice_get_compat_fv_bitmap(hw, rinfo, fv_bitmap);
- status = ice_get_fv(hw, lkup_exts, fv_bitmap, &rm->fv_list);
- if (status)
- goto err_unroll;
-
/* Create any special protocol/offset pairs, such as looking at tunnel
* bits by extracting metadata
*/
@@ -7879,6 +7875,10 @@ ice_add_adv_recipe(struct ice_hw *hw, struct ice_adv_lkup_elem *lkups,
if (status)
goto err_free_lkup_exts;
+ status = ice_get_fv(hw, lkup_exts, fv_bitmap, &rm->fv_list);
+ if (status)
+ goto err_unroll;
+
/* Group match words into recipes using preferred recipe grouping
* criteria.
*/
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:35.797525145 +0000
+++ 0025-net-ice-base-fix-adding-special-words.patch 2025-10-27 15:54:34.795949549 +0000
@@ -1 +1 @@
-From e563992fba809bcae90b4734f555e354024ec564 Mon Sep 17 00:00:00 2001
+From 7d2b27c099024bb4ba0299149fe47fbe6cfa8fa1 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit e563992fba809bcae90b4734f555e354024ec564 ]
+
@@ -17 +18,0 @@
-Cc: stable@dpdk.org
@@ -24 +25 @@
- drivers/net/intel/ice/base/ice_switch.c | 8 ++++----
+ drivers/net/ice/base/ice_switch.c | 8 ++++----
@@ -27,5 +28,5 @@
-diff --git a/drivers/net/intel/ice/base/ice_switch.c b/drivers/net/intel/ice/base/ice_switch.c
-index 54cc2e1c07..f16bec044c 100644
---- a/drivers/net/intel/ice/base/ice_switch.c
-+++ b/drivers/net/intel/ice/base/ice_switch.c
-@@ -8287,10 +8287,6 @@ ice_add_adv_recipe(struct ice_hw *hw, struct ice_adv_lkup_elem *lkups,
+diff --git a/drivers/net/ice/base/ice_switch.c b/drivers/net/ice/base/ice_switch.c
+index 89270a477d..0ab3abe276 100644
+--- a/drivers/net/ice/base/ice_switch.c
++++ b/drivers/net/ice/base/ice_switch.c
+@@ -7868,10 +7868,6 @@ ice_add_adv_recipe(struct ice_hw *hw, struct ice_adv_lkup_elem *lkups,
@@ -35 +36 @@
-- status = ice_get_sw_fv_list(hw, lkup_exts, fv_bitmap, &rm->fv_list);
+- status = ice_get_fv(hw, lkup_exts, fv_bitmap, &rm->fv_list);
@@ -42 +43 @@
-@@ -8298,6 +8294,10 @@ ice_add_adv_recipe(struct ice_hw *hw, struct ice_adv_lkup_elem *lkups,
+@@ -7879,6 +7875,10 @@ ice_add_adv_recipe(struct ice_hw *hw, struct ice_adv_lkup_elem *lkups,
@@ -46 +47 @@
-+ status = ice_get_sw_fv_list(hw, lkup_exts, fv_bitmap, &rm->fv_list);
++ status = ice_get_fv(hw, lkup_exts, fv_bitmap, &rm->fv_list);
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/ice/base: fix memory leak in HW profile handling' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (23 preceding siblings ...)
2025-10-27 16:19 ` patch 'net/ice/base: fix adding special words' " luca.boccassi
@ 2025-10-27 16:19 ` luca.boccassi
2025-10-27 16:19 ` patch 'net/ice/base: fix memory leak in recipe " luca.boccassi
` (52 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:19 UTC (permalink / raw)
To: Jacob Keller; +Cc: Anatoly Burakov, Bruce Richardson, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/4529cc81367a6de786989fd71963deb9734ed782
Thanks.
Luca Boccassi
---
From 4529cc81367a6de786989fd71963deb9734ed782 Mon Sep 17 00:00:00 2001
From: Jacob Keller <jacob.e.keller@intel.com>
Date: Tue, 2 Sep 2025 18:26:53 +0100
Subject: [PATCH] net/ice/base: fix memory leak in HW profile handling
[ upstream commit bce22ae3a0e61134b5fd19498bd849d1693dadb4 ]
The ice_flow_set_hw_prof() function allocates a params structure with
ice_malloc. It uses this structure to hold some data temporarily while
processing the hardware profile to set.
Static analysis indicated that this memory is not released. Fix this
function to free the memory upon exit.
Fixes: 8ebb93942b2c ("net/ice/base: add function to set HW profile for raw flow")
Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
---
drivers/net/ice/base/ice_flow.c | 4 ----
1 file changed, 4 deletions(-)
diff --git a/drivers/net/ice/base/ice_flow.c b/drivers/net/ice/base/ice_flow.c
index 3483a5ed4f..2b06a70cab 100644
--- a/drivers/net/ice/base/ice_flow.c
+++ b/drivers/net/ice/base/ice_flow.c
@@ -2629,10 +2629,6 @@ ice_flow_set_hw_prof(struct ice_hw *hw, u16 dest_vsi_handle,
status = ice_flow_assoc_hw_prof(hw, blk, dest_vsi_handle,
fdir_vsi_handle, id);
- if (status)
- goto free_params;
-
- return ICE_SUCCESS;
free_params:
ice_free(hw, params);
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:35.834110051 +0000
+++ 0026-net-ice-base-fix-memory-leak-in-HW-profile-handling.patch 2025-10-27 15:54:34.799949649 +0000
@@ -1 +1 @@
-From bce22ae3a0e61134b5fd19498bd849d1693dadb4 Mon Sep 17 00:00:00 2001
+From 4529cc81367a6de786989fd71963deb9734ed782 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit bce22ae3a0e61134b5fd19498bd849d1693dadb4 ]
+
@@ -14 +15,0 @@
-Cc: stable@dpdk.org
@@ -20 +21 @@
- drivers/net/intel/ice/base/ice_flow.c | 4 ----
+ drivers/net/ice/base/ice_flow.c | 4 ----
@@ -23,5 +24,5 @@
-diff --git a/drivers/net/intel/ice/base/ice_flow.c b/drivers/net/intel/ice/base/ice_flow.c
-index cdc9ee26c5..7b0ecd54df 100644
---- a/drivers/net/intel/ice/base/ice_flow.c
-+++ b/drivers/net/intel/ice/base/ice_flow.c
-@@ -2632,10 +2632,6 @@ ice_flow_set_hw_prof(struct ice_hw *hw, u16 dest_vsi_handle,
+diff --git a/drivers/net/ice/base/ice_flow.c b/drivers/net/ice/base/ice_flow.c
+index 3483a5ed4f..2b06a70cab 100644
+--- a/drivers/net/ice/base/ice_flow.c
++++ b/drivers/net/ice/base/ice_flow.c
+@@ -2629,10 +2629,6 @@ ice_flow_set_hw_prof(struct ice_hw *hw, u16 dest_vsi_handle,
@@ -34 +35 @@
-- return 0;
+- return ICE_SUCCESS;
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/ice/base: fix memory leak in recipe handling' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (24 preceding siblings ...)
2025-10-27 16:19 ` patch 'net/ice/base: fix memory leak in HW profile handling' " luca.boccassi
@ 2025-10-27 16:19 ` luca.boccassi
2025-10-27 16:19 ` patch 'eal: fix DMA mask validation with IOVA mode option' " luca.boccassi
` (51 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:19 UTC (permalink / raw)
To: Pandi Kumar Maharajan; +Cc: Anatoly Burakov, Bruce Richardson, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/a7ddf77e1a325caec25f01105343048f4b0afda4
Thanks.
Luca Boccassi
---
From a7ddf77e1a325caec25f01105343048f4b0afda4 Mon Sep 17 00:00:00 2001
From: Pandi Kumar Maharajan <pandi.maharajan@intel.com>
Date: Tue, 2 Sep 2025 18:26:54 +0100
Subject: [PATCH] net/ice/base: fix memory leak in recipe handling
[ upstream commit baf3de23be970346378d5159a81782bfb6eb927b ]
Advanced filter operations (apply/remove GENEVE/VXLAN filters) trigger
the call chain: ice_add_adv_rule()/ice_rem_adv_rule() -> ice_find_recp()
-> ice_get_recp_frm_fw(). Each call to ice_get_recp_frm_fw() creates new
linked list entries for SW recipe tracking without cleaning up previous
entries for the same recipe ID. The linked list then continuously grows
with each filter add/remove operation, leading to excessive heap usage
over time.
Fix the memory leak by adding logic to remove the duplicate entries
before adding new ones for the same recipe ID.
Fixes: fed0c5ca5f19 ("net/ice/base: support programming a new switch recipe")
Signed-off-by: Pandi Kumar Maharajan <pandi.maharajan@intel.com>
Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
---
drivers/net/ice/base/ice_switch.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/drivers/net/ice/base/ice_switch.c b/drivers/net/ice/base/ice_switch.c
index 0ab3abe276..f85f03fba1 100644
--- a/drivers/net/ice/base/ice_switch.c
+++ b/drivers/net/ice/base/ice_switch.c
@@ -2209,6 +2209,7 @@ ice_get_recp_frm_fw(struct ice_hw *hw, struct ice_sw_recipe *recps, u8 rid,
bool *refresh_required)
{
ice_declare_bitmap(result_bm, ICE_MAX_FV_WORDS);
+ struct ice_recp_grp_entry *rg, *tmprg_entry;
struct ice_aqc_recipe_data_elem *tmp;
u16 num_recps = ICE_MAX_NUM_RECIPES;
struct ice_prot_lkup_ext *lkup_exts;
@@ -2250,6 +2251,15 @@ ice_get_recp_frm_fw(struct ice_hw *hw, struct ice_sw_recipe *recps, u8 rid,
*/
lkup_exts = &recps[rid].lkup_exts;
+ /* Remove duplicate entries */
+ LIST_FOR_EACH_ENTRY_SAFE(rg, tmprg_entry, &recps[rid].rg_list,
+ ice_recp_grp_entry, l_entry) {
+ if (rg->rid == rid) {
+ LIST_DEL(&rg->l_entry);
+ ice_free(hw, rg);
+ }
+ }
+
for (sub_recps = 0; sub_recps < num_recps; sub_recps++) {
struct ice_aqc_recipe_data_elem root_bufs = tmp[sub_recps];
struct ice_recp_grp_entry *rg_entry;
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:35.871149831 +0000
+++ 0027-net-ice-base-fix-memory-leak-in-recipe-handling.patch 2025-10-27 15:54:34.803949751 +0000
@@ -1 +1 @@
-From baf3de23be970346378d5159a81782bfb6eb927b Mon Sep 17 00:00:00 2001
+From a7ddf77e1a325caec25f01105343048f4b0afda4 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit baf3de23be970346378d5159a81782bfb6eb927b ]
+
@@ -18 +19,0 @@
-Cc: stable@dpdk.org
@@ -24 +25 @@
- drivers/net/intel/ice/base/ice_switch.c | 10 ++++++++++
+ drivers/net/ice/base/ice_switch.c | 10 ++++++++++
@@ -27,5 +28,5 @@
-diff --git a/drivers/net/intel/ice/base/ice_switch.c b/drivers/net/intel/ice/base/ice_switch.c
-index f16bec044c..628473f100 100644
---- a/drivers/net/intel/ice/base/ice_switch.c
-+++ b/drivers/net/intel/ice/base/ice_switch.c
-@@ -2435,6 +2435,7 @@ ice_get_recp_frm_fw(struct ice_hw *hw, struct ice_sw_recipe *recps, u8 rid,
+diff --git a/drivers/net/ice/base/ice_switch.c b/drivers/net/ice/base/ice_switch.c
+index 0ab3abe276..f85f03fba1 100644
+--- a/drivers/net/ice/base/ice_switch.c
++++ b/drivers/net/ice/base/ice_switch.c
+@@ -2209,6 +2209,7 @@ ice_get_recp_frm_fw(struct ice_hw *hw, struct ice_sw_recipe *recps, u8 rid,
@@ -39 +40 @@
-@@ -2481,6 +2482,15 @@ ice_get_recp_frm_fw(struct ice_hw *hw, struct ice_sw_recipe *recps, u8 rid,
+@@ -2250,6 +2251,15 @@ ice_get_recp_frm_fw(struct ice_hw *hw, struct ice_sw_recipe *recps, u8 rid,
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'eal: fix DMA mask validation with IOVA mode option' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (25 preceding siblings ...)
2025-10-27 16:19 ` patch 'net/ice/base: fix memory leak in recipe " luca.boccassi
@ 2025-10-27 16:19 ` luca.boccassi
2025-10-27 16:19 ` patch 'eal: fix MP socket cleanup' " luca.boccassi
` (50 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:19 UTC (permalink / raw)
To: Shani Peretz; +Cc: Anatoly Burakov, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/0980930c32a05807f48c2cace72e5e2e5dabf7a7
Thanks.
Luca Boccassi
---
From 0980930c32a05807f48c2cace72e5e2e5dabf7a7 Mon Sep 17 00:00:00 2001
From: Shani Peretz <shperetz@nvidia.com>
Date: Thu, 18 Sep 2025 09:47:54 +0300
Subject: [PATCH] eal: fix DMA mask validation with IOVA mode option
[ upstream commit e37ff4ef296f33e4c3a0e9306241c4f8fcae5061 ]
When --iova-mode is explicitly specified in command line, DMA mask
constraints were not being validated, leading to potential runtime
failures when device DMA capabilities are exceeded.
The issue occurred because rte_bus_get_iommu_class() was only called
during IOVA mode auto-detection, but this function has the important
side effect of triggering DMA mask detection (e.g., Intel IOMMU
address width checking via pci_device_iommu_support_va()).
This created an inconsistency, when choosing explicit mode,
the DMA checks are bypassed, but when choosing auto-detection mode,
the constraints are checked and enforced.
The fix moves rte_bus_get_iommu_class() outside the conditional logic
to ensure it's always called during EAL initialization.
Fixes: 4374ebc24bc1 ("malloc: modify error message for DMA mask check")
Signed-off-by: Shani Peretz <shperetz@nvidia.com>
Acked-by: Anatoly Burakov <anatoly.burakov@intel.com>
---
lib/eal/freebsd/eal.c | 6 +++++-
lib/eal/linux/eal.c | 5 ++++-
lib/eal/windows/eal.c | 5 ++++-
3 files changed, 13 insertions(+), 3 deletions(-)
diff --git a/lib/eal/freebsd/eal.c b/lib/eal/freebsd/eal.c
index 008a6c68e4..aa9f85c647 100644
--- a/lib/eal/freebsd/eal.c
+++ b/lib/eal/freebsd/eal.c
@@ -692,6 +692,10 @@ rte_eal_init(int argc, char **argv)
* with a message describing the cause.
*/
has_phys_addr = internal_conf->no_hugetlbfs == 0;
+
+ /* Always call rte_bus_get_iommu_class() to trigger DMA mask detection and validation */
+ enum rte_iova_mode bus_iova_mode = rte_bus_get_iommu_class();
+
iova_mode = internal_conf->iova_mode;
if (iova_mode == RTE_IOVA_PA && !has_phys_addr) {
rte_eal_init_alert("Cannot use IOVA as 'PA' since physical addresses are not available");
@@ -702,7 +706,7 @@ rte_eal_init(int argc, char **argv)
RTE_LOG(DEBUG, EAL, "Specific IOVA mode is not requested, autodetecting\n");
if (has_phys_addr) {
RTE_LOG(DEBUG, EAL, "Selecting IOVA mode according to bus requests\n");
- iova_mode = rte_bus_get_iommu_class();
+ iova_mode = bus_iova_mode;
if (iova_mode == RTE_IOVA_DC)
iova_mode = RTE_IOVA_PA;
} else {
diff --git a/lib/eal/linux/eal.c b/lib/eal/linux/eal.c
index f6ac970ed9..9f9a03bcf7 100644
--- a/lib/eal/linux/eal.c
+++ b/lib/eal/linux/eal.c
@@ -1065,10 +1065,13 @@ rte_eal_init(int argc, char **argv)
phys_addrs = rte_eal_using_phys_addrs() != 0;
+ /* Always call rte_bus_get_iommu_class() to trigger DMA mask detection and validation */
+ enum rte_iova_mode bus_iova_mode = rte_bus_get_iommu_class();
+
/* if no EAL option "--iova-mode=<pa|va>", use bus IOVA scheme */
if (internal_conf->iova_mode == RTE_IOVA_DC) {
/* autodetect the IOVA mapping mode */
- enum rte_iova_mode iova_mode = rte_bus_get_iommu_class();
+ enum rte_iova_mode iova_mode = bus_iova_mode;
if (iova_mode == RTE_IOVA_DC) {
RTE_LOG(DEBUG, EAL, "Buses did not request a specific IOVA mode.\n");
diff --git a/lib/eal/windows/eal.c b/lib/eal/windows/eal.c
index 56fadc7afe..3a459172f9 100644
--- a/lib/eal/windows/eal.c
+++ b/lib/eal/windows/eal.c
@@ -359,6 +359,9 @@ rte_eal_init(int argc, char **argv)
has_phys_addr = false;
}
+ /* Always call rte_bus_get_iommu_class() to trigger DMA mask detection and validation */
+ enum rte_iova_mode bus_iova_mode = rte_bus_get_iommu_class();
+
iova_mode = internal_conf->iova_mode;
if (iova_mode == RTE_IOVA_PA && !has_phys_addr) {
rte_eal_init_alert("Cannot use IOVA as 'PA' since physical addresses are not available");
@@ -369,7 +372,7 @@ rte_eal_init(int argc, char **argv)
RTE_LOG(DEBUG, EAL, "Specific IOVA mode is not requested, autodetecting\n");
if (has_phys_addr) {
RTE_LOG(DEBUG, EAL, "Selecting IOVA mode according to bus requests\n");
- iova_mode = rte_bus_get_iommu_class();
+ iova_mode = bus_iova_mode;
if (iova_mode == RTE_IOVA_DC)
iova_mode = RTE_IOVA_PA;
} else {
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:35.909480984 +0000
+++ 0028-eal-fix-DMA-mask-validation-with-IOVA-mode-option.patch 2025-10-27 15:54:34.803949751 +0000
@@ -1 +1 @@
-From e37ff4ef296f33e4c3a0e9306241c4f8fcae5061 Mon Sep 17 00:00:00 2001
+From 0980930c32a05807f48c2cace72e5e2e5dabf7a7 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit e37ff4ef296f33e4c3a0e9306241c4f8fcae5061 ]
+
@@ -23 +24,0 @@
-Cc: stable@dpdk.org
@@ -34 +35 @@
-index c1ab8d86d2..0f957919d3 100644
+index 008a6c68e4..aa9f85c647 100644
@@ -37 +38 @@
-@@ -670,12 +670,16 @@ rte_eal_init(int argc, char **argv)
+@@ -692,6 +692,10 @@ rte_eal_init(int argc, char **argv)
@@ -46,2 +47,4 @@
- if (iova_mode == RTE_IOVA_DC) {
- EAL_LOG(DEBUG, "Specific IOVA mode is not requested, autodetecting");
+ if (iova_mode == RTE_IOVA_PA && !has_phys_addr) {
+ rte_eal_init_alert("Cannot use IOVA as 'PA' since physical addresses are not available");
+@@ -702,7 +706,7 @@ rte_eal_init(int argc, char **argv)
+ RTE_LOG(DEBUG, EAL, "Specific IOVA mode is not requested, autodetecting\n");
@@ -49 +52 @@
- EAL_LOG(DEBUG, "Selecting IOVA mode according to bus requests");
+ RTE_LOG(DEBUG, EAL, "Selecting IOVA mode according to bus requests\n");
@@ -52,3 +55,3 @@
- if (iova_mode == RTE_IOVA_DC) {
- if (!RTE_IOVA_IN_MBUF) {
- iova_mode = RTE_IOVA_VA;
+ if (iova_mode == RTE_IOVA_DC)
+ iova_mode = RTE_IOVA_PA;
+ } else {
@@ -56 +59 @@
-index 52efb8626b..3a0c9c9db6 100644
+index f6ac970ed9..9f9a03bcf7 100644
@@ -59 +62 @@
-@@ -1042,10 +1042,13 @@ rte_eal_init(int argc, char **argv)
+@@ -1065,10 +1065,13 @@ rte_eal_init(int argc, char **argv)
@@ -73 +76 @@
- EAL_LOG(DEBUG, "Buses did not request a specific IOVA mode.");
+ RTE_LOG(DEBUG, EAL, "Buses did not request a specific IOVA mode.\n");
@@ -75 +78 @@
-index 4f0a164d9b..2502ec3c3d 100644
+index 56fadc7afe..3a459172f9 100644
@@ -78 +81 @@
-@@ -348,12 +348,15 @@ rte_eal_init(int argc, char **argv)
+@@ -359,6 +359,9 @@ rte_eal_init(int argc, char **argv)
@@ -86,2 +89,4 @@
- if (iova_mode == RTE_IOVA_DC) {
- EAL_LOG(DEBUG, "Specific IOVA mode is not requested, autodetecting");
+ if (iova_mode == RTE_IOVA_PA && !has_phys_addr) {
+ rte_eal_init_alert("Cannot use IOVA as 'PA' since physical addresses are not available");
+@@ -369,7 +372,7 @@ rte_eal_init(int argc, char **argv)
+ RTE_LOG(DEBUG, EAL, "Specific IOVA mode is not requested, autodetecting\n");
@@ -89 +94 @@
- EAL_LOG(DEBUG, "Selecting IOVA mode according to bus requests");
+ RTE_LOG(DEBUG, EAL, "Selecting IOVA mode according to bus requests\n");
@@ -92,3 +97,3 @@
- if (iova_mode == RTE_IOVA_DC) {
- if (!RTE_IOVA_IN_MBUF) {
- iova_mode = RTE_IOVA_VA;
+ if (iova_mode == RTE_IOVA_DC)
+ iova_mode = RTE_IOVA_PA;
+ } else {
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'eal: fix MP socket cleanup' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (26 preceding siblings ...)
2025-10-27 16:19 ` patch 'eal: fix DMA mask validation with IOVA mode option' " luca.boccassi
@ 2025-10-27 16:19 ` luca.boccassi
2025-10-27 16:19 ` patch 'crypto/ipsec_mb: fix QP release in secondary' " luca.boccassi
` (49 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:19 UTC (permalink / raw)
To: Yang Ming; +Cc: Anatoly Burakov, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/039a4ac228e9a844bcc8bf3e078684f04078e3e5
Thanks.
Luca Boccassi
---
From 039a4ac228e9a844bcc8bf3e078684f04078e3e5 Mon Sep 17 00:00:00 2001
From: Yang Ming <mosesyyoung@gmail.com>
Date: Sat, 19 Jul 2025 23:32:25 +0800
Subject: [PATCH] eal: fix MP socket cleanup
[ upstream commit 4bc53f8f0d64ceba6c4077aa31229f1e38e0d30f ]
The secondary process should not close socket file for MP
channel before performing MP request synchronization.
This prevents error logs when the secondary process exits
without any operation on the crypto device while the primary
process starts the device.
Case situation:
eal_bus_cleanup has been added in rte_eal_cleanup. But for the
secondary process, rte_eal_cleanup firstly performs
rte_mp_channel_cleanup, which closes socket file for the MP
channel, making mp_fd invalid. Subsequently, eal_bus_cleanup
triggers vdev_cleanup, which calls mp_request_sync to send a
message via the MP channel. Since mp_fd is invalid, error logs
occur.
Error logs occur as below when the secondary process exit:
EAL: failed to send to (/tmp/dpdk/l2hicu/mp_socket) due to Bad
file descriptor
EAL: Fail to send request /tmp/dpdk/l2hicu/mp_socket:
ipsec_mb_mp_msg
USER1: Create MR request to primary process failed.
Function call trace:
1. rte_eal_cleanup->rte_mp_channel_cleanup->close_socket_fd
2. rte_eal_cleanup->eal_bus_cleanup->vdev_cleanup->
rte_vdev_driver->ipsec_mb_remove->ipsec_mb_qp_release->
ipsec_mb_secondary_qp_op->rte_mp_request_sync->mp_request_sync->
send_msg->sendmsg(mp_fd, &msgh, 0);
Fixes: 1cab1a40ea9b ("bus: cleanup devices on shutdown")
Signed-off-by: Yang Ming <mosesyyoung@gmail.com>
Acked-by: Anatoly Burakov <anatoly.burakov@intel.com>
---
lib/eal/freebsd/eal.c | 2 +-
lib/eal/linux/eal.c | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/lib/eal/freebsd/eal.c b/lib/eal/freebsd/eal.c
index aa9f85c647..3da8dec76a 100644
--- a/lib/eal/freebsd/eal.c
+++ b/lib/eal/freebsd/eal.c
@@ -906,8 +906,8 @@ rte_eal_cleanup(void)
struct internal_config *internal_conf =
eal_get_internal_configuration();
rte_service_finalize();
- rte_mp_channel_cleanup();
eal_bus_cleanup();
+ rte_mp_channel_cleanup();
rte_eal_alarm_cleanup();
rte_trace_save();
eal_trace_fini();
diff --git a/lib/eal/linux/eal.c b/lib/eal/linux/eal.c
index 9f9a03bcf7..de30e521bd 100644
--- a/lib/eal/linux/eal.c
+++ b/lib/eal/linux/eal.c
@@ -1378,11 +1378,11 @@ rte_eal_cleanup(void)
rte_memseg_walk(mark_freeable, NULL);
rte_service_finalize();
+ eal_bus_cleanup();
#ifdef VFIO_PRESENT
vfio_mp_sync_cleanup();
#endif
rte_mp_channel_cleanup();
- eal_bus_cleanup();
rte_eal_alarm_cleanup();
rte_trace_save();
eal_trace_fini();
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:35.944878334 +0000
+++ 0029-eal-fix-MP-socket-cleanup.patch 2025-10-27 15:54:34.803949751 +0000
@@ -1 +1 @@
-From 4bc53f8f0d64ceba6c4077aa31229f1e38e0d30f Mon Sep 17 00:00:00 2001
+From 039a4ac228e9a844bcc8bf3e078684f04078e3e5 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 4bc53f8f0d64ceba6c4077aa31229f1e38e0d30f ]
+
@@ -36 +37,0 @@
-Cc: stable@dpdk.org
@@ -46 +47 @@
-index 0f957919d3..1804b4cfd2 100644
+index aa9f85c647..3da8dec76a 100644
@@ -49 +50 @@
-@@ -909,8 +909,8 @@ rte_eal_cleanup(void)
+@@ -906,8 +906,8 @@ rte_eal_cleanup(void)
@@ -60 +61 @@
-index 3a0c9c9db6..caf22033d0 100644
+index 9f9a03bcf7..de30e521bd 100644
@@ -63 +64 @@
-@@ -1333,11 +1333,11 @@ rte_eal_cleanup(void)
+@@ -1378,11 +1378,11 @@ rte_eal_cleanup(void)
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'crypto/ipsec_mb: fix QP release in secondary' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (27 preceding siblings ...)
2025-10-27 16:19 ` patch 'eal: fix MP socket cleanup' " luca.boccassi
@ 2025-10-27 16:19 ` luca.boccassi
2025-10-27 16:19 ` patch 'efd: fix AVX2 support' " luca.boccassi
` (48 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:19 UTC (permalink / raw)
To: Yang Ming; +Cc: Anatoly Burakov, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/56657366e67ba64b46ed9f65a9db5da54e2c0506
the
Thanks.
Luca Boccassi
---
From 56657366e67ba64b46ed9f65a9db5da54e2c0506 Mon Sep 17 00:00:00 2001
From: Yang Ming <mosesyyoung@gmail.com>
Date: Sat, 19 Jul 2025 23:32:26 +0800
Subject: [PATCH] crypto/ipsec_mb: fix QP release in secondary
[ upstream commit 0e03ab647d07cd985a7cac36cefff5195cc3a07d ]
When a secondary process tries to release a queue pair (QP) that
does not belong to it, error logs occur:
CRYPTODEV: ipsec_mb_ipc_request() line 373: Unable to release
qp_id=0
EAL: Message data is too long
EAL: Fail to handle message: ipsec_mb_mp_msg
EAL: Fail to recv reply for request /tmp/dpdk/l2hi/mp_socket:
ipsec_mb_mp_msg
From the code path, cryptodev->data is allocated in the primary
via rte_cryptodev_data_alloc() (inside
ipsec_mb_create-->rte_cryptodev_pmd_create
-->rte_cryptodev_pmd_allocate-->rte_cryptodev_data_alloc).
This memory is placed in a shared memzone
(rte_cryptodev_data_%u), so both primary and secondary processes
reference the same cryptodev->data, including nb_queue_pairs and
queue_pairs[].
As a result, when the secondary process exits, ipsec_mb_remove()
is called (inside
rte_eal_cleanup-->eal_bus_cleanup-->vdev_cleanup
-->rte_vdev_driver-->ipsec_mb_remove-->ipsec_mb_qp_release
-->ipsec_mb_secondary_qp_op) and it loops through all queue
pairs using:
for (qp_id = 0; qp_id < cryptodev->data->nb_queue_pairs; qp_id++)
ipsec_mb_qp_release(cryptodev, qp_id);
This causes the secondary to attempt releasing queue pairs it
doesn't own, triggering the error logs mentioned above.
This patch ensures that a secondary process only frees a QP if
it actually owns it, preventing conflicts and resolving the
issue.
Fixes: b35848bc01f6 ("crypto/ipsec_mb: add multi-process IPC request handler")
Signed-off-by: Yang Ming <mosesyyoung@gmail.com>
Acked-by: Anatoly Burakov <anatoly.burakov@intel.com>
---
drivers/crypto/ipsec_mb/ipsec_mb_ops.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/drivers/crypto/ipsec_mb/ipsec_mb_ops.c b/drivers/crypto/ipsec_mb/ipsec_mb_ops.c
index 2a5599b7d8..ccfda2048a 100644
--- a/drivers/crypto/ipsec_mb/ipsec_mb_ops.c
+++ b/drivers/crypto/ipsec_mb/ipsec_mb_ops.c
@@ -139,6 +139,7 @@ int
ipsec_mb_qp_release(struct rte_cryptodev *dev, uint16_t qp_id)
{
struct ipsec_mb_qp *qp = dev->data->queue_pairs[qp_id];
+ uint16_t process_id = (uint16_t)getpid();
if (!qp)
return 0;
@@ -158,8 +159,10 @@ ipsec_mb_qp_release(struct rte_cryptodev *dev, uint16_t qp_id)
rte_free(qp);
dev->data->queue_pairs[qp_id] = NULL;
} else { /* secondary process */
- return ipsec_mb_secondary_qp_op(dev->data->dev_id, qp_id,
- NULL, 0, RTE_IPSEC_MB_MP_REQ_QP_FREE);
+ if (qp->qp_used_by_pid == process_id)
+ return ipsec_mb_secondary_qp_op(dev->data->dev_id,
+ qp_id, NULL, 0,
+ RTE_IPSEC_MB_MP_REQ_QP_FREE);
}
return 0;
}
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:35.979605120 +0000
+++ 0030-crypto-ipsec_mb-fix-QP-release-in-secondary.patch 2025-10-27 15:54:34.803949751 +0000
@@ -1 +1 @@
-From 0e03ab647d07cd985a7cac36cefff5195cc3a07d Mon Sep 17 00:00:00 2001
+From 56657366e67ba64b46ed9f65a9db5da54e2c0506 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 0e03ab647d07cd985a7cac36cefff5195cc3a07d ]
+
@@ -41 +42,0 @@
-Cc: stable@dpdk.org
@@ -50 +51 @@
-index 910efb1a97..50ee140ccd 100644
+index 2a5599b7d8..ccfda2048a 100644
@@ -53 +54 @@
-@@ -138,6 +138,7 @@ int
+@@ -139,6 +139,7 @@ int
@@ -61 +62 @@
-@@ -152,8 +153,10 @@ ipsec_mb_qp_release(struct rte_cryptodev *dev, uint16_t qp_id)
+@@ -158,8 +159,10 @@ ipsec_mb_qp_release(struct rte_cryptodev *dev, uint16_t qp_id)
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'efd: fix AVX2 support' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (28 preceding siblings ...)
2025-10-27 16:19 ` patch 'crypto/ipsec_mb: fix QP release in secondary' " luca.boccassi
@ 2025-10-27 16:19 ` luca.boccassi
2025-10-27 16:19 ` patch 'common/cnxk: fix async event handling' " luca.boccassi
` (47 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:19 UTC (permalink / raw)
To: Thomas Monjalon; +Cc: Bruce Richardson, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/3828456c69edc5e7de5ac5744098c1afbf14977f
Thanks.
Luca Boccassi
---
From 3828456c69edc5e7de5ac5744098c1afbf14977f Mon Sep 17 00:00:00 2001
From: Thomas Monjalon <thomas@monjalon.net>
Date: Thu, 18 Sep 2025 08:36:14 +0200
Subject: [PATCH] efd: fix AVX2 support
[ upstream commit c367b9a07c55025eabe1dd6903f4b0f5c4c5d362 ]
When switching to Meson build, the compilation check on CC_SUPPORT_AVX2
became obsolete, thus the case EFD_LOOKUP_AVX2 became dead.
The function efd_lookup_internal_avx2() was never called,
and its header include rte_efd_x86.h has been removed later.
EFD_LOOKUP_AVX2 is chosen at runtime after checking AVX2 availability,
so the obsolete build-time check for AVX2 can be simply removed,
and the missing include added back.
Fixes: 5b9656b157d3 ("lib: build with meson")
Fixes: 30a1de105a5f ("lib: remove unneeded header includes")
Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
---
lib/efd/rte_efd.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/lib/efd/rte_efd.c b/lib/efd/rte_efd.c
index 686a137757..d844def87f 100644
--- a/lib/efd/rte_efd.c
+++ b/lib/efd/rte_efd.c
@@ -24,6 +24,7 @@
#include "rte_efd.h"
#if defined(RTE_ARCH_X86)
+#include "rte_efd_x86.h"
#elif defined(RTE_ARCH_ARM64)
#include "rte_efd_arm64.h"
#endif
@@ -1268,7 +1269,7 @@ efd_lookup_internal(const struct efd_online_group_entry * const group,
switch (lookup_fn) {
-#if defined(RTE_ARCH_X86) && defined(CC_SUPPORT_AVX2)
+#if defined(RTE_ARCH_X86)
case EFD_LOOKUP_AVX2:
return efd_lookup_internal_avx2(group->hash_idx,
group->lookup_table,
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:36.012939341 +0000
+++ 0031-efd-fix-AVX2-support.patch 2025-10-27 15:54:34.807949850 +0000
@@ -1 +1 @@
-From c367b9a07c55025eabe1dd6903f4b0f5c4c5d362 Mon Sep 17 00:00:00 2001
+From 3828456c69edc5e7de5ac5744098c1afbf14977f Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit c367b9a07c55025eabe1dd6903f4b0f5c4c5d362 ]
+
@@ -17 +18,0 @@
-Cc: stable@dpdk.org
@@ -26 +27 @@
-index b0e44e5c51..ebf1e0655f 100644
+index 686a137757..d844def87f 100644
@@ -29 +30 @@
-@@ -26,6 +26,7 @@
+@@ -24,6 +24,7 @@
@@ -37 +38 @@
-@@ -1279,7 +1280,7 @@ efd_lookup_internal(const struct efd_online_group_entry * const group,
+@@ -1268,7 +1269,7 @@ efd_lookup_internal(const struct efd_online_group_entry * const group,
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'common/cnxk: fix async event handling' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (29 preceding siblings ...)
2025-10-27 16:19 ` patch 'efd: fix AVX2 support' " luca.boccassi
@ 2025-10-27 16:19 ` luca.boccassi
2025-10-27 16:19 ` patch 'doc: fix feature list of ice driver' " luca.boccassi
` (46 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:19 UTC (permalink / raw)
To: Tomasz Duszynski; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/dd1205b7ee1121c38c492748efb34c7e3f4b2960
Thanks.
Luca Boccassi
---
From dd1205b7ee1121c38c492748efb34c7e3f4b2960 Mon Sep 17 00:00:00 2001
From: Tomasz Duszynski <tduszynski@marvell.com>
Date: Wed, 30 Jul 2025 04:51:09 +0200
Subject: [PATCH] common/cnxk: fix async event handling
[ upstream commit 21b631cd0d3670e375151185d74cd5a03888e2bd ]
If async event shows up unexpectedly ack it and continue
until expected event is received.
Fixes: 857721d62d42 ("common/cnxk: add BPHY communication with atf")
Signed-off-by: Tomasz Duszynski <tduszynski@marvell.com>
---
drivers/common/cnxk/roc_bphy_cgx.c | 56 +++++++++++-------------------
1 file changed, 21 insertions(+), 35 deletions(-)
diff --git a/drivers/common/cnxk/roc_bphy_cgx.c b/drivers/common/cnxk/roc_bphy_cgx.c
index 3d674dbe84..befd69430b 100644
--- a/drivers/common/cnxk/roc_bphy_cgx.c
+++ b/drivers/common/cnxk/roc_bphy_cgx.c
@@ -65,8 +65,7 @@ roc_bphy_cgx_ack(struct roc_bphy_cgx *roc_cgx, unsigned int lmac,
}
static int
-roc_bphy_cgx_wait_for_ownership(struct roc_bphy_cgx *roc_cgx, unsigned int lmac,
- uint64_t *scr0)
+roc_bphy_cgx_wait_ack(struct roc_bphy_cgx *roc_cgx, unsigned int lmac, uint64_t *scr0, bool ack)
{
int tries = 5000;
uint64_t scr1;
@@ -75,37 +74,18 @@ roc_bphy_cgx_wait_for_ownership(struct roc_bphy_cgx *roc_cgx, unsigned int lmac,
*scr0 = roc_bphy_cgx_read(roc_cgx, lmac, CGX_CMRX_SCRATCH0);
scr1 = roc_bphy_cgx_read(roc_cgx, lmac, CGX_CMRX_SCRATCH1);
- if (FIELD_GET(SCR1_OWN_STATUS, scr1) == ETH_OWN_NON_SECURE_SW &&
- FIELD_GET(SCR0_ETH_EVT_STS_S_ACK, *scr0) == 0)
- break;
-
/* clear async events if any */
- if (FIELD_GET(SCR0_ETH_EVT_STS_S_EVT_TYPE, *scr0) ==
- ETH_EVT_ASYNC &&
- FIELD_GET(SCR0_ETH_EVT_STS_S_ACK, *scr0))
+ if (FIELD_GET(SCR0_ETH_EVT_STS_S_EVT_TYPE, *scr0) == ETH_EVT_ASYNC &&
+ FIELD_GET(SCR0_ETH_EVT_STS_S_ACK, *scr0)) {
roc_bphy_cgx_ack(roc_cgx, lmac, scr0);
-
- plt_delay_ms(1);
- } while (--tries);
-
- return tries ? 0 : -ETIMEDOUT;
-}
-
-static int
-roc_bphy_cgx_wait_for_ack(struct roc_bphy_cgx *roc_cgx, unsigned int lmac,
- uint64_t *scr0)
-{
- int tries = 5000;
- uint64_t scr1;
-
- do {
- *scr0 = roc_bphy_cgx_read(roc_cgx, lmac, CGX_CMRX_SCRATCH0);
- scr1 = roc_bphy_cgx_read(roc_cgx, lmac, CGX_CMRX_SCRATCH1);
+ goto skip;
+ }
if (FIELD_GET(SCR1_OWN_STATUS, scr1) == ETH_OWN_NON_SECURE_SW &&
- FIELD_GET(SCR0_ETH_EVT_STS_S_ACK, *scr0))
+ FIELD_GET(SCR0_ETH_EVT_STS_S_ACK, *scr0) == ack)
break;
+skip:
plt_delay_ms(1);
} while (--tries);
@@ -113,8 +93,20 @@ roc_bphy_cgx_wait_for_ack(struct roc_bphy_cgx *roc_cgx, unsigned int lmac,
}
static int
-roc_bphy_cgx_intf_req(struct roc_bphy_cgx *roc_cgx, unsigned int lmac,
- uint64_t scr1, uint64_t *scr0)
+roc_bphy_cgx_wait_for_ownership(struct roc_bphy_cgx *roc_cgx, unsigned int lmac, uint64_t *scr0)
+{
+ return roc_bphy_cgx_wait_ack(roc_cgx, lmac, scr0, false);
+}
+
+static int
+roc_bphy_cgx_wait_for_ack(struct roc_bphy_cgx *roc_cgx, unsigned int lmac, uint64_t *scr0)
+{
+ return roc_bphy_cgx_wait_ack(roc_cgx, lmac, scr0, true);
+}
+
+static int
+roc_bphy_cgx_intf_req(struct roc_bphy_cgx *roc_cgx, unsigned int lmac, uint64_t scr1,
+ uint64_t *scr0)
{
uint8_t cmd_id = FIELD_GET(SCR1_ETH_CMD_ID, scr1);
int ret;
@@ -142,12 +134,6 @@ roc_bphy_cgx_intf_req(struct roc_bphy_cgx *roc_cgx, unsigned int lmac,
if (cmd_id == ETH_CMD_INTF_SHUTDOWN)
goto out;
- if (FIELD_GET(SCR0_ETH_EVT_STS_S_EVT_TYPE, *scr0) != ETH_EVT_CMD_RESP) {
- plt_err("received async event instead of cmd resp event");
- ret = -EIO;
- goto out;
- }
-
if (FIELD_GET(SCR0_ETH_EVT_STS_S_ID, *scr0) != cmd_id) {
plt_err("received resp for cmd %d expected for cmd %d",
(int)FIELD_GET(SCR0_ETH_EVT_STS_S_ID, *scr0), cmd_id);
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:36.047626743 +0000
+++ 0032-common-cnxk-fix-async-event-handling.patch 2025-10-27 15:54:34.807949850 +0000
@@ -1 +1 @@
-From 21b631cd0d3670e375151185d74cd5a03888e2bd Mon Sep 17 00:00:00 2001
+From dd1205b7ee1121c38c492748efb34c7e3f4b2960 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 21b631cd0d3670e375151185d74cd5a03888e2bd ]
+
@@ -10 +11,0 @@
-Cc: stable@dpdk.org
@@ -18 +19 @@
-index db70bafd9b..1de5195657 100644
+index 3d674dbe84..befd69430b 100644
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'doc: fix feature list of ice driver' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (30 preceding siblings ...)
2025-10-27 16:19 ` patch 'common/cnxk: fix async event handling' " luca.boccassi
@ 2025-10-27 16:19 ` luca.boccassi
2025-10-27 16:19 ` patch 'doc: fix feature list of iavf " luca.boccassi
` (45 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:19 UTC (permalink / raw)
To: Ciara Loftus; +Cc: Bruce Richardson, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/d56b79d1c9fbcf460d81441404cba6768fea9a22
Thanks.
Luca Boccassi
---
From d56b79d1c9fbcf460d81441404cba6768fea9a22 Mon Sep 17 00:00:00 2001
From: Ciara Loftus <ciara.loftus@intel.com>
Date: Tue, 16 Sep 2025 14:21:06 +0000
Subject: [PATCH] doc: fix feature list of ice driver
[ upstream commit 62b6b612ea272d334ca8b856f1055c8d8fcb1072 ]
The free tx mbuf on demand feature has been supported since commit
ab7cfe1fe3d7 ("net/ice: cleanup Tx buffers"). Update the list of
supported features to reflect this.
Fixes: ab7cfe1fe3d7 ("net/ice: cleanup Tx buffers")
Signed-off-by: Ciara Loftus <ciara.loftus@intel.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
---
doc/guides/nics/features/ice.ini | 1 +
1 file changed, 1 insertion(+)
diff --git a/doc/guides/nics/features/ice.ini b/doc/guides/nics/features/ice.ini
index 62869ef0a0..f203205074 100644
--- a/doc/guides/nics/features/ice.ini
+++ b/doc/guides/nics/features/ice.ini
@@ -13,6 +13,7 @@ Link status = Y
Link status event = Y
Rx interrupt = Y
Fast mbuf free = P
+Free Tx mbuf on demand = Y
Queue start/stop = Y
Burst mode info = Y
Power mgmt address monitor = Y
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:36.081713894 +0000
+++ 0033-doc-fix-feature-list-of-ice-driver.patch 2025-10-27 15:54:34.807949850 +0000
@@ -1 +1 @@
-From 62b6b612ea272d334ca8b856f1055c8d8fcb1072 Mon Sep 17 00:00:00 2001
+From d56b79d1c9fbcf460d81441404cba6768fea9a22 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 62b6b612ea272d334ca8b856f1055c8d8fcb1072 ]
+
@@ -11 +12,0 @@
-Cc: stable@dpdk.org
@@ -20 +21 @@
-index 9c8569740a..2703493514 100644
+index 62869ef0a0..f203205074 100644
@@ -23,2 +24,2 @@
-@@ -14,6 +14,7 @@ Link status event = Y
- FEC = Y
+@@ -13,6 +13,7 @@ Link status = Y
+ Link status event = Y
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'doc: fix feature list of iavf driver' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (31 preceding siblings ...)
2025-10-27 16:19 ` patch 'doc: fix feature list of ice driver' " luca.boccassi
@ 2025-10-27 16:19 ` luca.boccassi
2025-10-27 16:19 ` patch 'baseband/acc: fix exported header' " luca.boccassi
` (44 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:19 UTC (permalink / raw)
To: Ciara Loftus; +Cc: Bruce Richardson, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/38d09921b58efb4133642409ee6cda8b949b142b
Thanks.
Luca Boccassi
---
From 38d09921b58efb4133642409ee6cda8b949b142b Mon Sep 17 00:00:00 2001
From: Ciara Loftus <ciara.loftus@intel.com>
Date: Tue, 16 Sep 2025 14:21:08 +0000
Subject: [PATCH] doc: fix feature list of iavf driver
[ upstream commit f3878b615e69a12087a6c5d212723478cfc79c31 ]
The iavf PMD does not report the speed capabilities that the device is
capable of in the speed_capa field of the rte_eth_dev_info struct. The
documentation incorrectly stated this feature as supported. Fix this.
The free tx mbuf on demand feature has been supported since commit
86e44244f95c ("net/iavf: cleanup Tx buffers"). Update the list of
supported features to reflect this.
The burst mode info feature has been supported since commit 0d5a856f5be9
("net/iavf: support Rx/Tx burst mode info"). Update the list of
supported features to reflect this.
The extended statistics feature has been implemented since commit
d38a06bf4367 ("net/iavf: add extended stats"). Update the list of
supported features to reflect this.
Fixes: 48de41ca11f0 ("net/avf: enable link status update")
Fixes: 86e44244f95c ("net/iavf: cleanup Tx buffers")
Fixes: 0d5a856f5be9 ("net/iavf: support Rx/Tx burst mode info")
Fixes: d38a06bf4367 ("net/iavf: add extended stats")
Signed-off-by: Ciara Loftus <ciara.loftus@intel.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
---
doc/guides/nics/features/iavf.ini | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/doc/guides/nics/features/iavf.ini b/doc/guides/nics/features/iavf.ini
index c7f8ace499..87ef43abe1 100644
--- a/doc/guides/nics/features/iavf.ini
+++ b/doc/guides/nics/features/iavf.ini
@@ -4,10 +4,11 @@
; Refer to default.ini for the full list of available PMD features.
;
[Features]
-Speed capabilities = Y
Link status = Y
Rx interrupt = Y
+Free Tx mbuf on demand = Y
Queue start/stop = Y
+Burst mode info = Y
Power mgmt address monitor = Y
MTU update = Y
Scattered Rx = Y
@@ -33,6 +34,7 @@ Packet type parsing = Y
Rx descriptor status = Y
Tx descriptor status = Y
Basic stats = Y
+Extended stats = Y
Multiprocess aware = Y
FreeBSD = Y
Linux = Y
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:36.114723999 +0000
+++ 0034-doc-fix-feature-list-of-iavf-driver.patch 2025-10-27 15:54:34.807949850 +0000
@@ -1 +1 @@
-From f3878b615e69a12087a6c5d212723478cfc79c31 Mon Sep 17 00:00:00 2001
+From 38d09921b58efb4133642409ee6cda8b949b142b Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit f3878b615e69a12087a6c5d212723478cfc79c31 ]
+
@@ -26 +27,0 @@
-Cc: stable@dpdk.org
@@ -35 +36 @@
-index 61c4742197..7695e3ff7c 100644
+index c7f8ace499..87ef43abe1 100644
@@ -38,2 +39,2 @@
-@@ -7,12 +7,13 @@
- ; is selected.
+@@ -4,10 +4,11 @@
+ ; Refer to default.ini for the full list of available PMD features.
@@ -47,2 +47,0 @@
- Runtime Rx queue setup = Y
- Runtime Tx queue setup = Y
@@ -53 +52 @@
-@@ -39,6 +40,7 @@ Packet type parsing = Y
+@@ -33,6 +34,7 @@ Packet type parsing = Y
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'baseband/acc: fix exported header' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (32 preceding siblings ...)
2025-10-27 16:19 ` patch 'doc: fix feature list of iavf " luca.boccassi
@ 2025-10-27 16:19 ` luca.boccassi
2025-10-27 16:19 ` patch 'gpudev: fix driver header for Windows' " luca.boccassi
` (43 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:19 UTC (permalink / raw)
To: David Marchand; +Cc: Bruce Richardson, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/0d9135bf79bccaab0edc4c79a1d4033bdf1d94c8
Thanks.
Luca Boccassi
---
From 0d9135bf79bccaab0edc4c79a1d4033bdf1d94c8 Mon Sep 17 00:00:00 2001
From: David Marchand <david.marchand@redhat.com>
Date: Wed, 20 Nov 2024 15:24:31 +0100
Subject: [PATCH] baseband/acc: fix exported header
[ upstream commit 611d08f11d42dfafbbf954798ea9c917f7d4ef89 ]
rte_acc_cfg.h relies on rte_acc_common_cfg.h.
Fixes: 32e8b7ea35dd ("baseband/acc100: refactor to segregate common code")
Signed-off-by: David Marchand <david.marchand@redhat.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
---
drivers/baseband/acc/meson.build | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/baseband/acc/meson.build b/drivers/baseband/acc/meson.build
index 1cbb06d107..bdfc218c56 100644
--- a/drivers/baseband/acc/meson.build
+++ b/drivers/baseband/acc/meson.build
@@ -5,4 +5,4 @@ deps += ['bbdev', 'bus_pci']
sources = files('acc_common.c', 'rte_acc100_pmd.c', 'rte_acc200_pmd.c')
-headers = files('rte_acc_cfg.h')
+headers = files('rte_acc_cfg.h', 'rte_acc_common_cfg.h')
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:36.149113905 +0000
+++ 0035-baseband-acc-fix-exported-header.patch 2025-10-27 15:54:34.807949850 +0000
@@ -1 +1 @@
-From 611d08f11d42dfafbbf954798ea9c917f7d4ef89 Mon Sep 17 00:00:00 2001
+From 0d9135bf79bccaab0edc4c79a1d4033bdf1d94c8 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 611d08f11d42dfafbbf954798ea9c917f7d4ef89 ]
+
@@ -17 +19 @@
-index 4e6d715d7c..9278897f76 100644
+index 1cbb06d107..bdfc218c56 100644
@@ -20 +22 @@
-@@ -46,4 +46,4 @@ deps += ['bus_pci']
+@@ -5,4 +5,4 @@ deps += ['bbdev', 'bus_pci']
@@ -22 +24 @@
- sources = files('acc_common.c', 'rte_acc100_pmd.c', 'rte_vrb_pmd.c')
+ sources = files('acc_common.c', 'rte_acc100_pmd.c', 'rte_acc200_pmd.c')
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'gpudev: fix driver header for Windows' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (33 preceding siblings ...)
2025-10-27 16:19 ` patch 'baseband/acc: fix exported header' " luca.boccassi
@ 2025-10-27 16:19 ` luca.boccassi
2025-10-27 16:19 ` patch 'drivers: fix some exported headers' " luca.boccassi
` (42 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:19 UTC (permalink / raw)
To: David Marchand; +Cc: Bruce Richardson, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/eaf49a44e8756ecb42b4bcd4f53f1926ea3b6c0e
Thanks.
Luca Boccassi
---
From eaf49a44e8756ecb42b4bcd4f53f1926ea3b6c0e Mon Sep 17 00:00:00 2001
From: David Marchand <david.marchand@redhat.com>
Date: Wed, 24 Sep 2025 18:42:49 +0200
Subject: [PATCH] gpudev: fix driver header for Windows
[ upstream commit bda83ec0bb0c1bfba33843059a244181b46b9907 ]
Use rte_os.h and its RTE_TAILQ_HEAD definition compatible with BSD
sys/queue.h
Fixes: 18cb07563165 ("gpudev: add event notification")
Signed-off-by: David Marchand <david.marchand@redhat.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
---
lib/gpudev/gpudev.c | 1 +
lib/gpudev/gpudev_driver.h | 4 ++--
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/lib/gpudev/gpudev.c b/lib/gpudev/gpudev.c
index 8f12abef23..2e878d1cc9 100644
--- a/lib/gpudev/gpudev.c
+++ b/lib/gpudev/gpudev.c
@@ -3,6 +3,7 @@
*/
#include <stdlib.h>
+#include <sys/queue.h>
#include <rte_eal.h>
#include <rte_tailq.h>
diff --git a/lib/gpudev/gpudev_driver.h b/lib/gpudev/gpudev_driver.h
index 42898c7c8b..d11e5be559 100644
--- a/lib/gpudev/gpudev_driver.h
+++ b/lib/gpudev/gpudev_driver.h
@@ -12,11 +12,11 @@
#define RTE_GPUDEV_DRIVER_H
#include <stdint.h>
-#include <sys/queue.h>
#include <dev_driver.h>
#include <rte_compat.h>
+#include <rte_os.h>
#include "rte_gpudev.h"
#ifdef __cplusplus
@@ -80,7 +80,7 @@ struct rte_gpu {
/* Driver functions. */
struct rte_gpu_ops ops;
/* Event callback list. */
- TAILQ_HEAD(rte_gpu_callback_list, rte_gpu_callback) callbacks;
+ RTE_TAILQ_HEAD(rte_gpu_callback_list, rte_gpu_callback) callbacks;
/* Current state (used or not) in the running process. */
enum rte_gpu_state process_state; /* Updated by this library. */
/* Driver-specific private data for the running process. */
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:36.182110725 +0000
+++ 0036-gpudev-fix-driver-header-for-Windows.patch 2025-10-27 15:54:34.807949850 +0000
@@ -1 +1 @@
-From bda83ec0bb0c1bfba33843059a244181b46b9907 Mon Sep 17 00:00:00 2001
+From eaf49a44e8756ecb42b4bcd4f53f1926ea3b6c0e Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit bda83ec0bb0c1bfba33843059a244181b46b9907 ]
+
@@ -19 +21 @@
-index 0473d9ffb3..4a2335834c 100644
+index 8f12abef23..2e878d1cc9 100644
@@ -28 +29,0 @@
- #include <eal_export.h>
@@ -29,0 +31 @@
+ #include <rte_tailq.h>
@@ -31 +33 @@
-index 37b6ae3149..b7621f6e5a 100644
+index 42898c7c8b..d11e5be559 100644
@@ -47 +49 @@
-@@ -80,7 +80,7 @@ struct __rte_cache_aligned rte_gpu {
+@@ -80,7 +80,7 @@ struct rte_gpu {
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'drivers: fix some exported headers' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (34 preceding siblings ...)
2025-10-27 16:19 ` patch 'gpudev: fix driver header for Windows' " luca.boccassi
@ 2025-10-27 16:19 ` luca.boccassi
2025-10-27 16:19 ` patch 'test/debug: fix crash with mlx5 devices' " luca.boccassi
` (41 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:19 UTC (permalink / raw)
To: David Marchand; +Cc: Bruce Richardson, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/cad63111eb9885927d6b4b9182302c701a938e1e
Thanks.
Luca Boccassi
---
From cad63111eb9885927d6b4b9182302c701a938e1e Mon Sep 17 00:00:00 2001
From: David Marchand <david.marchand@redhat.com>
Date: Wed, 20 Nov 2024 11:45:09 +0100
Subject: [PATCH] drivers: fix some exported headers
[ upstream commit cae7430fcc712623ebbf52b0e8f232788a5e4679 ]
Those headers could not be included individually as they were not
including their dependencies, were subject to some build warnings,
or were not compiling on Windows.
Fixes: 831dba47bd36 ("bus/vmbus: add Hyper-V virtual bus support")
Fixes: 5b2a1a02dcaf ("crypto/cnxk: fix experimental version for PMD API")
Fixes: e5abbeeeefa5 ("crypto/cnxk: add PMD API for getting CPTR")
Fixes: 3ca607402c4d ("crypto/cnxk: add PMD API to flush CTX")
Fixes: 8c3495f5d2dd ("net/dpaa: support loopback API")
Fixes: 12b435bf8f2f ("net/iavf: support flex desc metadata extraction")
Fixes: 23f627e0ed28 ("net/mlx5: add flow sync API")
Fixes: f5177bdc8b76 ("net/mlx5: add GENEVE TLV options parser API")
Fixes: 53c71586c789 ("raw/dpaa2_cmdif: support enqueue/dequeue operations")
Fixes: c39d1e082a4b ("raw/ntb: setup queues")
Signed-off-by: David Marchand <david.marchand@redhat.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
---
drivers/bus/vmbus/rte_vmbus_reg.h | 5 +++++
drivers/net/dpaa/rte_pmd_dpaa.h | 2 ++
drivers/net/iavf/rte_pmd_iavf.h | 6 ++++++
drivers/net/mlx5/rte_pmd_mlx5.h | 3 +++
drivers/raw/dpaa2_cmdif/rte_pmd_dpaa2_cmdif.h | 2 ++
drivers/raw/ntb/rte_pmd_ntb.h | 2 ++
6 files changed, 20 insertions(+)
diff --git a/drivers/bus/vmbus/rte_vmbus_reg.h b/drivers/bus/vmbus/rte_vmbus_reg.h
index 6257774f29..a40f437951 100644
--- a/drivers/bus/vmbus/rte_vmbus_reg.h
+++ b/drivers/bus/vmbus/rte_vmbus_reg.h
@@ -6,6 +6,11 @@
#ifndef _VMBUS_REG_H_
#define _VMBUS_REG_H_
+#include <stdint.h>
+
+#include <rte_common.h>
+#include <rte_uuid.h>
+
/*
* Hyper-V SynIC message format.
*/
diff --git a/drivers/net/dpaa/rte_pmd_dpaa.h b/drivers/net/dpaa/rte_pmd_dpaa.h
index ec45633ba2..0a57e2097a 100644
--- a/drivers/net/dpaa/rte_pmd_dpaa.h
+++ b/drivers/net/dpaa/rte_pmd_dpaa.h
@@ -5,6 +5,8 @@
#ifndef _PMD_DPAA_H_
#define _PMD_DPAA_H_
+#include <stdint.h>
+
/**
* @file rte_pmd_dpaa.h
*
diff --git a/drivers/net/iavf/rte_pmd_iavf.h b/drivers/net/iavf/rte_pmd_iavf.h
index 56d453fc4c..04b86a5dd7 100644
--- a/drivers/net/iavf/rte_pmd_iavf.h
+++ b/drivers/net/iavf/rte_pmd_iavf.h
@@ -15,6 +15,7 @@
*/
#include <stdio.h>
+
#include <rte_compat.h>
#include <rte_mbuf.h>
#include <rte_mbuf_dyn.h>
@@ -184,6 +185,7 @@ __rte_experimental
static inline void
rte_pmd_ifd_dump_proto_xtr_metadata(struct rte_mbuf *m)
{
+#ifdef ALLOW_EXPERIMENTAL_API
union rte_pmd_ifd_proto_xtr_metadata data;
if (!rte_pmd_ifd_dynf_proto_xtr_metadata_avail())
@@ -243,6 +245,10 @@ rte_pmd_ifd_dump_proto_xtr_metadata(struct rte_mbuf *m)
else if (m->ol_flags & RTE_IAVF_PKT_RX_DYNF_PROTO_XTR_IP_OFFSET)
printf(" - Flexible descriptor's Extraction: ip_offset=%u",
data.ip_ofs);
+#else
+ RTE_SET_USED(m);
+ RTE_VERIFY(false);
+#endif
}
#ifdef __cplusplus
diff --git a/drivers/net/mlx5/rte_pmd_mlx5.h b/drivers/net/mlx5/rte_pmd_mlx5.h
index b71a291256..76c8ad73ca 100644
--- a/drivers/net/mlx5/rte_pmd_mlx5.h
+++ b/drivers/net/mlx5/rte_pmd_mlx5.h
@@ -5,6 +5,9 @@
#ifndef RTE_PMD_PRIVATE_MLX5_H_
#define RTE_PMD_PRIVATE_MLX5_H_
+#include <stdint.h>
+
+#include <rte_byteorder.h>
#include <rte_compat.h>
/**
diff --git a/drivers/raw/dpaa2_cmdif/rte_pmd_dpaa2_cmdif.h b/drivers/raw/dpaa2_cmdif/rte_pmd_dpaa2_cmdif.h
index 483b66eaae..7731fc6363 100644
--- a/drivers/raw/dpaa2_cmdif/rte_pmd_dpaa2_cmdif.h
+++ b/drivers/raw/dpaa2_cmdif/rte_pmd_dpaa2_cmdif.h
@@ -12,6 +12,8 @@
*
*/
+#include <stdint.h>
+
#ifdef __cplusplus
extern "C" {
#endif
diff --git a/drivers/raw/ntb/rte_pmd_ntb.h b/drivers/raw/ntb/rte_pmd_ntb.h
index 6591ce7931..76da3be026 100644
--- a/drivers/raw/ntb/rte_pmd_ntb.h
+++ b/drivers/raw/ntb/rte_pmd_ntb.h
@@ -5,6 +5,8 @@
#ifndef _RTE_PMD_NTB_H_
#define _RTE_PMD_NTB_H_
+#include <stdint.h>
+
/* App needs to set/get these attrs */
#define NTB_QUEUE_SZ_NAME "queue_size"
#define NTB_QUEUE_NUM_NAME "queue_num"
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:36.214915891 +0000
+++ 0037-drivers-fix-some-exported-headers.patch 2025-10-27 15:54:34.807949850 +0000
@@ -1 +1 @@
-From cae7430fcc712623ebbf52b0e8f232788a5e4679 Mon Sep 17 00:00:00 2001
+From cad63111eb9885927d6b4b9182302c701a938e1e Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit cae7430fcc712623ebbf52b0e8f232788a5e4679 ]
+
@@ -24,2 +26 @@
- drivers/bus/vmbus/rte_vmbus_reg.h | 6 ++++++
- drivers/crypto/cnxk/rte_pmd_cnxk_crypto.h | 2 ++
+ drivers/bus/vmbus/rte_vmbus_reg.h | 5 +++++
@@ -27 +28 @@
- drivers/net/intel/iavf/rte_pmd_iavf.h | 6 ++++++
+ drivers/net/iavf/rte_pmd_iavf.h | 6 ++++++
@@ -31 +32 @@
- 7 files changed, 23 insertions(+)
+ 6 files changed, 20 insertions(+)
@@ -34 +35 @@
-index fb7e3043ec..6370a07f95 100644
+index 6257774f29..a40f437951 100644
@@ -37 +38 @@
-@@ -6,6 +6,12 @@
+@@ -6,6 +6,11 @@
@@ -44 +44,0 @@
-+#include <rte_stdatomic.h>
@@ -50,15 +49,0 @@
-diff --git a/drivers/crypto/cnxk/rte_pmd_cnxk_crypto.h b/drivers/crypto/cnxk/rte_pmd_cnxk_crypto.h
-index 46861ab2cf..70c019e94c 100644
---- a/drivers/crypto/cnxk/rte_pmd_cnxk_crypto.h
-+++ b/drivers/crypto/cnxk/rte_pmd_cnxk_crypto.h
-@@ -11,8 +11,10 @@
- #ifndef _PMD_CNXK_CRYPTO_H_
- #define _PMD_CNXK_CRYPTO_H_
-
-+#include <stdbool.h>
- #include <stdint.h>
-
-+#include <rte_compat.h>
- #include <rte_crypto.h>
- #include <rte_security.h>
-
@@ -78 +63 @@
-diff --git a/drivers/net/intel/iavf/rte_pmd_iavf.h b/drivers/net/intel/iavf/rte_pmd_iavf.h
+diff --git a/drivers/net/iavf/rte_pmd_iavf.h b/drivers/net/iavf/rte_pmd_iavf.h
@@ -80,2 +65,2 @@
---- a/drivers/net/intel/iavf/rte_pmd_iavf.h
-+++ b/drivers/net/intel/iavf/rte_pmd_iavf.h
+--- a/drivers/net/iavf/rte_pmd_iavf.h
++++ b/drivers/net/iavf/rte_pmd_iavf.h
@@ -110 +95 @@
-index fdd2f65888..f2c6aebe0b 100644
+index b71a291256..76c8ad73ca 100644
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'test/debug: fix crash with mlx5 devices' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (35 preceding siblings ...)
2025-10-27 16:19 ` patch 'drivers: fix some exported headers' " luca.boccassi
@ 2025-10-27 16:19 ` luca.boccassi
2025-10-27 16:19 ` patch 'bus/pci: fix build with MinGW 13' " luca.boccassi
` (40 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:19 UTC (permalink / raw)
To: David Marchand; +Cc: Bruce Richardson, Dariusz Sosnowski, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/ec185479ebb5c833bca7da93731fed2760b57ba7
Thanks.
Luca Boccassi
---
From ec185479ebb5c833bca7da93731fed2760b57ba7 Mon Sep 17 00:00:00 2001
From: David Marchand <david.marchand@redhat.com>
Date: Thu, 2 Oct 2025 17:36:50 +0200
Subject: [PATCH] test/debug: fix crash with mlx5 devices
[ upstream commit 2b403dd8fb37d0ba13723e44ffc7ee2c2795f838 ]
Running rte_exit() in a forked process means that shared memory will be
released by the child process before the parent process does the same.
This issue has been seen recently when some GHA virtual machine (with
some mlx5 devices) runs the debug_autotest unit test.
Instead, run rte_panic() and rte_exit() from a new DPDK process spawned
like for other recursive unit tests.
Bugzilla ID: 1796
Fixes: af75078fece3 ("first public release")
Signed-off-by: David Marchand <david.marchand@redhat.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Dariusz Sosnowski <dsosnowski@nvidia.com>
---
app/test/process.h | 2 +-
app/test/test.c | 2 +
app/test/test.h | 2 +
app/test/test_debug.c | 92 ++++++++++++++++++++++++++++++-------------
4 files changed, 69 insertions(+), 29 deletions(-)
diff --git a/app/test/process.h b/app/test/process.h
index e8e7e5ab60..610d657c2e 100644
--- a/app/test/process.h
+++ b/app/test/process.h
@@ -203,7 +203,7 @@ process_dup(const char *const argv[], int numargs, const char *env_value)
* tests attempting to use this function on FreeBSD.
*/
#ifdef RTE_EXEC_ENV_LINUX
-static char *
+static inline char *
get_current_prefix(char *prefix, int size)
{
char path[PATH_MAX] = {0};
diff --git a/app/test/test.c b/app/test/test.c
index 5cf9f51c28..02cdf44fc8 100644
--- a/app/test/test.c
+++ b/app/test/test.c
@@ -82,6 +82,8 @@ do_recursive_call(void)
{ "test_memory_flags", no_action },
{ "test_file_prefix", no_action },
{ "test_no_huge_flag", no_action },
+ { "test_panic", test_panic },
+ { "test_exit", test_exit },
#ifdef RTE_LIB_TIMER
#ifndef RTE_EXEC_ENV_WINDOWS
{ "timer_secondary_spawn_wait", test_timer_secondary },
diff --git a/app/test/test.h b/app/test/test.h
index 6a4fa0b1d7..4142c22c1d 100644
--- a/app/test/test.h
+++ b/app/test/test.h
@@ -173,7 +173,9 @@ extern const char *prgname;
int commands_init(void);
int command_valid(const char *cmd);
+int test_exit(void);
int test_mp_secondary(void);
+int test_panic(void);
int test_timer_secondary(void);
int test_set_rxtx_conf(cmdline_fixed_string_t mode);
diff --git a/app/test/test_debug.c b/app/test/test_debug.c
index 2704f5b927..f016e2f8f7 100644
--- a/app/test/test_debug.c
+++ b/app/test/test_debug.c
@@ -8,6 +8,18 @@
#include <stdint.h>
#ifdef RTE_EXEC_ENV_WINDOWS
+int
+test_panic(void)
+{
+ printf("debug not supported on Windows, skipping test\n");
+ return TEST_SKIPPED;
+}
+int
+test_exit(void)
+{
+ printf("debug not supported on Windows, skipping test\n");
+ return TEST_SKIPPED;
+}
static int
test_debug(void)
{
@@ -25,34 +37,31 @@ test_debug(void)
#include <rte_debug.h>
#include <rte_common.h>
#include <rte_eal.h>
-#include <rte_service_component.h>
+#include <rte_lcore.h>
+
+#include "process.h"
/*
* Debug test
* ==========
*/
-/* use fork() to test rte_panic() */
-static int
+static const char *test_args[7];
+
+int
test_panic(void)
{
- int pid;
int status;
- pid = fork();
-
- if (pid == 0) {
+ if (getenv(RECURSIVE_ENV_VAR) != NULL) {
struct rlimit rl;
/* No need to generate a coredump when panicking. */
rl.rlim_cur = rl.rlim_max = 0;
setrlimit(RLIMIT_CORE, &rl);
rte_panic("Test Debug\n");
- } else if (pid < 0) {
- printf("Fork Failed\n");
- return -1;
}
- wait(&status);
+ status = process_dup(test_args, RTE_DIM(test_args), "test_panic");
if(status == 0){
printf("Child process terminated normally!\n");
return -1;
@@ -62,27 +71,16 @@ test_panic(void)
return 0;
}
-/* use fork() to test rte_exit() */
static int
test_exit_val(int exit_val)
{
- int pid;
+ char buf[5];
int status;
- /* manually cleanup EAL memory, as the fork() below would otherwise
- * cause the same hugepages to be free()-ed multiple times.
- */
- rte_service_finalize();
-
- pid = fork();
-
- if (pid == 0)
- rte_exit(exit_val, __func__);
- else if (pid < 0){
- printf("Fork Failed\n");
- return -1;
- }
- wait(&status);
+ sprintf(buf, "%d", exit_val);
+ if (setenv("TEST_DEBUG_EXIT_VAL", buf, 1) == -1)
+ rte_panic("Failed to set exit value in env\n");
+ status = process_dup(test_args, RTE_DIM(test_args), "test_exit");
printf("Child process status: %d\n", status);
if(!WIFEXITED(status) || WEXITSTATUS(status) != (uint8_t)exit_val){
printf("Child process terminated with incorrect status (expected = %d)!\n",
@@ -92,11 +90,22 @@ test_exit_val(int exit_val)
return 0;
}
-static int
+int
test_exit(void)
{
int test_vals[] = { 0, 1, 2, 255, -1 };
unsigned i;
+
+ if (getenv(RECURSIVE_ENV_VAR) != NULL) {
+ int exit_val;
+
+ if (!getenv("TEST_DEBUG_EXIT_VAL"))
+ rte_panic("No exit value set in env\n");
+
+ exit_val = strtol(getenv("TEST_DEBUG_EXIT_VAL"), NULL, 0);
+ rte_exit(exit_val, __func__);
+ }
+
for (i = 0; i < RTE_DIM(test_vals); i++) {
if (test_exit_val(test_vals[i]) < 0)
return -1;
@@ -128,6 +137,33 @@ test_usage(void)
static int
test_debug(void)
{
+#ifdef RTE_EXEC_ENV_FREEBSD
+ /* BSD target doesn't support prefixes at this point, and we also need to
+ * run another primary process here.
+ */
+ const char * prefix = "--no-shconf";
+#else
+ const char * prefix = "--file-prefix=debug";
+#endif
+ char core[10];
+
+ sprintf(core, "%d", rte_get_main_lcore());
+
+ test_args[0] = prgname;
+ test_args[1] = prefix;
+ test_args[2] = "-l";
+ test_args[3] = core;
+
+ if (rte_eal_has_hugepages()) {
+ test_args[4] = "";
+ test_args[5] = "";
+ test_args[6] = "";
+ } else {
+ test_args[4] = "--no-huge";
+ test_args[5] = "-m";
+ test_args[6] = "2048";
+ }
+
rte_dump_stack();
if (test_panic() < 0)
return -1;
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:36.247535374 +0000
+++ 0038-test-debug-fix-crash-with-mlx5-devices.patch 2025-10-27 15:54:34.807949850 +0000
@@ -1 +1 @@
-From 2b403dd8fb37d0ba13723e44ffc7ee2c2795f838 Mon Sep 17 00:00:00 2001
+From ec185479ebb5c833bca7da93731fed2760b57ba7 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 2b403dd8fb37d0ba13723e44ffc7ee2c2795f838 ]
+
@@ -16 +17,0 @@
-Cc: stable@dpdk.org
@@ -29 +30 @@
-index 9fb2bf481c..8e11d0b059 100644
+index e8e7e5ab60..610d657c2e 100644
@@ -42 +43 @@
-index fd653cbbfd..8a4598baee 100644
+index 5cf9f51c28..02cdf44fc8 100644
@@ -45 +46 @@
-@@ -80,6 +80,8 @@ do_recursive_call(void)
+@@ -82,6 +82,8 @@ do_recursive_call(void)
@@ -55 +56 @@
-index ebc4864bf8..c6d7d23313 100644
+index 6a4fa0b1d7..4142c22c1d 100644
@@ -58 +59 @@
-@@ -174,7 +174,9 @@ extern const char *prgname;
+@@ -173,7 +173,9 @@ extern const char *prgname;
@@ -69 +70 @@
-index 8ad6d40fcb..fe5dd5b02d 100644
+index 2704f5b927..f016e2f8f7 100644
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'bus/pci: fix build with MinGW 13' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (36 preceding siblings ...)
2025-10-27 16:19 ` patch 'test/debug: fix crash with mlx5 devices' " luca.boccassi
@ 2025-10-27 16:19 ` luca.boccassi
2025-10-27 16:19 ` patch 'net/mlx5: " luca.boccassi
` (39 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:19 UTC (permalink / raw)
To: Thomas Monjalon; +Cc: Bruce Richardson, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/8d68edf4b27bf7314f464d420763c8ca9a548191
Thanks.
Luca Boccassi
---
From 8d68edf4b27bf7314f464d420763c8ca9a548191 Mon Sep 17 00:00:00 2001
From: Thomas Monjalon <thomas@monjalon.net>
Date: Fri, 25 Jul 2025 20:23:59 +0200
Subject: [PATCH] bus/pci: fix build with MinGW 13
[ upstream commit 73e0c90c48ea393b2725263b32515f668f8f4839 ]
After an upgrade to MinGW version 13, some compilation errors appear:
drivers/bus/pci/windows/pci.c:362:58:
error: 'GUID_DEVCLASS_NETUIO' undeclared
drivers/bus/pci/windows/pci_netuio.c:57:39:
error: 'GUID_DEVINTERFACE_NETUIO' undeclared
The cause is MinGW has set NTDDI_VERSION to the highest version
without defining the expected NetUIO constants.
The case MinGW64 is added to define NetUIO constants.
Some comments are improved to better track includes requirements.
Fixes: 6605c7f02e24 ("bus/pci: fix build with Windows SDK >= 10.0.20253")
Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
---
drivers/bus/pci/windows/pci.c | 11 ++++++-----
drivers/bus/pci/windows/pci_netuio.h | 6 +++---
2 files changed, 9 insertions(+), 8 deletions(-)
diff --git a/drivers/bus/pci/windows/pci.c b/drivers/bus/pci/windows/pci.c
index 5cf05ce1a0..9b065092e6 100644
--- a/drivers/bus/pci/windows/pci.c
+++ b/drivers/bus/pci/windows/pci.c
@@ -11,18 +11,19 @@
#include <rte_memory.h>
#include <rte_bus_pci.h>
-#include "private.h"
-#include "pci_netuio.h"
-
+/* DEVPKEY_Device_Numa_Node should be defined in devpkey.h */
#include <devpkey.h>
-#include <regstr.h>
-
#if defined RTE_TOOLCHAIN_GCC && (__MINGW64_VERSION_MAJOR < 8)
#include <devpropdef.h>
DEFINE_DEVPROPKEY(DEVPKEY_Device_Numa_Node, 0x540b947e, 0x8b40, 0x45bc,
0xa8, 0xa2, 0x6a, 0x0b, 0x89, 0x4c, 0xbd, 0xa2, 3);
#endif
+#include <regstr.h>
+
+#include "private.h"
+#include "pci_netuio.h"
+
/*
* This code is used to simulate a PCI probe by parsing information in
* the registry hive for PCI devices.
diff --git a/drivers/bus/pci/windows/pci_netuio.h b/drivers/bus/pci/windows/pci_netuio.h
index 2f6c97ea73..8ac914920f 100644
--- a/drivers/bus/pci/windows/pci_netuio.h
+++ b/drivers/bus/pci/windows/pci_netuio.h
@@ -5,12 +5,12 @@
#ifndef _PCI_NETUIO_H_
#define _PCI_NETUIO_H_
-#if !defined(NTDDI_WIN10_FE) || NTDDI_VERSION < NTDDI_WIN10_FE
-/* GUID definition for device class netUIO */
+#if !defined(NTDDI_WIN10_FE) || NTDDI_VERSION < NTDDI_WIN10_FE || defined(__MINGW64__)
+/* GUID_DEVCLASS_NETUIO should be defined in devguid.h */
DEFINE_GUID(GUID_DEVCLASS_NETUIO, 0x78912bc1, 0xcb8e, 0x4b28,
0xa3, 0x29, 0xf3, 0x22, 0xeb, 0xad, 0xbe, 0x0f);
-/* GUID definition for the netuio device interface */
+/* GUID_DEVINTERFACE_NETUIO should be defined in ndisguid.h */
DEFINE_GUID(GUID_DEVINTERFACE_NETUIO, 0x08336f60, 0x0679, 0x4c6c,
0x85, 0xd2, 0xae, 0x7c, 0xed, 0x65, 0xff, 0xf7);
#endif
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:36.278965859 +0000
+++ 0039-bus-pci-fix-build-with-MinGW-13.patch 2025-10-27 15:54:34.811949950 +0000
@@ -1 +1 @@
-From 73e0c90c48ea393b2725263b32515f668f8f4839 Mon Sep 17 00:00:00 2001
+From 8d68edf4b27bf7314f464d420763c8ca9a548191 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 73e0c90c48ea393b2725263b32515f668f8f4839 ]
+
@@ -21 +22,0 @@
-Cc: stable@dpdk.org
@@ -31 +32 @@
-index e7e449306e..6f6f368cb7 100644
+index 5cf05ce1a0..9b065092e6 100644
@@ -34 +35 @@
-@@ -12,18 +12,19 @@
+@@ -11,18 +11,19 @@
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/mlx5: fix build with MinGW 13' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (37 preceding siblings ...)
2025-10-27 16:19 ` patch 'bus/pci: fix build with MinGW 13' " luca.boccassi
@ 2025-10-27 16:19 ` luca.boccassi
2025-10-27 16:19 ` patch 'dma/hisilicon: fix stop with pending transfers' " luca.boccassi
` (38 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:19 UTC (permalink / raw)
To: Thomas Monjalon; +Cc: Dariusz Sosnowski, Bruce Richardson, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/da3d12c6969ce2c5d344f371b5d4f0529634b5f1
Thanks.
Luca Boccassi
---
From da3d12c6969ce2c5d344f371b5d4f0529634b5f1 Mon Sep 17 00:00:00 2001
From: Thomas Monjalon <thomas@monjalon.net>
Date: Fri, 25 Jul 2025 21:28:09 +0200
Subject: [PATCH] net/mlx5: fix build with MinGW 13
[ upstream commit a333afabed3b659ea28a92470565bbd5a98b5b53 ]
After an upgrade to MinGW version 13, compilation breaks:
drivers/net/mlx5/windows/mlx5_ethdev_os.c:285:69: error:
'dev_link.<U1000>.<Uaf00>.link_autoneg' may be used uninitialized
This is because link_autoneg is never set in mlx5_link_update().
It can be set to the previous value (no change).
Also it does not make sense to check this value to return the update status
as it does not change.
Fixes: 6fbd73709ee4 ("net/mlx5: support link update on Windows")
Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
Acked-by: Dariusz Sosnowski <dsosnowski@nvidia.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
---
drivers/net/mlx5/windows/mlx5_ethdev_os.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/mlx5/windows/mlx5_ethdev_os.c b/drivers/net/mlx5/windows/mlx5_ethdev_os.c
index 32a9f599b2..e24ff367af 100644
--- a/drivers/net/mlx5/windows/mlx5_ethdev_os.c
+++ b/drivers/net/mlx5/windows/mlx5_ethdev_os.c
@@ -311,11 +311,11 @@ mlx5_link_update(struct rte_eth_dev *dev, int wait_to_complete)
dev_link.link_duplex = 1;
if (dev->data->dev_link.link_speed != dev_link.link_speed ||
dev->data->dev_link.link_duplex != dev_link.link_duplex ||
- dev->data->dev_link.link_autoneg != dev_link.link_autoneg ||
dev->data->dev_link.link_status != dev_link.link_status)
ret = 1;
else
ret = 0;
+ dev_link.link_autoneg = dev->data->dev_link.link_autoneg;
dev->data->dev_link = dev_link;
return ret;
}
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:36.310550877 +0000
+++ 0040-net-mlx5-fix-build-with-MinGW-13.patch 2025-10-27 15:54:34.811949950 +0000
@@ -1 +1 @@
-From a333afabed3b659ea28a92470565bbd5a98b5b53 Mon Sep 17 00:00:00 2001
+From da3d12c6969ce2c5d344f371b5d4f0529634b5f1 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit a333afabed3b659ea28a92470565bbd5a98b5b53 ]
+
@@ -17 +18,0 @@
-Cc: stable@dpdk.org
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'dma/hisilicon: fix stop with pending transfers' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (38 preceding siblings ...)
2025-10-27 16:19 ` patch 'net/mlx5: " luca.boccassi
@ 2025-10-27 16:19 ` luca.boccassi
2025-10-27 16:19 ` patch 'test/dma: fix failure condition' " luca.boccassi
` (37 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:19 UTC (permalink / raw)
To: Chengwen Feng; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/ff8d762481472039fe6f3001c83468f7c97bf9e9
Thanks.
Luca Boccassi
---
From ff8d762481472039fe6f3001c83468f7c97bf9e9 Mon Sep 17 00:00:00 2001
From: Chengwen Feng <fengchengwen@huawei.com>
Date: Mon, 13 Oct 2025 17:22:11 +0800
Subject: [PATCH] dma/hisilicon: fix stop with pending transfers
[ upstream commit 8aa458f1c44b9f6e73f75047aca77191dc79746f ]
Stop dmadev may fail if there are pending DMA transfers, we need make
sure there are no pending DMA transfers when stop.
This commit uses following scheme:
1. flag stop proc so that new request will not process.
2. setting drop flag for all descriptor to quick complete.
3. waiting dmadev to complete.
Fixes: 3c5f5f03a047 ("dma/hisilicon: add control path")
Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
---
drivers/dma/hisilicon/hisi_dmadev.c | 45 ++++++++++++++++++++++++-----
drivers/dma/hisilicon/hisi_dmadev.h | 2 ++
2 files changed, 39 insertions(+), 8 deletions(-)
diff --git a/drivers/dma/hisilicon/hisi_dmadev.c b/drivers/dma/hisilicon/hisi_dmadev.c
index 4db3b0554c..29aed3e156 100644
--- a/drivers/dma/hisilicon/hisi_dmadev.c
+++ b/drivers/dma/hisilicon/hisi_dmadev.c
@@ -378,6 +378,7 @@ hisi_dma_start(struct rte_dma_dev *dev)
hw->cq_head = 0;
hw->cqs_completed = 0;
hw->cqe_vld = 1;
+ hw->stop_proc = 0;
hw->submitted = 0;
hw->completed = 0;
hw->errors = 0;
@@ -389,12 +390,6 @@ hisi_dma_start(struct rte_dma_dev *dev)
return 0;
}
-static int
-hisi_dma_stop(struct rte_dma_dev *dev)
-{
- return hisi_dma_reset_hw(dev->data->dev_private);
-}
-
static int
hisi_dma_close(struct rte_dma_dev *dev)
{
@@ -456,6 +451,37 @@ hisi_dma_vchan_status(const struct rte_dma_dev *dev, uint16_t vchan,
return 0;
}
+static int
+hisi_dma_stop(struct rte_dma_dev *dev)
+{
+#define MAX_WAIT_MSEC 10
+ struct hisi_dma_dev *hw = dev->data->dev_private;
+ enum rte_dma_vchan_status status;
+ uint32_t i;
+
+ /* Flag stop processing new requests. */
+ hw->stop_proc = 1;
+ rte_delay_ms(1);
+
+ /* Force set drop flag so that the hardware can quickly complete. */
+ for (i = 0; i <= hw->sq_depth_mask; i++)
+ hw->sqe[i].dw0 |= SQE_DROP_FLAG;
+
+ i = 0;
+ do {
+ hisi_dma_vchan_status(dev, 0, &status);
+ if (status != RTE_DMA_VCHAN_ACTIVE)
+ break;
+ rte_delay_ms(1);
+ } while (i++ < MAX_WAIT_MSEC);
+ if (status == RTE_DMA_VCHAN_ACTIVE) {
+ HISI_DMA_ERR(hw, "dev is still active!");
+ return -EBUSY;
+ }
+
+ return hisi_dma_reset_hw(dev->data->dev_private);
+}
+
static void
hisi_dma_dump_range(struct hisi_dma_dev *hw, FILE *f, uint32_t start,
uint32_t end)
@@ -550,14 +576,14 @@ hisi_dma_dump(const struct rte_dma_dev *dev, FILE *f)
" revision: 0x%x queue_id: %u ring_size: %u\n"
" ridx: %u cridx: %u\n"
" sq_head: %u sq_tail: %u cq_sq_head: %u\n"
- " cq_head: %u cqs_completed: %u cqe_vld: %u\n"
+ " cq_head: %u cqs_completed: %u cqe_vld: %u stop_proc: %u\n"
" submitted: %" PRIu64 " completed: %" PRIu64 " errors: %"
PRIu64 " qfulls: %" PRIu64 "\n",
hw->revision, hw->queue_id,
hw->sq_depth_mask > 0 ? hw->sq_depth_mask + 1 : 0,
hw->ridx, hw->cridx,
hw->sq_head, hw->sq_tail, hw->cq_sq_head,
- hw->cq_head, hw->cqs_completed, hw->cqe_vld,
+ hw->cq_head, hw->cqs_completed, hw->cqe_vld, hw->stop_proc,
hw->submitted, hw->completed, hw->errors, hw->qfulls);
hisi_dma_dump_queue(hw, f);
hisi_dma_dump_common(hw, f);
@@ -575,6 +601,9 @@ hisi_dma_copy(void *dev_private, uint16_t vchan,
RTE_SET_USED(vchan);
+ if (unlikely(hw->stop_proc > 0))
+ return -EPERM;
+
if (((hw->sq_tail + 1) & hw->sq_depth_mask) == hw->sq_head) {
hw->qfulls++;
return -ENOSPC;
diff --git a/drivers/dma/hisilicon/hisi_dmadev.h b/drivers/dma/hisilicon/hisi_dmadev.h
index a57b5c759a..b9dd172c31 100644
--- a/drivers/dma/hisilicon/hisi_dmadev.h
+++ b/drivers/dma/hisilicon/hisi_dmadev.h
@@ -141,6 +141,7 @@ enum {
struct hisi_dma_sqe {
uint32_t dw0;
+#define SQE_DROP_FLAG BIT(4)
#define SQE_FENCE_FLAG BIT(10)
#define SQE_OPCODE_M2M 0x4
uint32_t dw1;
@@ -211,6 +212,7 @@ struct hisi_dma_dev {
*/
uint16_t cqs_completed;
uint8_t cqe_vld; /**< valid bit for CQE, will change for every round. */
+ volatile uint8_t stop_proc; /**< whether stop processing new requests. */
uint64_t submitted;
uint64_t completed;
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:36.342690329 +0000
+++ 0041-dma-hisilicon-fix-stop-with-pending-transfers.patch 2025-10-27 15:54:34.811949950 +0000
@@ -1 +1 @@
-From 8aa458f1c44b9f6e73f75047aca77191dc79746f Mon Sep 17 00:00:00 2001
+From ff8d762481472039fe6f3001c83468f7c97bf9e9 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 8aa458f1c44b9f6e73f75047aca77191dc79746f ]
+
@@ -15 +16,0 @@
-Cc: stable@dpdk.org
@@ -24 +25 @@
-index 019c4a8189..7575fb12d9 100644
+index 4db3b0554c..29aed3e156 100644
@@ -27 +28 @@
-@@ -376,6 +376,7 @@ hisi_dma_start(struct rte_dma_dev *dev)
+@@ -378,6 +378,7 @@ hisi_dma_start(struct rte_dma_dev *dev)
@@ -35 +36 @@
-@@ -387,12 +388,6 @@ hisi_dma_start(struct rte_dma_dev *dev)
+@@ -389,12 +390,6 @@ hisi_dma_start(struct rte_dma_dev *dev)
@@ -48 +49 @@
-@@ -454,6 +449,37 @@ hisi_dma_vchan_status(const struct rte_dma_dev *dev, uint16_t vchan,
+@@ -456,6 +451,37 @@ hisi_dma_vchan_status(const struct rte_dma_dev *dev, uint16_t vchan,
@@ -86 +87 @@
-@@ -548,14 +574,14 @@ hisi_dma_dump(const struct rte_dma_dev *dev, FILE *f)
+@@ -550,14 +576,14 @@ hisi_dma_dump(const struct rte_dma_dev *dev, FILE *f)
@@ -103 +104 @@
-@@ -573,6 +599,9 @@ hisi_dma_copy(void *dev_private, uint16_t vchan,
+@@ -575,6 +601,9 @@ hisi_dma_copy(void *dev_private, uint16_t vchan,
@@ -114 +115 @@
-index 90301e6b00..aab87c40be 100644
+index a57b5c759a..b9dd172c31 100644
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'test/dma: fix failure condition' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (39 preceding siblings ...)
2025-10-27 16:19 ` patch 'dma/hisilicon: fix stop with pending transfers' " luca.boccassi
@ 2025-10-27 16:19 ` luca.boccassi
2025-10-27 16:19 ` patch 'fib6: fix tbl8 allocation check logic' " luca.boccassi
` (36 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:19 UTC (permalink / raw)
To: Chengwen Feng; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/7e238136f9b59ffbf69e41f3933319cf7e4772e5
Thanks.
Luca Boccassi
---
From 7e238136f9b59ffbf69e41f3933319cf7e4772e5 Mon Sep 17 00:00:00 2001
From: Chengwen Feng <fengchengwen@huawei.com>
Date: Wed, 27 Aug 2025 09:28:28 +0800
Subject: [PATCH] test/dma: fix failure condition
[ upstream commit fabb8c0b7e5bef6dfd54a8faabdee59e05d4be7e ]
In the runtest() function, it will return error if the test return
value is less than 0.
But the 'copy' and 'error_handling' testcase may return 1 if failed
because its internal use or(||) operation.
This commit fix it by treating non-zero as error in runtest() function.
Fixes: 1b86a66a30c2 ("test/dma: add more comprehensive copy tests")
Fixes: 99d7ec4be237 ("test/dma: add failure handling tests")
Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
---
app/test/test_dmadev.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/test/test_dmadev.c b/app/test/test_dmadev.c
index fe62e98af8..f19349dc1c 100644
--- a/app/test/test_dmadev.c
+++ b/app/test/test_dmadev.c
@@ -46,7 +46,7 @@ runtest(const char *printable, int (*test_fn)(int16_t dev_id, uint16_t vchan), i
printf("DMA Dev %d: Running %s Tests %s\n", dev_id, printable,
check_err_stats ? " " : "(errors expected)");
for (i = 0; i < iterations; i++) {
- if (test_fn(dev_id, vchan) < 0)
+ if (test_fn(dev_id, vchan) != 0)
return -1;
rte_dma_stats_get(dev_id, 0, &stats);
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:36.375306255 +0000
+++ 0042-test-dma-fix-failure-condition.patch 2025-10-27 15:54:34.811949950 +0000
@@ -1 +1 @@
-From fabb8c0b7e5bef6dfd54a8faabdee59e05d4be7e Mon Sep 17 00:00:00 2001
+From 7e238136f9b59ffbf69e41f3933319cf7e4772e5 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit fabb8c0b7e5bef6dfd54a8faabdee59e05d4be7e ]
+
@@ -16 +17,0 @@
-Cc: stable@dpdk.org
@@ -24 +25 @@
-index e9a62a0ddf..950bb28ec9 100644
+index fe62e98af8..f19349dc1c 100644
@@ -27 +28 @@
-@@ -92,7 +92,7 @@ runtest(const void *args)
+@@ -46,7 +46,7 @@ runtest(const char *printable, int (*test_fn)(int16_t dev_id, uint16_t vchan), i
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'fib6: fix tbl8 allocation check logic' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (40 preceding siblings ...)
2025-10-27 16:19 ` patch 'test/dma: fix failure condition' " luca.boccassi
@ 2025-10-27 16:19 ` luca.boccassi
2025-10-27 16:19 ` patch 'vhost: fix double fetch when dequeue offloading' " luca.boccassi
` (35 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:19 UTC (permalink / raw)
To: Vladimir Medvedkin; +Cc: Robin Jarry, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/3c7542d852139c75aa9a1432229cdc6217673fff
Thanks.
Luca Boccassi
---
From 3c7542d852139c75aa9a1432229cdc6217673fff Mon Sep 17 00:00:00 2001
From: Vladimir Medvedkin <vladimir.medvedkin@intel.com>
Date: Tue, 14 Oct 2025 18:17:55 +0000
Subject: [PATCH] fib6: fix tbl8 allocation check logic
[ upstream commit f0db0f659a1f4192a4aca7ce2a298f272aa3af8f ]
Currently if there were 'n' preallocated tbl8 entries only 'n - 1' were
able to be used. Fix the logic allowing to use all preallocated tbl8
entries.
Fixes: c3e12e0f0354 ("fib: add dataplane algorithm for IPv6")
Signed-off-by: Vladimir Medvedkin <vladimir.medvedkin@intel.com>
Tested-by: Robin Jarry <rjarry@redhat.com>
---
lib/fib/trie.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/lib/fib/trie.c b/lib/fib/trie.c
index ca1c2fe3bc..8937ab46dc 100644
--- a/lib/fib/trie.c
+++ b/lib/fib/trie.c
@@ -570,8 +570,7 @@ trie_modify(struct rte_fib6 *fib, const uint8_t ip[RTE_FIB6_IPV6_ADDR_SIZE],
return 0;
}
- if ((depth > 24) && (dp->rsvd_tbl8s >=
- dp->number_tbl8s - depth_diff))
+ if ((depth > 24) && (dp->rsvd_tbl8s + depth_diff > dp->number_tbl8s))
return -ENOSPC;
node = rte_rib6_insert(rib, ip_masked, depth);
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:36.409653540 +0000
+++ 0043-fib6-fix-tbl8-allocation-check-logic.patch 2025-10-27 15:54:34.811949950 +0000
@@ -1 +1 @@
-From f0db0f659a1f4192a4aca7ce2a298f272aa3af8f Mon Sep 17 00:00:00 2001
+From 3c7542d852139c75aa9a1432229cdc6217673fff Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit f0db0f659a1f4192a4aca7ce2a298f272aa3af8f ]
+
@@ -11 +12,0 @@
-Cc: stable@dpdk.org
@@ -20 +21 @@
-index 5a9978b4ca..6427920c58 100644
+index ca1c2fe3bc..8937ab46dc 100644
@@ -23 +24 @@
-@@ -576,8 +576,7 @@ trie_modify(struct rte_fib6 *fib, const struct rte_ipv6_addr *ip,
+@@ -570,8 +570,7 @@ trie_modify(struct rte_fib6 *fib, const uint8_t ip[RTE_FIB6_IPV6_ADDR_SIZE],
@@ -32 +33 @@
- node = rte_rib6_insert(rib, &ip_masked, depth);
+ node = rte_rib6_insert(rib, ip_masked, depth);
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'vhost: fix double fetch when dequeue offloading' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (41 preceding siblings ...)
2025-10-27 16:19 ` patch 'fib6: fix tbl8 allocation check logic' " luca.boccassi
@ 2025-10-27 16:19 ` luca.boccassi
2025-10-27 16:19 ` patch 'net/ice/base: fix integer overflow on NVM init' " luca.boccassi
` (34 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:19 UTC (permalink / raw)
To: Yunjian Wang; +Cc: Maxime Coquelin, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/c92f022ea7c0d2df726ae97830463dab03208fe6
Thanks.
Luca Boccassi
---
From c92f022ea7c0d2df726ae97830463dab03208fe6 Mon Sep 17 00:00:00 2001
From: Yunjian Wang <wangyunjian@huawei.com>
Date: Fri, 10 Oct 2025 16:41:36 +0800
Subject: [PATCH] vhost: fix double fetch when dequeue offloading
[ upstream commit 285e6b8b187485cc69a175261e40d8d2727e20a3 ]
The hdr->csum_start does two successive reads from user space to read a
variable length data structure. The result overflow if the data structure
changes between the two reads.
To fix this, we can prevent double fetch issue by copying virtio_hdr to
the temporary variable.
Fixes: 4dc4e33ffa10 ("net/virtio: fix Rx checksum calculation")
Signed-off-by: Yunjian Wang <wangyunjian@huawei.com>
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
---
lib/vhost/virtio_net.c | 50 ++++++++++++++++++++++--------------------
1 file changed, 26 insertions(+), 24 deletions(-)
diff --git a/lib/vhost/virtio_net.c b/lib/vhost/virtio_net.c
index ec8d03d97f..c90964c935 100644
--- a/lib/vhost/virtio_net.c
+++ b/lib/vhost/virtio_net.c
@@ -2634,25 +2634,28 @@ vhost_dequeue_offload(struct virtio_net *dev, struct virtio_net_hdr *hdr,
}
}
-static __rte_noinline void
+static __rte_always_inline int
copy_vnet_hdr_from_desc(struct virtio_net_hdr *hdr,
- struct buf_vector *buf_vec)
+ const struct buf_vector *buf_vec,
+ uint16_t nr_vec)
{
- uint64_t len;
- uint64_t remain = sizeof(struct virtio_net_hdr);
- uint64_t src;
- uint64_t dst = (uint64_t)(uintptr_t)hdr;
+ size_t remain = sizeof(struct virtio_net_hdr);
+ uint8_t *dst = (uint8_t *)hdr;
- while (remain) {
- len = RTE_MIN(remain, buf_vec->buf_len);
- src = buf_vec->buf_addr;
- rte_memcpy((void *)(uintptr_t)dst,
- (void *)(uintptr_t)src, len);
+ while (remain > 0) {
+ size_t len = RTE_MIN(remain, buf_vec->buf_len);
+ const void *src = (const void *)(uintptr_t)buf_vec->buf_addr;
+ if (unlikely(nr_vec == 0))
+ return -1;
+
+ memcpy(dst, src, len);
remain -= len;
dst += len;
buf_vec++;
+ --nr_vec;
}
+ return 0;
}
static __rte_always_inline int
@@ -2679,16 +2682,12 @@ desc_to_mbuf(struct virtio_net *dev, struct vhost_virtqueue *vq,
*/
if (virtio_net_with_host_offload(dev)) {
- if (unlikely(buf_vec[0].buf_len < sizeof(struct virtio_net_hdr))) {
- /*
- * No luck, the virtio-net header doesn't fit
- * in a contiguous virtual area.
- */
- copy_vnet_hdr_from_desc(&tmp_hdr, buf_vec);
- hdr = &tmp_hdr;
- } else {
- hdr = (struct virtio_net_hdr *)((uintptr_t)buf_vec[0].buf_addr);
- }
+ if (unlikely(copy_vnet_hdr_from_desc(&tmp_hdr, buf_vec, nr_vec) != 0))
+ return -1;
+
+ /* ensure that compiler does not delay copy */
+ rte_compiler_barrier();
+ hdr = &tmp_hdr;
}
for (vec_idx = 0; vec_idx < nr_vec; vec_idx++) {
@@ -3048,7 +3047,6 @@ virtio_dev_tx_batch_packed(struct virtio_net *dev,
{
uint16_t avail_idx = vq->last_avail_idx;
uint32_t buf_offset = sizeof(struct virtio_net_hdr_mrg_rxbuf);
- struct virtio_net_hdr *hdr;
uintptr_t desc_addrs[PACKED_BATCH_SIZE];
uint16_t ids[PACKED_BATCH_SIZE];
uint16_t i;
@@ -3067,8 +3065,12 @@ virtio_dev_tx_batch_packed(struct virtio_net *dev,
if (virtio_net_with_host_offload(dev)) {
vhost_for_each_try_unroll(i, 0, PACKED_BATCH_SIZE) {
- hdr = (struct virtio_net_hdr *)(desc_addrs[i]);
- vhost_dequeue_offload(dev, hdr, pkts[i], legacy_ol_flags);
+ struct virtio_net_hdr hdr;
+
+ memcpy(&hdr, (void *)desc_addrs[i], sizeof(struct virtio_net_hdr));
+ rte_compiler_barrier();
+
+ vhost_dequeue_offload(dev, &hdr, pkts[i], legacy_ol_flags);
}
}
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:36.444357043 +0000
+++ 0044-vhost-fix-double-fetch-when-dequeue-offloading.patch 2025-10-27 15:54:34.811949950 +0000
@@ -1 +1 @@
-From 285e6b8b187485cc69a175261e40d8d2727e20a3 Mon Sep 17 00:00:00 2001
+From c92f022ea7c0d2df726ae97830463dab03208fe6 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 285e6b8b187485cc69a175261e40d8d2727e20a3 ]
+
@@ -14 +15,0 @@
-Cc: stable@dpdk.org
@@ -23 +24 @@
-index 77545d0a4d..0658b81de5 100644
+index ec8d03d97f..c90964c935 100644
@@ -26 +27 @@
-@@ -2870,25 +2870,28 @@ vhost_dequeue_offload(struct virtio_net *dev, struct virtio_net_hdr *hdr,
+@@ -2634,25 +2634,28 @@ vhost_dequeue_offload(struct virtio_net *dev, struct virtio_net_hdr *hdr,
@@ -66 +67 @@
-@@ -2917,16 +2920,12 @@ desc_to_mbuf(struct virtio_net *dev, struct vhost_virtqueue *vq,
+@@ -2679,16 +2682,12 @@ desc_to_mbuf(struct virtio_net *dev, struct vhost_virtqueue *vq,
@@ -89 +90 @@
-@@ -3372,7 +3371,6 @@ virtio_dev_tx_batch_packed(struct virtio_net *dev,
+@@ -3048,7 +3047,6 @@ virtio_dev_tx_batch_packed(struct virtio_net *dev,
@@ -97 +98 @@
-@@ -3391,8 +3389,12 @@ virtio_dev_tx_batch_packed(struct virtio_net *dev,
+@@ -3067,8 +3065,12 @@ virtio_dev_tx_batch_packed(struct virtio_net *dev,
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/ice/base: fix integer overflow on NVM init' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (42 preceding siblings ...)
2025-10-27 16:19 ` patch 'vhost: fix double fetch when dequeue offloading' " luca.boccassi
@ 2025-10-27 16:19 ` luca.boccassi
2025-10-27 16:19 ` patch 'net/ice: fix initialization with 8 ports' " luca.boccassi
` (33 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:19 UTC (permalink / raw)
To: Chinh Cao; +Cc: Anatoly Burakov, Bruce Richardson, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/09b50e601ae8b254661b42887f9243e728c97d0c
Thanks.
Luca Boccassi
---
From 09b50e601ae8b254661b42887f9243e728c97d0c Mon Sep 17 00:00:00 2001
From: Chinh Cao <chinh.t.cao@intel.com>
Date: Wed, 1 Oct 2025 13:29:04 +0100
Subject: [PATCH] net/ice/base: fix integer overflow on NVM init
[ upstream commit 96b1a23f3ea5614e5795307295234c15e0e99a1e ]
The shadow RAM size is defined as 16-bit unsigned, which may result in
overflows under certain scenarios. Fix the value to be 32-bit.
Fixes: a240ff50505b ("net/ice/base: add basic structures")
Signed-off-by: Chinh Cao <chinh.t.cao@intel.com>
Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
---
drivers/net/ice/base/ice_type.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/ice/base/ice_type.h b/drivers/net/ice/base/ice_type.h
index 0b4fe7a5bc..c568813589 100644
--- a/drivers/net/ice/base/ice_type.h
+++ b/drivers/net/ice/base/ice_type.h
@@ -832,7 +832,7 @@ struct ice_flash_info {
struct ice_orom_info orom; /* Option ROM version info */
struct ice_nvm_info nvm; /* NVM version information */
struct ice_bank_info banks; /* Flash Bank information */
- u16 sr_words; /* Shadow RAM size in words */
+ u32 sr_words; /* Shadow RAM size in words */
u32 flash_size; /* Size of available flash in bytes */
u8 blank_nvm_mode; /* is NVM empty (no FW present) */
};
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:36.479260314 +0000
+++ 0045-net-ice-base-fix-integer-overflow-on-NVM-init.patch 2025-10-27 15:54:34.815950051 +0000
@@ -1 +1 @@
-From 96b1a23f3ea5614e5795307295234c15e0e99a1e Mon Sep 17 00:00:00 2001
+From 09b50e601ae8b254661b42887f9243e728c97d0c Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 96b1a23f3ea5614e5795307295234c15e0e99a1e ]
+
@@ -10 +11,0 @@
-Cc: stable@dpdk.org
@@ -16 +17 @@
- drivers/net/intel/ice/base/ice_type.h | 2 +-
+ drivers/net/ice/base/ice_type.h | 2 +-
@@ -19,5 +20,5 @@
-diff --git a/drivers/net/intel/ice/base/ice_type.h b/drivers/net/intel/ice/base/ice_type.h
-index ae3b944d6e..5f1f1a2f13 100644
---- a/drivers/net/intel/ice/base/ice_type.h
-+++ b/drivers/net/intel/ice/base/ice_type.h
-@@ -982,7 +982,7 @@ struct ice_flash_info {
+diff --git a/drivers/net/ice/base/ice_type.h b/drivers/net/ice/base/ice_type.h
+index 0b4fe7a5bc..c568813589 100644
+--- a/drivers/net/ice/base/ice_type.h
++++ b/drivers/net/ice/base/ice_type.h
+@@ -832,7 +832,7 @@ struct ice_flash_info {
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/ice: fix initialization with 8 ports' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (43 preceding siblings ...)
2025-10-27 16:19 ` patch 'net/ice/base: fix integer overflow on NVM init' " luca.boccassi
@ 2025-10-27 16:19 ` luca.boccassi
2025-10-27 16:19 ` patch 'net/ice: remove indirection for FDIR filters' " luca.boccassi
` (32 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:19 UTC (permalink / raw)
To: Bruce Richardson; +Cc: Kirill Rybalchenko, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/5f8d3e7763fd6250bb977012cc1b435835e9689a
Thanks.
Luca Boccassi
---
From 5f8d3e7763fd6250bb977012cc1b435835e9689a Mon Sep 17 00:00:00 2001
From: Bruce Richardson <bruce.richardson@intel.com>
Date: Tue, 30 Sep 2025 15:28:50 +0100
Subject: [PATCH] net/ice: fix initialization with 8 ports
[ upstream commit 17a8fc206178c6b354a8fde04c23cf29db044961 ]
When initializing an 8-port device, the ACL configuration
failed with the adminq returning an ENOMEM status from the
sixth port onwards. Fix this issue by halving the depth, and
therefore the space required, when using a device with >4 PFs.
Fixes: 40d466fa9f76 ("net/ice: support ACL filter in DCF")
Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Kirill Rybalchenko <kirill.rybalchenko@intel.com>
---
drivers/net/ice/ice_acl_filter.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/drivers/net/ice/ice_acl_filter.c b/drivers/net/ice/ice_acl_filter.c
index 8fe6f5aeb0..5cbde233e6 100644
--- a/drivers/net/ice/ice_acl_filter.c
+++ b/drivers/net/ice/ice_acl_filter.c
@@ -115,7 +115,10 @@ ice_acl_setup(struct ice_pf *pf)
else
params.width = ICE_AQC_ACL_KEY_WIDTH_BYTES * 3;
- params.depth = ICE_AQC_ACL_TCAM_DEPTH;
+ if (pf_num > 4)
+ params.depth = ICE_AQC_ACL_TCAM_DEPTH / 2;
+ else
+ params.depth = ICE_AQC_ACL_TCAM_DEPTH;
params.entry_act_pairs = 1;
params.concurr = false;
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:36.514212498 +0000
+++ 0046-net-ice-fix-initialization-with-8-ports.patch 2025-10-27 15:54:34.815950051 +0000
@@ -1 +1 @@
-From 17a8fc206178c6b354a8fde04c23cf29db044961 Mon Sep 17 00:00:00 2001
+From 5f8d3e7763fd6250bb977012cc1b435835e9689a Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 17a8fc206178c6b354a8fde04c23cf29db044961 ]
+
@@ -12 +13,0 @@
-Cc: stable@dpdk.org
@@ -17 +18 @@
- drivers/net/intel/ice/ice_acl_filter.c | 5 ++++-
+ drivers/net/ice/ice_acl_filter.c | 5 ++++-
@@ -20,5 +21,5 @@
-diff --git a/drivers/net/intel/ice/ice_acl_filter.c b/drivers/net/intel/ice/ice_acl_filter.c
-index 83cb3e36f9..38e30a4f62 100644
---- a/drivers/net/intel/ice/ice_acl_filter.c
-+++ b/drivers/net/intel/ice/ice_acl_filter.c
-@@ -114,7 +114,10 @@ ice_acl_setup(struct ice_pf *pf)
+diff --git a/drivers/net/ice/ice_acl_filter.c b/drivers/net/ice/ice_acl_filter.c
+index 8fe6f5aeb0..5cbde233e6 100644
+--- a/drivers/net/ice/ice_acl_filter.c
++++ b/drivers/net/ice/ice_acl_filter.c
+@@ -115,7 +115,10 @@ ice_acl_setup(struct ice_pf *pf)
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/ice: remove indirection for FDIR filters' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (44 preceding siblings ...)
2025-10-27 16:19 ` patch 'net/ice: fix initialization with 8 ports' " luca.boccassi
@ 2025-10-27 16:19 ` luca.boccassi
2025-10-27 16:19 ` patch 'net/ice: fix memory leak in raw pattern parse' " luca.boccassi
` (31 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:19 UTC (permalink / raw)
To: Anatoly Burakov; +Cc: Bruce Richardson, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/b16d67cc79ec48e31b1478e81bd5648b713c50f4
Thanks.
Luca Boccassi
---
From b16d67cc79ec48e31b1478e81bd5648b713c50f4 Mon Sep 17 00:00:00 2001
From: Anatoly Burakov <anatoly.burakov@intel.com>
Date: Fri, 10 Oct 2025 14:13:19 +0100
Subject: [PATCH] net/ice: remove indirection for FDIR filters
[ upstream commit f1dd6c3fdf974810e9a0d57920a4aa66fa16342e ]
Currently, when filters are created for FDIR, they are allocated
dynamically using `ice_malloc()`. Not only this is inconsistent with hash
filter code paths (hash uses embedded structures), this is also creating
unnecessary indirection and complexity, and creates a memory leak where,
if something fails during raw pattern parse, the profile memory isn't
deallocated.
Since there is no actual reason for why FDIR filter profile must use
indirection, instead of fixing the memory leak just avoid it altogether
by making the filter profile an embedded struct. When parsing begins, the
entire scratch filter structure is zeroed out anyway, so there is no need
to add any additional zero-initialization code.
Fixes: 25be39cc1760 ("net/ice: enable protocol agnostic flow offloading in FDIR")
Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
---
drivers/net/ice/ice_ethdev.h | 2 +-
drivers/net/ice/ice_fdir_filter.c | 30 +++++++++++-------------------
2 files changed, 12 insertions(+), 20 deletions(-)
diff --git a/drivers/net/ice/ice_ethdev.h b/drivers/net/ice/ice_ethdev.h
index 9799cad394..7cee77b898 100644
--- a/drivers/net/ice/ice_ethdev.h
+++ b/drivers/net/ice/ice_ethdev.h
@@ -345,7 +345,7 @@ struct ice_fdir_filter_conf {
uint64_t input_set_i; /* only for tunnel inner fields */
uint32_t mark_flag;
- struct ice_parser_profile *prof;
+ struct ice_parser_profile prof;
bool parser_ena;
u8 *pkt_buf;
u8 pkt_len;
diff --git a/drivers/net/ice/ice_fdir_filter.c b/drivers/net/ice/ice_fdir_filter.c
index 7e97547d8b..8829041c47 100644
--- a/drivers/net/ice/ice_fdir_filter.c
+++ b/drivers/net/ice/ice_fdir_filter.c
@@ -1330,7 +1330,7 @@ ice_fdir_create_filter(struct ice_adapter *ad,
if (filter->parser_ena) {
struct ice_hw *hw = ICE_PF_TO_HW(pf);
- int id = ice_find_first_bit(filter->prof->ptypes, UINT16_MAX);
+ int id = ice_find_first_bit(filter->prof.ptypes, UINT16_MAX);
int ptg = hw->blk[ICE_BLK_FD].xlt1.t[id];
u16 ctrl_vsi = pf->fdir.fdir_vsi->idx;
u16 main_vsi = pf->main_vsi->idx;
@@ -1340,11 +1340,11 @@ ice_fdir_create_filter(struct ice_adapter *ad,
if (pi->fdir_actived_cnt != 0) {
for (i = 0; i < ICE_MAX_FV_WORDS; i++)
if (pi->prof.fv[i].proto_id !=
- filter->prof->fv[i].proto_id ||
+ filter->prof.fv[i].proto_id ||
pi->prof.fv[i].offset !=
- filter->prof->fv[i].offset ||
+ filter->prof.fv[i].offset ||
pi->prof.fv[i].msk !=
- filter->prof->fv[i].msk)
+ filter->prof.fv[i].msk)
break;
if (i == ICE_MAX_FV_WORDS) {
fv_found = true;
@@ -1354,7 +1354,7 @@ ice_fdir_create_filter(struct ice_adapter *ad,
if (!fv_found) {
ret = ice_flow_set_hw_prof(hw, main_vsi, ctrl_vsi,
- filter->prof, ICE_BLK_FD);
+ &filter->prof, ICE_BLK_FD);
if (ret)
goto error;
}
@@ -1364,12 +1364,12 @@ ice_fdir_create_filter(struct ice_adapter *ad,
goto error;
if (!fv_found) {
- for (i = 0; i < filter->prof->fv_num; i++) {
+ for (i = 0; i < filter->prof.fv_num; i++) {
pi->prof.fv[i].proto_id =
- filter->prof->fv[i].proto_id;
+ filter->prof.fv[i].proto_id;
pi->prof.fv[i].offset =
- filter->prof->fv[i].offset;
- pi->prof.fv[i].msk = filter->prof->fv[i].msk;
+ filter->prof.fv[i].offset;
+ pi->prof.fv[i].msk = filter->prof.fv[i].msk;
}
pi->fdir_actived_cnt = 1;
}
@@ -1467,7 +1467,6 @@ free_entry:
return -rte_errno;
error:
- rte_free(filter->prof);
rte_free(filter->pkt_buf);
return -rte_errno;
}
@@ -1489,7 +1488,7 @@ ice_fdir_destroy_filter(struct ice_adapter *ad,
if (filter->parser_ena) {
struct ice_hw *hw = ICE_PF_TO_HW(pf);
- int id = ice_find_first_bit(filter->prof->ptypes, UINT16_MAX);
+ int id = ice_find_first_bit(filter->prof.ptypes, UINT16_MAX);
int ptg = hw->blk[ICE_BLK_FD].xlt1.t[id];
u16 ctrl_vsi = pf->fdir.fdir_vsi->idx;
u16 main_vsi = pf->main_vsi->idx;
@@ -1517,7 +1516,6 @@ ice_fdir_destroy_filter(struct ice_adapter *ad,
flow->rule = NULL;
- rte_free(filter->prof);
rte_free(filter->pkt_buf);
rte_free(filter);
@@ -1944,13 +1942,8 @@ ice_fdir_parse_pattern(__rte_unused struct ice_adapter *ad,
if (!tmp_mask)
return -rte_errno;
- filter->prof = (struct ice_parser_profile *)
- ice_malloc(&ad->hw, sizeof(*filter->prof));
- if (!filter->prof)
- return -ENOMEM;
-
if (ice_parser_profile_init(&rslt, tmp_spec, tmp_mask,
- pkt_len, ICE_BLK_FD, true, filter->prof))
+ pkt_len, ICE_BLK_FD, true, &filter->prof))
return -rte_errno;
u8 *pkt_buf = (u8 *)ice_malloc(&ad->hw, pkt_len + 1);
@@ -2509,7 +2502,6 @@ ice_fdir_parse(struct ice_adapter *ad,
rte_free(item);
return ret;
error:
- rte_free(filter->prof);
rte_free(filter->pkt_buf);
rte_free(item);
return ret;
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:36.548631009 +0000
+++ 0047-net-ice-remove-indirection-for-FDIR-filters.patch 2025-10-27 15:54:34.815950051 +0000
@@ -1 +1 @@
-From f1dd6c3fdf974810e9a0d57920a4aa66fa16342e Mon Sep 17 00:00:00 2001
+From b16d67cc79ec48e31b1478e81bd5648b713c50f4 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit f1dd6c3fdf974810e9a0d57920a4aa66fa16342e ]
+
@@ -20 +21,0 @@
-Cc: stable@dpdk.org
@@ -25,2 +26,2 @@
- drivers/net/intel/ice/ice_ethdev.h | 2 +-
- drivers/net/intel/ice/ice_fdir_filter.c | 30 +++++++++----------------
+ drivers/net/ice/ice_ethdev.h | 2 +-
+ drivers/net/ice/ice_fdir_filter.c | 30 +++++++++++-------------------
@@ -29,5 +30,5 @@
-diff --git a/drivers/net/intel/ice/ice_ethdev.h b/drivers/net/intel/ice/ice_ethdev.h
-index a0d2082206..6478d6dfbd 100644
---- a/drivers/net/intel/ice/ice_ethdev.h
-+++ b/drivers/net/intel/ice/ice_ethdev.h
-@@ -379,7 +379,7 @@ struct ice_fdir_filter_conf {
+diff --git a/drivers/net/ice/ice_ethdev.h b/drivers/net/ice/ice_ethdev.h
+index 9799cad394..7cee77b898 100644
+--- a/drivers/net/ice/ice_ethdev.h
++++ b/drivers/net/ice/ice_ethdev.h
+@@ -345,7 +345,7 @@ struct ice_fdir_filter_conf {
@@ -42,5 +43,5 @@
-diff --git a/drivers/net/intel/ice/ice_fdir_filter.c b/drivers/net/intel/ice/ice_fdir_filter.c
-index d41d223d52..d593624792 100644
---- a/drivers/net/intel/ice/ice_fdir_filter.c
-+++ b/drivers/net/intel/ice/ice_fdir_filter.c
-@@ -1314,7 +1314,7 @@ ice_fdir_create_filter(struct ice_adapter *ad,
+diff --git a/drivers/net/ice/ice_fdir_filter.c b/drivers/net/ice/ice_fdir_filter.c
+index 7e97547d8b..8829041c47 100644
+--- a/drivers/net/ice/ice_fdir_filter.c
++++ b/drivers/net/ice/ice_fdir_filter.c
+@@ -1330,7 +1330,7 @@ ice_fdir_create_filter(struct ice_adapter *ad,
@@ -55 +56 @@
-@@ -1324,11 +1324,11 @@ ice_fdir_create_filter(struct ice_adapter *ad,
+@@ -1340,11 +1340,11 @@ ice_fdir_create_filter(struct ice_adapter *ad,
@@ -70 +71 @@
-@@ -1338,7 +1338,7 @@ ice_fdir_create_filter(struct ice_adapter *ad,
+@@ -1354,7 +1354,7 @@ ice_fdir_create_filter(struct ice_adapter *ad,
@@ -79 +80 @@
-@@ -1348,12 +1348,12 @@ ice_fdir_create_filter(struct ice_adapter *ad,
+@@ -1364,12 +1364,12 @@ ice_fdir_create_filter(struct ice_adapter *ad,
@@ -96 +97 @@
-@@ -1451,7 +1451,6 @@ free_entry:
+@@ -1467,7 +1467,6 @@ free_entry:
@@ -104 +105 @@
-@@ -1473,7 +1472,7 @@ ice_fdir_destroy_filter(struct ice_adapter *ad,
+@@ -1489,7 +1488,7 @@ ice_fdir_destroy_filter(struct ice_adapter *ad,
@@ -113 +114 @@
-@@ -1501,7 +1500,6 @@ ice_fdir_destroy_filter(struct ice_adapter *ad,
+@@ -1517,7 +1516,6 @@ ice_fdir_destroy_filter(struct ice_adapter *ad,
@@ -121 +122 @@
-@@ -1928,13 +1926,8 @@ ice_fdir_parse_pattern(__rte_unused struct ice_adapter *ad,
+@@ -1944,13 +1942,8 @@ ice_fdir_parse_pattern(__rte_unused struct ice_adapter *ad,
@@ -136 +137 @@
-@@ -2495,7 +2488,6 @@ ice_fdir_parse(struct ice_adapter *ad,
+@@ -2509,7 +2502,6 @@ ice_fdir_parse(struct ice_adapter *ad,
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/ice: fix memory leak in raw pattern parse' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (45 preceding siblings ...)
2025-10-27 16:19 ` patch 'net/ice: remove indirection for FDIR filters' " luca.boccassi
@ 2025-10-27 16:19 ` luca.boccassi
2025-10-27 16:19 ` patch 'net/i40e: fix symmetric Toeplitz hashing for SCTP' " luca.boccassi
` (30 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:19 UTC (permalink / raw)
To: Anatoly Burakov; +Cc: Bruce Richardson, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/10383a47db49bcb93f0ef91aa46abee9f306fd5c
Thanks.
Luca Boccassi
---
From 10383a47db49bcb93f0ef91aa46abee9f306fd5c Mon Sep 17 00:00:00 2001
From: Anatoly Burakov <anatoly.burakov@intel.com>
Date: Fri, 10 Oct 2025 14:13:20 +0100
Subject: [PATCH] net/ice: fix memory leak in raw pattern parse
[ upstream commit 3938eeec989181216ea3f9cc8eee931a2915ca5d ]
Currently, when parsing rte_flow raw type items, we allocate some
internal structures, but if errors happen down the line we just quit and
never free the memory we just allocated. Fix this by adding an error
cleanup section.
Fixes: 848de9572c83 ("net/ice: fix raw flow input pattern parsing")
Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
---
drivers/net/ice/ice_fdir_filter.c | 28 ++++++++++++++++++----------
1 file changed, 18 insertions(+), 10 deletions(-)
diff --git a/drivers/net/ice/ice_fdir_filter.c b/drivers/net/ice/ice_fdir_filter.c
index 8829041c47..e509e496b1 100644
--- a/drivers/net/ice/ice_fdir_filter.c
+++ b/drivers/net/ice/ice_fdir_filter.c
@@ -1881,7 +1881,7 @@ ice_fdir_parse_pattern(__rte_unused struct ice_adapter *ad,
uint16_t tmp_val = 0;
uint16_t pkt_len = 0;
uint8_t tmp = 0;
- int i, j;
+ int i, j, ret_val;
pkt_len = strlen((char *)(uintptr_t)raw_spec->pattern);
if (strlen((char *)(uintptr_t)raw_mask->pattern) !=
@@ -1936,19 +1936,22 @@ ice_fdir_parse_pattern(__rte_unused struct ice_adapter *ad,
pkt_len /= 2;
- if (ice_parser_run(ad->psr, tmp_spec, pkt_len, &rslt))
- return -rte_errno;
-
- if (!tmp_mask)
- return -rte_errno;
+ if (ice_parser_run(ad->psr, tmp_spec, pkt_len, &rslt)) {
+ ret_val = -rte_errno;
+ goto raw_error;
+ }
if (ice_parser_profile_init(&rslt, tmp_spec, tmp_mask,
- pkt_len, ICE_BLK_FD, true, &filter->prof))
- return -rte_errno;
+ pkt_len, ICE_BLK_FD, true, &filter->prof)) {
+ ret_val = -rte_errno;
+ goto raw_error;
+ }
u8 *pkt_buf = (u8 *)ice_malloc(&ad->hw, pkt_len + 1);
- if (!pkt_buf)
- return -ENOMEM;
+ if (!pkt_buf) {
+ ret_val = -ENOMEM;
+ goto raw_error;
+ }
rte_memcpy(pkt_buf, tmp_spec, pkt_len);
filter->pkt_buf = pkt_buf;
@@ -1959,6 +1962,11 @@ ice_fdir_parse_pattern(__rte_unused struct ice_adapter *ad,
rte_free(tmp_spec);
rte_free(tmp_mask);
break;
+
+raw_error:
+ rte_free(tmp_spec);
+ rte_free(tmp_mask);
+ return ret_val;
}
case RTE_FLOW_ITEM_TYPE_ETH:
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:36.581173886 +0000
+++ 0048-net-ice-fix-memory-leak-in-raw-pattern-parse.patch 2025-10-27 15:54:34.815950051 +0000
@@ -1 +1 @@
-From 3938eeec989181216ea3f9cc8eee931a2915ca5d Mon Sep 17 00:00:00 2001
+From 10383a47db49bcb93f0ef91aa46abee9f306fd5c Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 3938eeec989181216ea3f9cc8eee931a2915ca5d ]
+
@@ -12 +13,0 @@
-Cc: stable@dpdk.org
@@ -17 +18 @@
- drivers/net/intel/ice/ice_fdir_filter.c | 28 ++++++++++++++++---------
+ drivers/net/ice/ice_fdir_filter.c | 28 ++++++++++++++++++----------
@@ -20,5 +21,5 @@
-diff --git a/drivers/net/intel/ice/ice_fdir_filter.c b/drivers/net/intel/ice/ice_fdir_filter.c
-index d593624792..9dfe5c02cb 100644
---- a/drivers/net/intel/ice/ice_fdir_filter.c
-+++ b/drivers/net/intel/ice/ice_fdir_filter.c
-@@ -1865,7 +1865,7 @@ ice_fdir_parse_pattern(__rte_unused struct ice_adapter *ad,
+diff --git a/drivers/net/ice/ice_fdir_filter.c b/drivers/net/ice/ice_fdir_filter.c
+index 8829041c47..e509e496b1 100644
+--- a/drivers/net/ice/ice_fdir_filter.c
++++ b/drivers/net/ice/ice_fdir_filter.c
+@@ -1881,7 +1881,7 @@ ice_fdir_parse_pattern(__rte_unused struct ice_adapter *ad,
@@ -33 +34 @@
-@@ -1920,19 +1920,22 @@ ice_fdir_parse_pattern(__rte_unused struct ice_adapter *ad,
+@@ -1936,19 +1936,22 @@ ice_fdir_parse_pattern(__rte_unused struct ice_adapter *ad,
@@ -65 +66 @@
-@@ -1943,6 +1946,11 @@ ice_fdir_parse_pattern(__rte_unused struct ice_adapter *ad,
+@@ -1959,6 +1962,11 @@ ice_fdir_parse_pattern(__rte_unused struct ice_adapter *ad,
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/i40e: fix symmetric Toeplitz hashing for SCTP' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (46 preceding siblings ...)
2025-10-27 16:19 ` patch 'net/ice: fix memory leak in raw pattern parse' " luca.boccassi
@ 2025-10-27 16:19 ` luca.boccassi
2025-10-27 16:19 ` patch 'net/mlx5: fix multicast' " luca.boccassi
` (29 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:19 UTC (permalink / raw)
To: Anurag Mandal; +Cc: Bruce Richardson, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/453ba3c522af037bd77cd42e1b309af45bb01686
Thanks.
Luca Boccassi
---
From 453ba3c522af037bd77cd42e1b309af45bb01686 Mon Sep 17 00:00:00 2001
From: Anurag Mandal <anurag.mandal@intel.com>
Date: Wed, 15 Oct 2025 23:41:50 +0530
Subject: [PATCH] net/i40e: fix symmetric Toeplitz hashing for SCTP
[ upstream commit 09937a3646f83ffe9d0d27896066c3f3f6e4ee0c ]
When symmetric toeplitz is configured for SCTP, packets belonging
to the same SCTP session are getting distributed to multiple queues
due to improper hash computation.
Removed SCTP Verification Tag from hash computation of symmetric toeplitz
as it changes for same SCTP session.
Tested the following with the fix & enabling symmetric toeplitz for
SCTP:
1. Packets belonging to the same SCTP session getting into the same
queue.
2. Packets belonging to the different SCTP sessions getting
distributed to multiple queues.
Fixes: ef4c16fd9148 ("net/i40e: refactor RSS flow")
Signed-off-by: Anurag Mandal <anurag.mandal@intel.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
---
.mailmap | 1 +
drivers/net/i40e/i40e_hash.c | 16 ++++++++++++++--
2 files changed, 15 insertions(+), 2 deletions(-)
diff --git a/.mailmap b/.mailmap
index f53fdf0d85..6a7af0e981 100644
--- a/.mailmap
+++ b/.mailmap
@@ -119,6 +119,7 @@ Antara Ganesh Kolar <antara.ganesh.kolar@intel.com>
Anthony Fee <anthonyx.fee@intel.com>
Antonio Fischetti <antonio.fischetti@intel.com>
Anupam Kapoor <anupam.kapoor@gmail.com>
+Anurag Mandal <anurag.mandal@intel.com>
Apeksha Gupta <apeksha.gupta@nxp.com>
Archana Muniganti <marchana@marvell.com> <muniganti.archana@caviumnetworks.com>
Archit Pandey <architpandeynitk@gmail.com>
diff --git a/drivers/net/i40e/i40e_hash.c b/drivers/net/i40e/i40e_hash.c
index 0c84818977..c71c792f1c 100644
--- a/drivers/net/i40e/i40e_hash.c
+++ b/drivers/net/i40e/i40e_hash.c
@@ -561,7 +561,7 @@ i40e_hash_get_pattern_pctypes(const struct rte_eth_dev *dev,
}
static uint64_t
-i40e_hash_get_inset(uint64_t rss_types)
+i40e_hash_get_inset(uint64_t rss_types, bool symmetric_enable)
{
uint64_t mask, inset = 0;
int i;
@@ -608,6 +608,17 @@ i40e_hash_get_inset(uint64_t rss_types)
I40E_INSET_IPV4_SRC | I40E_INSET_IPV6_SRC);
}
+ /* SCTP Verification Tag is not required in hash computation for SYMMETRIC_TOEPLITZ */
+ if (symmetric_enable) {
+ mask = rss_types & RTE_ETH_RSS_NONFRAG_IPV4_SCTP;
+ if (mask == RTE_ETH_RSS_NONFRAG_IPV4_SCTP)
+ inset &= ~I40E_INSET_SCTP_VT;
+
+ mask = rss_types & RTE_ETH_RSS_NONFRAG_IPV6_SCTP;
+ if (mask == RTE_ETH_RSS_NONFRAG_IPV6_SCTP)
+ inset &= ~I40E_INSET_SCTP_VT;
+ }
+
return inset;
}
@@ -1113,6 +1124,7 @@ i40e_hash_parse_pattern_act(const struct rte_eth_dev *dev,
RTE_FLOW_ERROR_TYPE_ACTION_CONF,
NULL,
"RSS Queues not supported when pattern specified");
+ rss_conf->symmetric_enable = false; /* by default, symmetric is disabled */
switch (rss_act->func) {
case RTE_ETH_HASH_FUNCTION_SYMMETRIC_TOEPLITZ:
@@ -1140,7 +1152,7 @@ i40e_hash_parse_pattern_act(const struct rte_eth_dev *dev,
rss_conf->conf.func = rss_act->func;
rss_conf->conf.types = rss_act->types;
- rss_conf->inset = i40e_hash_get_inset(rss_act->types);
+ rss_conf->inset = i40e_hash_get_inset(rss_act->types, rss_conf->symmetric_enable);
return i40e_hash_get_pattern_pctypes(dev, pattern, rss_act,
rss_conf, error);
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:36.614275485 +0000
+++ 0049-net-i40e-fix-symmetric-Toeplitz-hashing-for-SCTP.patch 2025-10-27 15:54:34.819950152 +0000
@@ -1 +1 @@
-From 09937a3646f83ffe9d0d27896066c3f3f6e4ee0c Mon Sep 17 00:00:00 2001
+From 453ba3c522af037bd77cd42e1b309af45bb01686 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 09937a3646f83ffe9d0d27896066c3f3f6e4ee0c ]
+
@@ -21 +22,0 @@
-Cc: stable@dpdk.org
@@ -26,2 +27,2 @@
- .mailmap | 1 +
- drivers/net/intel/i40e/i40e_hash.c | 16 ++++++++++++++--
+ .mailmap | 1 +
+ drivers/net/i40e/i40e_hash.c | 16 ++++++++++++++--
@@ -31 +32 @@
-index c14288e1c7..adce7ee286 100644
+index f53fdf0d85..6a7af0e981 100644
@@ -34 +35,2 @@
-@@ -136,6 +136,7 @@ Anthony Harivel <aharivel@redhat.com>
+@@ -119,6 +119,7 @@ Antara Ganesh Kolar <antara.ganesh.kolar@intel.com>
+ Anthony Fee <anthonyx.fee@intel.com>
@@ -36 +37,0 @@
- Anup Prabhu <aprabhu@marvell.com>
@@ -42,4 +43,4 @@
-diff --git a/drivers/net/intel/i40e/i40e_hash.c b/drivers/net/intel/i40e/i40e_hash.c
-index 02e1457d80..3149682197 100644
---- a/drivers/net/intel/i40e/i40e_hash.c
-+++ b/drivers/net/intel/i40e/i40e_hash.c
+diff --git a/drivers/net/i40e/i40e_hash.c b/drivers/net/i40e/i40e_hash.c
+index 0c84818977..c71c792f1c 100644
+--- a/drivers/net/i40e/i40e_hash.c
++++ b/drivers/net/i40e/i40e_hash.c
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/mlx5: fix multicast' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (47 preceding siblings ...)
2025-10-27 16:19 ` patch 'net/i40e: fix symmetric Toeplitz hashing for SCTP' " luca.boccassi
@ 2025-10-27 16:19 ` luca.boccassi
2025-10-27 16:19 ` patch 'net/mlx5: fix MTU initialization' " luca.boccassi
` (28 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:19 UTC (permalink / raw)
To: Gavin Li; +Cc: Viacheslav Ovsiienko, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/58a6421bc396d0f95c3e9e456bb824b32c5bd014
Thanks.
Luca Boccassi
---
From 58a6421bc396d0f95c3e9e456bb824b32c5bd014 Mon Sep 17 00:00:00 2001
From: Gavin Li <gavinl@nvidia.com>
Date: Fri, 29 Aug 2025 12:08:30 +0300
Subject: [PATCH] net/mlx5: fix multicast
[ upstream commit 8c06434cd9e44ef8a4db2eb7e3300c7791c4e7b4 ]
Device multicast MAC addresses are managed using the mac_addr_add and
mac_addr_remove APIs.
In the mlx5_dev_spawn function, devices such as PF, VFs, and SFs obtain
the MAC addresses configured in netdev via netlink and store them in the
PMD device data, which also includes multicast MAC addresses. Default
rules are created for each MAC address to filter traffic accordingly.
Previously, multicast MAC address flows were mistakenly disabled, which
caused mac_addr_add to stop functioning for multicast MAC addresses,
resulting in missed multicast traffic.
To address this, default rules for multicast MAC addresses created by
PMD should now be set up within mlx5_traffic_enable to properly update
and manage multicast MAC address rules.
Fixes: 2d0665a7f771 ("net/mlx5: align PF and VF/SF MAC address handling")
Signed-off-by: Gavin Li <gavinl@nvidia.com>
Acked-by: Viacheslav Ovsiienko <viacheslavo@nvidia.com>
---
drivers/net/mlx5/mlx5_trigger.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/drivers/net/mlx5/mlx5_trigger.c b/drivers/net/mlx5/mlx5_trigger.c
index 198eeb019c..af25af47f8 100644
--- a/drivers/net/mlx5/mlx5_trigger.c
+++ b/drivers/net/mlx5/mlx5_trigger.c
@@ -1705,7 +1705,10 @@ mlx5_traffic_enable(struct rte_eth_dev *dev)
for (i = 0; i != MLX5_MAX_MAC_ADDRESSES; ++i) {
struct rte_ether_addr *mac = &dev->data->mac_addrs[i];
- if (!memcmp(mac, &cmp, sizeof(*mac)) || rte_is_multicast_ether_addr(mac))
+ /* Add flows for unicast and multicast mac addresses added by API. */
+ if (!memcmp(mac, &cmp, sizeof(*mac)) ||
+ !BITFIELD_ISSET(priv->mac_own, i) ||
+ (dev->data->all_multicast && rte_is_multicast_ether_addr(mac)))
continue;
memcpy(&unicast.dst.addr_bytes,
mac->addr_bytes,
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:36.648354451 +0000
+++ 0050-net-mlx5-fix-multicast.patch 2025-10-27 15:54:34.819950152 +0000
@@ -1 +1 @@
-From 8c06434cd9e44ef8a4db2eb7e3300c7791c4e7b4 Mon Sep 17 00:00:00 2001
+From 58a6421bc396d0f95c3e9e456bb824b32c5bd014 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 8c06434cd9e44ef8a4db2eb7e3300c7791c4e7b4 ]
+
@@ -23 +24,0 @@
-Cc: stable@dpdk.org
@@ -32 +33 @@
-index b104ca9f52..916ac03c16 100644
+index 198eeb019c..af25af47f8 100644
@@ -35 +36 @@
-@@ -1835,7 +1835,10 @@ mlx5_traffic_enable(struct rte_eth_dev *dev)
+@@ -1705,7 +1705,10 @@ mlx5_traffic_enable(struct rte_eth_dev *dev)
@@ -45 +46 @@
- memcpy(&unicast.hdr.dst_addr.addr_bytes,
+ memcpy(&unicast.dst.addr_bytes,
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/mlx5: fix MTU initialization' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (48 preceding siblings ...)
2025-10-27 16:19 ` patch 'net/mlx5: fix multicast' " luca.boccassi
@ 2025-10-27 16:19 ` luca.boccassi
2025-10-27 16:19 ` patch 'net/mlx5: fix leak of flow indexed pools' " luca.boccassi
` (27 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:19 UTC (permalink / raw)
To: Shani Peretz; +Cc: Dariusz Sosnowski, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/8b6d77fdad418b637c16dc346e4b774d89f1b60b
Thanks.
Luca Boccassi
---
From 8b6d77fdad418b637c16dc346e4b774d89f1b60b Mon Sep 17 00:00:00 2001
From: Shani Peretz <shperetz@nvidia.com>
Date: Thu, 18 Sep 2025 08:43:25 +0300
Subject: [PATCH] net/mlx5: fix MTU initialization
[ upstream commit ee6aa2cb66512cd57b69ffe07efbd7f09789c9b2 ]
Currently with mlx5 PMD, rte_eth_dev_get_mtu() doesn't return
the MTU the device was set with, but the default one.
It happens because mlx5_dev_spawn() is not setting the eth_dev->data->mtu
field after getting the actual MTU from the driver,
so the default value is kept.
This patch fixes the issue by retrieving setting the value of priv->mtu
to eth_dev->data->mtu.
Bugzilla ID: 1768
Fixes: 2eb4d0107acc ("net/mlx5: refactor PCI probing on Linux")
Signed-off-by: Shani Peretz <shperetz@nvidia.com>
Acked-by: Dariusz Sosnowski <dsosnowski@nvidia.com>
---
drivers/net/mlx5/linux/mlx5_os.c | 1 +
drivers/net/mlx5/windows/mlx5_os.c | 1 +
2 files changed, 2 insertions(+)
diff --git a/drivers/net/mlx5/linux/mlx5_os.c b/drivers/net/mlx5/linux/mlx5_os.c
index 23093b404a..fc7d5f68e7 100644
--- a/drivers/net/mlx5/linux/mlx5_os.c
+++ b/drivers/net/mlx5/linux/mlx5_os.c
@@ -1516,6 +1516,7 @@ err_secondary:
err = rte_errno;
goto error;
}
+ eth_dev->data->mtu = priv->mtu;
DRV_LOG(DEBUG, "port %u MTU is %u", eth_dev->data->port_id,
priv->mtu);
/* Initialize burst functions to prevent crashes before link-up. */
diff --git a/drivers/net/mlx5/windows/mlx5_os.c b/drivers/net/mlx5/windows/mlx5_os.c
index a2c2b37773..0da1f15f78 100644
--- a/drivers/net/mlx5/windows/mlx5_os.c
+++ b/drivers/net/mlx5/windows/mlx5_os.c
@@ -463,6 +463,7 @@ mlx5_dev_spawn(struct rte_device *dpdk_dev,
err = rte_errno;
goto error;
}
+ eth_dev->data->mtu = priv->mtu;
DRV_LOG(DEBUG, "port %u MTU is %u.", eth_dev->data->port_id,
priv->mtu);
/* Initialize burst functions to prevent crashes before link-up. */
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:36.681032536 +0000
+++ 0051-net-mlx5-fix-MTU-initialization.patch 2025-10-27 15:54:34.823950251 +0000
@@ -1 +1 @@
-From ee6aa2cb66512cd57b69ffe07efbd7f09789c9b2 Mon Sep 17 00:00:00 2001
+From 8b6d77fdad418b637c16dc346e4b774d89f1b60b Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit ee6aa2cb66512cd57b69ffe07efbd7f09789c9b2 ]
+
@@ -16 +17,0 @@
-Cc: stable@dpdk.org
@@ -26 +27 @@
-index 8c37c047bb..8d11b1ac3a 100644
+index 23093b404a..fc7d5f68e7 100644
@@ -29 +30 @@
-@@ -1601,6 +1601,7 @@ err_secondary:
+@@ -1516,6 +1516,7 @@ err_secondary:
@@ -38 +39 @@
-index c4e3430bdc..4eadc872a5 100644
+index a2c2b37773..0da1f15f78 100644
@@ -41 +42 @@
-@@ -509,6 +509,7 @@ mlx5_dev_spawn(struct rte_device *dpdk_dev,
+@@ -463,6 +463,7 @@ mlx5_dev_spawn(struct rte_device *dpdk_dev,
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/mlx5: fix leak of flow indexed pools' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (49 preceding siblings ...)
2025-10-27 16:19 ` patch 'net/mlx5: fix MTU initialization' " luca.boccassi
@ 2025-10-27 16:19 ` luca.boccassi
2025-10-27 16:19 ` patch 'net/hns3: fix inconsistent lock' " luca.boccassi
` (26 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:19 UTC (permalink / raw)
To: Roi Dayan; +Cc: Bing Zhao, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/3911c9348a430b3b94a0aa8a9f2392f0c58d1b2d
Thanks.
Luca Boccassi
---
From 3911c9348a430b3b94a0aa8a9f2392f0c58d1b2d Mon Sep 17 00:00:00 2001
From: Roi Dayan <roid@nvidia.com>
Date: Sun, 5 Oct 2025 10:23:45 +0300
Subject: [PATCH] net/mlx5: fix leak of flow indexed pools
[ upstream commit eefec46eeb89672815afd6c2497d21b928d77c54 ]
The cited commit allocated indexed pools but those pools
were never released. Fix it.
Fixes: b4edeaf3efd5 ("net/mlx5: replace flow list with indexed pool")
Signed-off-by: Roi Dayan <roid@nvidia.com>
Acked-by: Bing Zhao <bingz@nvidia.com>
---
.mailmap | 1 +
drivers/net/mlx5/mlx5.c | 13 +++++++++++++
2 files changed, 14 insertions(+)
diff --git a/.mailmap b/.mailmap
index 6a7af0e981..fb9c3d74f9 100644
--- a/.mailmap
+++ b/.mailmap
@@ -1192,6 +1192,7 @@ Rob Miller <rob.miller@broadcom.com>
Rob Scheepens <rob.scheepens@nutanix.com>
Roger Melton <rmelton@cisco.com>
Rohit Raj <rohit.raj@nxp.com>
+Roi Dayan <roid@nvidia.com>
Roland Qi <roland.qi@ucloud.cn>
Rolf Neugebauer <rolf.neugebauer@netronome.com>
Romain Delhomel <romain.delhomel@6wind.com>
diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c
index 94873dfe89..357f5eac11 100644
--- a/drivers/net/mlx5/mlx5.c
+++ b/drivers/net/mlx5/mlx5.c
@@ -2007,6 +2007,18 @@ mlx5_proc_priv_uninit(struct rte_eth_dev *dev)
dev->process_private = NULL;
}
+static void
+mlx5_flow_pools_destroy(struct mlx5_priv *priv)
+{
+ int i;
+
+ for (i = 0; i < MLX5_FLOW_TYPE_MAXI; i++) {
+ if (!priv->flows[i])
+ continue;
+ mlx5_ipool_destroy(priv->flows[i]);
+ }
+}
+
/**
* DPDK callback to close the device.
*
@@ -2180,6 +2192,7 @@ mlx5_dev_close(struct rte_eth_dev *dev)
if (!c)
claim_zero(rte_eth_switch_domain_free(priv->domain_id));
}
+ mlx5_flow_pools_destroy(priv);
memset(priv, 0, sizeof(*priv));
priv->domain_id = RTE_ETH_DEV_SWITCH_DOMAIN_ID_INVALID;
/*
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:36.713332392 +0000
+++ 0052-net-mlx5-fix-leak-of-flow-indexed-pools.patch 2025-10-27 15:54:34.823950251 +0000
@@ -1 +1 @@
-From eefec46eeb89672815afd6c2497d21b928d77c54 Mon Sep 17 00:00:00 2001
+From 3911c9348a430b3b94a0aa8a9f2392f0c58d1b2d Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit eefec46eeb89672815afd6c2497d21b928d77c54 ]
+
@@ -10 +11,0 @@
-Cc: stable@dpdk.org
@@ -20 +21 @@
-index aef57a4c32..ff13bf09fb 100644
+index 6a7af0e981..fb9c3d74f9 100644
@@ -23,2 +24,2 @@
-@@ -1361,6 +1361,7 @@ Rob Scheepens <rob.scheepens@nutanix.com>
- Rogelio Domínguez Hernández <rogelio.dominguez@gmail.com>
+@@ -1192,6 +1192,7 @@ Rob Miller <rob.miller@broadcom.com>
+ Rob Scheepens <rob.scheepens@nutanix.com>
@@ -32 +33 @@
-index ece29fb216..b018a4f0e2 100644
+index 94873dfe89..357f5eac11 100644
@@ -35 +36 @@
-@@ -2318,6 +2318,18 @@ mlx5_proc_priv_uninit(struct rte_eth_dev *dev)
+@@ -2007,6 +2007,18 @@ mlx5_proc_priv_uninit(struct rte_eth_dev *dev)
@@ -54 +55 @@
-@@ -2507,6 +2519,7 @@ mlx5_dev_close(struct rte_eth_dev *dev)
+@@ -2180,6 +2192,7 @@ mlx5_dev_close(struct rte_eth_dev *dev)
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/hns3: fix inconsistent lock' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (50 preceding siblings ...)
2025-10-27 16:19 ` patch 'net/mlx5: fix leak of flow indexed pools' " luca.boccassi
@ 2025-10-27 16:19 ` luca.boccassi
2025-10-27 16:19 ` patch 'net/hns3: fix VLAN resources freeing' " luca.boccassi
` (25 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:19 UTC (permalink / raw)
To: Dengdui Huang; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/a7f48b8165af74c3a7577b200f3576cd82034118
Thanks.
Luca Boccassi
---
From a7f48b8165af74c3a7577b200f3576cd82034118 Mon Sep 17 00:00:00 2001
From: Dengdui Huang <huangdengdui@huawei.com>
Date: Wed, 13 Aug 2025 15:33:15 +0800
Subject: [PATCH] net/hns3: fix inconsistent lock
[ upstream commit d441169bd20415691ea86707e7bf852eb6fcda46 ]
The hns3 driver supports configuring RSS through both ops API and
rte_flow API. The ops API uses spin lock, while the rte_flow API uses
pthread mutex. When concurrent calls occur, issues may arise.
This patch replaces the lock in the flow API with spin lock.
With the pthread mutex no longer needed, the pthread attributes
can also be removed.
Fixes: 1bdcca8006e4 ("net/hns3: fix flow director lock")
Signed-off-by: Dengdui Huang <huangdengdui@huawei.com>
---
drivers/net/hns3/hns3_ethdev.h | 2 --
drivers/net/hns3/hns3_fdir.c | 13 --------
drivers/net/hns3/hns3_flow.c | 60 +++++++++++++---------------------
3 files changed, 22 insertions(+), 53 deletions(-)
diff --git a/drivers/net/hns3/hns3_ethdev.h b/drivers/net/hns3/hns3_ethdev.h
index 5445170c8b..9ebf807202 100644
--- a/drivers/net/hns3/hns3_ethdev.h
+++ b/drivers/net/hns3/hns3_ethdev.h
@@ -5,7 +5,6 @@
#ifndef HNS3_ETHDEV_H
#define HNS3_ETHDEV_H
-#include <pthread.h>
#include <ethdev_driver.h>
#include <rte_byteorder.h>
#include <rte_io.h>
@@ -655,7 +654,6 @@ struct hns3_hw {
struct hns3_port_base_vlan_config port_base_vlan_cfg;
- pthread_mutex_t flows_lock; /* rte_flow ops lock */
struct hns3_fdir_rule_list flow_fdir_list; /* flow fdir rule list */
struct hns3_rss_filter_list flow_rss_list; /* flow RSS rule list */
struct hns3_flow_mem_list flow_list;
diff --git a/drivers/net/hns3/hns3_fdir.c b/drivers/net/hns3/hns3_fdir.c
index 73d4a25d63..c53a26f57b 100644
--- a/drivers/net/hns3/hns3_fdir.c
+++ b/drivers/net/hns3/hns3_fdir.c
@@ -1072,17 +1072,6 @@ int hns3_restore_all_fdir_filter(struct hns3_adapter *hns)
if (hns->is_vf)
return 0;
- /*
- * This API is called in the reset recovery process, the parent function
- * must hold hw->lock.
- * There maybe deadlock if acquire hw->flows_lock directly because rte
- * flow driver ops first acquire hw->flows_lock and then may acquire
- * hw->lock.
- * So here first release the hw->lock and then acquire the
- * hw->flows_lock to avoid deadlock.
- */
- rte_spinlock_unlock(&hw->lock);
- pthread_mutex_lock(&hw->flows_lock);
TAILQ_FOREACH(fdir_filter, &fdir_info->fdir_list, entries) {
ret = hns3_config_action(hw, &fdir_filter->fdir_conf);
if (!ret)
@@ -1093,8 +1082,6 @@ int hns3_restore_all_fdir_filter(struct hns3_adapter *hns)
break;
}
}
- pthread_mutex_unlock(&hw->flows_lock);
- rte_spinlock_lock(&hw->lock);
if (err) {
hns3_err(hw, "Fail to restore FDIR filter, ret = %d", ret);
diff --git a/drivers/net/hns3/hns3_flow.c b/drivers/net/hns3/hns3_flow.c
index e1180e4fec..cf71c6766d 100644
--- a/drivers/net/hns3/hns3_flow.c
+++ b/drivers/net/hns3/hns3_flow.c
@@ -2032,18 +2032,6 @@ hns3_reconfig_all_rss_filter(struct hns3_hw *hw)
return 0;
}
-static int
-hns3_restore_rss_filter(struct hns3_hw *hw)
-{
- int ret;
-
- pthread_mutex_lock(&hw->flows_lock);
- ret = hns3_reconfig_all_rss_filter(hw);
- pthread_mutex_unlock(&hw->flows_lock);
-
- return ret;
-}
-
int
hns3_restore_filter(struct hns3_adapter *hns)
{
@@ -2054,7 +2042,7 @@ hns3_restore_filter(struct hns3_adapter *hns)
if (ret != 0)
return ret;
- return hns3_restore_rss_filter(hw);
+ return hns3_reconfig_all_rss_filter(hw);
}
static int
@@ -2446,10 +2434,10 @@ hns3_flow_validate_wrap(struct rte_eth_dev *dev,
struct hns3_filter_info filter_info = {0};
int ret;
- pthread_mutex_lock(&hw->flows_lock);
+ rte_spinlock_lock(&hw->lock);
ret = hns3_flow_validate(dev, attr, pattern, actions, error,
&filter_info);
- pthread_mutex_unlock(&hw->flows_lock);
+ rte_spinlock_unlock(&hw->lock);
return ret;
}
@@ -2463,9 +2451,9 @@ hns3_flow_create_wrap(struct rte_eth_dev *dev, const struct rte_flow_attr *attr,
struct hns3_hw *hw = HNS3_DEV_PRIVATE_TO_HW(dev->data->dev_private);
struct rte_flow *flow;
- pthread_mutex_lock(&hw->flows_lock);
+ rte_spinlock_lock(&hw->lock);
flow = hns3_flow_create(dev, attr, pattern, actions, error);
- pthread_mutex_unlock(&hw->flows_lock);
+ rte_spinlock_unlock(&hw->lock);
return flow;
}
@@ -2477,9 +2465,9 @@ hns3_flow_destroy_wrap(struct rte_eth_dev *dev, struct rte_flow *flow,
struct hns3_hw *hw = HNS3_DEV_PRIVATE_TO_HW(dev->data->dev_private);
int ret;
- pthread_mutex_lock(&hw->flows_lock);
+ rte_spinlock_lock(&hw->lock);
ret = hns3_flow_destroy(dev, flow, error);
- pthread_mutex_unlock(&hw->flows_lock);
+ rte_spinlock_unlock(&hw->lock);
return ret;
}
@@ -2490,9 +2478,9 @@ hns3_flow_flush_wrap(struct rte_eth_dev *dev, struct rte_flow_error *error)
struct hns3_hw *hw = HNS3_DEV_PRIVATE_TO_HW(dev->data->dev_private);
int ret;
- pthread_mutex_lock(&hw->flows_lock);
+ rte_spinlock_lock(&hw->lock);
ret = hns3_flow_flush(dev, error);
- pthread_mutex_unlock(&hw->flows_lock);
+ rte_spinlock_unlock(&hw->lock);
return ret;
}
@@ -2505,9 +2493,9 @@ hns3_flow_query_wrap(struct rte_eth_dev *dev, struct rte_flow *flow,
struct hns3_hw *hw = HNS3_DEV_PRIVATE_TO_HW(dev->data->dev_private);
int ret;
- pthread_mutex_lock(&hw->flows_lock);
+ rte_spinlock_lock(&hw->lock);
ret = hns3_flow_query(dev, flow, actions, data, error);
- pthread_mutex_unlock(&hw->flows_lock);
+ rte_spinlock_unlock(&hw->lock);
return ret;
}
@@ -2555,7 +2543,7 @@ hns3_flow_action_create(struct rte_eth_dev *dev,
if (hns3_check_indir_action(conf, action, error))
return NULL;
- pthread_mutex_lock(&hw->flows_lock);
+ rte_spinlock_lock(&hw->lock);
act_count = (const struct rte_flow_action_count *)action->conf;
if (act_count->id >= pf->fdir.fd_cfg.cnt_num[HNS3_FD_STAGE_1]) {
@@ -2580,11 +2568,11 @@ hns3_flow_action_create(struct rte_eth_dev *dev,
handle.indirect_type = HNS3_INDIRECT_ACTION_TYPE_COUNT;
handle.counter_id = counter->id;
- pthread_mutex_unlock(&hw->flows_lock);
+ rte_spinlock_unlock(&hw->lock);
return (struct rte_flow_action_handle *)handle.val64;
err_exit:
- pthread_mutex_unlock(&hw->flows_lock);
+ rte_spinlock_unlock(&hw->lock);
return NULL;
}
@@ -2597,11 +2585,11 @@ hns3_flow_action_destroy(struct rte_eth_dev *dev,
struct rte_flow_action_handle indir;
struct hns3_flow_counter *counter;
- pthread_mutex_lock(&hw->flows_lock);
+ rte_spinlock_lock(&hw->lock);
indir.val64 = (uint64_t)handle;
if (indir.indirect_type != HNS3_INDIRECT_ACTION_TYPE_COUNT) {
- pthread_mutex_unlock(&hw->flows_lock);
+ rte_spinlock_unlock(&hw->lock);
return rte_flow_error_set(error, EINVAL,
RTE_FLOW_ERROR_TYPE_ACTION_CONF,
handle, "Invalid indirect type");
@@ -2609,14 +2597,14 @@ hns3_flow_action_destroy(struct rte_eth_dev *dev,
counter = hns3_counter_lookup(dev, indir.counter_id);
if (counter == NULL) {
- pthread_mutex_unlock(&hw->flows_lock);
+ rte_spinlock_unlock(&hw->lock);
return rte_flow_error_set(error, EINVAL,
RTE_FLOW_ERROR_TYPE_ACTION_CONF,
handle, "Counter id not exist");
}
if (counter->ref_cnt > 1) {
- pthread_mutex_unlock(&hw->flows_lock);
+ rte_spinlock_unlock(&hw->lock);
return rte_flow_error_set(error, EBUSY,
RTE_FLOW_ERROR_TYPE_HANDLE,
handle, "Counter id in use");
@@ -2624,7 +2612,7 @@ hns3_flow_action_destroy(struct rte_eth_dev *dev,
(void)hns3_counter_release(dev, indir.counter_id);
- pthread_mutex_unlock(&hw->flows_lock);
+ rte_spinlock_unlock(&hw->lock);
return 0;
}
@@ -2639,11 +2627,11 @@ hns3_flow_action_query(struct rte_eth_dev *dev,
struct rte_flow flow;
int ret;
- pthread_mutex_lock(&hw->flows_lock);
+ rte_spinlock_lock(&hw->lock);
indir.val64 = (uint64_t)handle;
if (indir.indirect_type != HNS3_INDIRECT_ACTION_TYPE_COUNT) {
- pthread_mutex_unlock(&hw->flows_lock);
+ rte_spinlock_unlock(&hw->lock);
return rte_flow_error_set(error, EINVAL,
RTE_FLOW_ERROR_TYPE_ACTION_CONF,
handle, "Invalid indirect type");
@@ -2653,7 +2641,7 @@ hns3_flow_action_query(struct rte_eth_dev *dev,
flow.counter_id = indir.counter_id;
ret = hns3_counter_query(dev, &flow,
(struct rte_flow_query_count *)data, error);
- pthread_mutex_unlock(&hw->flows_lock);
+ rte_spinlock_unlock(&hw->lock);
return ret;
}
@@ -2687,14 +2675,10 @@ void
hns3_flow_init(struct rte_eth_dev *dev)
{
struct hns3_hw *hw = HNS3_DEV_PRIVATE_TO_HW(dev->data->dev_private);
- pthread_mutexattr_t attr;
if (rte_eal_process_type() != RTE_PROC_PRIMARY)
return;
- pthread_mutexattr_init(&attr);
- pthread_mutexattr_setpshared(&attr, PTHREAD_PROCESS_SHARED);
- pthread_mutex_init(&hw->flows_lock, &attr);
dev->data->dev_flags |= RTE_ETH_DEV_FLOW_OPS_THREAD_SAFE;
TAILQ_INIT(&hw->flow_fdir_list);
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:36.756185384 +0000
+++ 0053-net-hns3-fix-inconsistent-lock.patch 2025-10-27 15:54:34.827950352 +0000
@@ -1 +1 @@
-From d441169bd20415691ea86707e7bf852eb6fcda46 Mon Sep 17 00:00:00 2001
+From a7f48b8165af74c3a7577b200f3576cd82034118 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit d441169bd20415691ea86707e7bf852eb6fcda46 ]
+
@@ -15 +16,0 @@
-Cc: stable@dpdk.org
@@ -25 +26 @@
-index d602bfa02f..f6bb1b5d43 100644
+index 5445170c8b..9ebf807202 100644
@@ -36 +37 @@
-@@ -679,7 +678,6 @@ struct hns3_hw {
+@@ -655,7 +654,6 @@ struct hns3_hw {
@@ -45 +46 @@
-index aacad40e61..50572ae430 100644
+index 73d4a25d63..c53a26f57b 100644
@@ -48 +49 @@
-@@ -1145,17 +1145,6 @@ int hns3_restore_all_fdir_filter(struct hns3_adapter *hns)
+@@ -1072,17 +1072,6 @@ int hns3_restore_all_fdir_filter(struct hns3_adapter *hns)
@@ -66 +67 @@
-@@ -1166,8 +1155,6 @@ int hns3_restore_all_fdir_filter(struct hns3_adapter *hns)
+@@ -1093,8 +1082,6 @@ int hns3_restore_all_fdir_filter(struct hns3_adapter *hns)
@@ -76 +77 @@
-index c0238d2bfa..f2d1e4ec3a 100644
+index e1180e4fec..cf71c6766d 100644
@@ -79 +80 @@
-@@ -2210,18 +2210,6 @@ hns3_reconfig_all_rss_filter(struct hns3_hw *hw)
+@@ -2032,18 +2032,6 @@ hns3_reconfig_all_rss_filter(struct hns3_hw *hw)
@@ -98 +99 @@
-@@ -2232,7 +2220,7 @@ hns3_restore_filter(struct hns3_adapter *hns)
+@@ -2054,7 +2042,7 @@ hns3_restore_filter(struct hns3_adapter *hns)
@@ -107 +108 @@
-@@ -2624,10 +2612,10 @@ hns3_flow_validate_wrap(struct rte_eth_dev *dev,
+@@ -2446,10 +2434,10 @@ hns3_flow_validate_wrap(struct rte_eth_dev *dev,
@@ -120 +121 @@
-@@ -2641,9 +2629,9 @@ hns3_flow_create_wrap(struct rte_eth_dev *dev, const struct rte_flow_attr *attr,
+@@ -2463,9 +2451,9 @@ hns3_flow_create_wrap(struct rte_eth_dev *dev, const struct rte_flow_attr *attr,
@@ -132 +133 @@
-@@ -2655,9 +2643,9 @@ hns3_flow_destroy_wrap(struct rte_eth_dev *dev, struct rte_flow *flow,
+@@ -2477,9 +2465,9 @@ hns3_flow_destroy_wrap(struct rte_eth_dev *dev, struct rte_flow *flow,
@@ -144 +145 @@
-@@ -2668,9 +2656,9 @@ hns3_flow_flush_wrap(struct rte_eth_dev *dev, struct rte_flow_error *error)
+@@ -2490,9 +2478,9 @@ hns3_flow_flush_wrap(struct rte_eth_dev *dev, struct rte_flow_error *error)
@@ -156 +157 @@
-@@ -2683,9 +2671,9 @@ hns3_flow_query_wrap(struct rte_eth_dev *dev, struct rte_flow *flow,
+@@ -2505,9 +2493,9 @@ hns3_flow_query_wrap(struct rte_eth_dev *dev, struct rte_flow *flow,
@@ -168 +169 @@
-@@ -2733,7 +2721,7 @@ hns3_flow_action_create(struct rte_eth_dev *dev,
+@@ -2555,7 +2543,7 @@ hns3_flow_action_create(struct rte_eth_dev *dev,
@@ -177 +178 @@
-@@ -2758,11 +2746,11 @@ hns3_flow_action_create(struct rte_eth_dev *dev,
+@@ -2580,11 +2568,11 @@ hns3_flow_action_create(struct rte_eth_dev *dev,
@@ -191 +192 @@
-@@ -2775,11 +2763,11 @@ hns3_flow_action_destroy(struct rte_eth_dev *dev,
+@@ -2597,11 +2585,11 @@ hns3_flow_action_destroy(struct rte_eth_dev *dev,
@@ -205 +206 @@
-@@ -2787,14 +2775,14 @@ hns3_flow_action_destroy(struct rte_eth_dev *dev,
+@@ -2609,14 +2597,14 @@ hns3_flow_action_destroy(struct rte_eth_dev *dev,
@@ -222 +223 @@
-@@ -2802,7 +2790,7 @@ hns3_flow_action_destroy(struct rte_eth_dev *dev,
+@@ -2624,7 +2612,7 @@ hns3_flow_action_destroy(struct rte_eth_dev *dev,
@@ -231 +232 @@
-@@ -2817,11 +2805,11 @@ hns3_flow_action_query(struct rte_eth_dev *dev,
+@@ -2639,11 +2627,11 @@ hns3_flow_action_query(struct rte_eth_dev *dev,
@@ -245 +246 @@
-@@ -2831,7 +2819,7 @@ hns3_flow_action_query(struct rte_eth_dev *dev,
+@@ -2653,7 +2641,7 @@ hns3_flow_action_query(struct rte_eth_dev *dev,
@@ -254 +255 @@
-@@ -2865,14 +2853,10 @@ void
+@@ -2687,14 +2675,10 @@ void
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/hns3: fix VLAN resources freeing' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (51 preceding siblings ...)
2025-10-27 16:19 ` patch 'net/hns3: fix inconsistent lock' " luca.boccassi
@ 2025-10-27 16:19 ` luca.boccassi
2025-10-27 16:19 ` patch 'net/af_packet: fix crash in secondary process' " luca.boccassi
` (24 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:19 UTC (permalink / raw)
To: Dengdui Huang; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/9b39971fc6e0e622220df2516a85e25204eb35e3
Thanks.
Luca Boccassi
---
From 9b39971fc6e0e622220df2516a85e25204eb35e3 Mon Sep 17 00:00:00 2001
From: Dengdui Huang <huangdengdui@huawei.com>
Date: Fri, 22 Aug 2025 14:04:28 +0800
Subject: [PATCH] net/hns3: fix VLAN resources freeing
[ upstream commit 4816b1005bd650b4a1e10af913c497bec860bec5 ]
In the initialization process, it is necessary to release VLAN resources
on the failure branch.
Additionally, encapsulate a function hns3_uninit_hardware() to release
the resources allocated by the hns3_init_hardware() function.
Fixes: 411d23b9eafb ("net/hns3: support VLAN")
Signed-off-by: Dengdui Huang <huangdengdui@huawei.com>
---
drivers/net/hns3/hns3_ethdev.c | 31 ++++++++++++++++++++-----------
1 file changed, 20 insertions(+), 11 deletions(-)
diff --git a/drivers/net/hns3/hns3_ethdev.c b/drivers/net/hns3/hns3_ethdev.c
index c31b052b6f..a220131294 100644
--- a/drivers/net/hns3/hns3_ethdev.c
+++ b/drivers/net/hns3/hns3_ethdev.c
@@ -4422,25 +4422,25 @@ hns3_init_hardware(struct hns3_adapter *hns)
ret = hns3_dcb_init(hw);
if (ret) {
PMD_INIT_LOG(ERR, "Failed to init dcb: %d", ret);
- goto err_mac_init;
+ goto rm_vlan_table;
}
ret = hns3_init_fd_config(hns);
if (ret) {
PMD_INIT_LOG(ERR, "Failed to init flow director: %d", ret);
- goto err_mac_init;
+ goto rm_vlan_table;
}
ret = hns3_config_tso(hw, HNS3_TSO_MSS_MIN, HNS3_TSO_MSS_MAX);
if (ret) {
PMD_INIT_LOG(ERR, "Failed to config tso: %d", ret);
- goto err_mac_init;
+ goto rm_vlan_table;
}
ret = hns3_config_gro(hw, false);
if (ret) {
PMD_INIT_LOG(ERR, "Failed to config gro: %d", ret);
- goto err_mac_init;
+ goto rm_vlan_table;
}
/*
@@ -4452,22 +4452,33 @@ hns3_init_hardware(struct hns3_adapter *hns)
ret = hns3_init_ring_with_vector(hw);
if (ret) {
PMD_INIT_LOG(ERR, "Failed to init ring intr vector: %d", ret);
- goto err_mac_init;
+ goto rm_vlan_table;
}
ret = hns3_ptp_init(hw);
if (ret) {
PMD_INIT_LOG(ERR, "Failed to init PTP, ret = %d", ret);
- goto err_mac_init;
+ goto rm_vlan_table;
}
return 0;
-
+rm_vlan_table:
+ hns3_rm_all_vlan_table(hns, true);
err_mac_init:
hns3_uninit_umv_space(hw);
return ret;
}
+static void
+hns3_uninit_hardware(struct hns3_hw *hw)
+{
+ struct hns3_adapter *hns = HNS3_DEV_HW_TO_ADAPTER(hw);
+
+ (void)hns3_uninit_umv_space(hw);
+ hns3_ptp_uninit(hw);
+ hns3_rm_all_vlan_table(hns, true);
+}
+
static int
hns3_clear_hw(struct hns3_hw *hw)
{
@@ -4699,8 +4710,7 @@ err_supported_speed:
err_enable_intr:
hns3_fdir_filter_uninit(hns);
err_fdir:
- hns3_uninit_umv_space(hw);
- hns3_ptp_uninit(hw);
+ hns3_uninit_hardware(hw);
err_init_hw:
hns3_stats_uninit(hw);
err_get_config:
@@ -4735,8 +4745,7 @@ hns3_uninit_pf(struct rte_eth_dev *eth_dev)
hns3_promisc_uninit(hw);
hns3_flow_uninit(eth_dev);
hns3_fdir_filter_uninit(hns);
- hns3_uninit_umv_space(hw);
- hns3_ptp_uninit(hw);
+ hns3_uninit_hardware(hw);
hns3_stats_uninit(hw);
hns3_config_mac_tnl_int(hw, false);
hns3_pf_disable_irq0(hw);
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:36.790836287 +0000
+++ 0054-net-hns3-fix-VLAN-resources-freeing.patch 2025-10-27 15:54:34.831950453 +0000
@@ -1 +1 @@
-From 4816b1005bd650b4a1e10af913c497bec860bec5 Mon Sep 17 00:00:00 2001
+From 9b39971fc6e0e622220df2516a85e25204eb35e3 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 4816b1005bd650b4a1e10af913c497bec860bec5 ]
+
@@ -13 +14,0 @@
-Cc: stable@dpdk.org
@@ -21 +22 @@
-index a809a47423..b2eab7e1c5 100644
+index c31b052b6f..a220131294 100644
@@ -24 +25 @@
-@@ -4366,25 +4366,25 @@ hns3_init_hardware(struct hns3_adapter *hns)
+@@ -4422,25 +4422,25 @@ hns3_init_hardware(struct hns3_adapter *hns)
@@ -54 +55 @@
-@@ -4396,22 +4396,33 @@ hns3_init_hardware(struct hns3_adapter *hns)
+@@ -4452,22 +4452,33 @@ hns3_init_hardware(struct hns3_adapter *hns)
@@ -91 +92 @@
-@@ -4623,8 +4634,7 @@ err_supported_speed:
+@@ -4699,8 +4710,7 @@ err_supported_speed:
@@ -101 +102 @@
-@@ -4659,8 +4669,7 @@ hns3_uninit_pf(struct rte_eth_dev *eth_dev)
+@@ -4735,8 +4745,7 @@ hns3_uninit_pf(struct rte_eth_dev *eth_dev)
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/af_packet: fix crash in secondary process' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (52 preceding siblings ...)
2025-10-27 16:19 ` patch 'net/hns3: fix VLAN resources freeing' " luca.boccassi
@ 2025-10-27 16:19 ` luca.boccassi
2025-10-27 16:19 ` patch 'net/ark: remove double mbuf free' " luca.boccassi
` (23 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:19 UTC (permalink / raw)
To: Kerem Aksu; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/1abf7e31f268f3ec07df0ef96f612cc9f6a9d332
Thanks.
Luca Boccassi
---
From 1abf7e31f268f3ec07df0ef96f612cc9f6a9d332 Mon Sep 17 00:00:00 2001
From: Kerem Aksu <kerem.aksu@i2i-systems.com>
Date: Fri, 12 Sep 2025 14:35:25 +0300
Subject: [PATCH] net/af_packet: fix crash in secondary process
[ upstream commit d57124f60ef60b24cd39e895cf6d211b93b897ae ]
dumpcap crashes when trying to capture from af_packet devices. This is
caused by allocating interface name with
strdup (i.e. malloc). Interface name is not accessible from secondary
process and causes segmentation fault. Use rte_malloc instead of
strdup to fix the issue.
Bugzilla ID: 1786
Fixes: 1b93c2aa81b4 ("net/af_packet: add interface name to internals")
Signed-off-by: Kerem Aksu <kerem.aksu@i2i-systems.com>
---
.mailmap | 1 +
drivers/net/af_packet/rte_eth_af_packet.c | 7 ++++---
2 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/.mailmap b/.mailmap
index fb9c3d74f9..3ff821f286 100644
--- a/.mailmap
+++ b/.mailmap
@@ -729,6 +729,7 @@ Kefu Chai <tchaikov@gmail.com>
Keiichi Watanabe <keiichiw@chromium.org>
Keith Wiles <keith.wiles@intel.com> <keith.wiles@windriver.com>
Kent Wires <kent.wires@intel.com>
+Kerem Aksu <kerem.aksu@i2i-systems.com>
Keunhong Lee <dlrmsghd@gmail.com>
Kevin Laatz <kevin.laatz@intel.com>
Kevin Lampis <klampis@solarflare.com>
diff --git a/drivers/net/af_packet/rte_eth_af_packet.c b/drivers/net/af_packet/rte_eth_af_packet.c
index 0b059bfd0b..6803502c74 100644
--- a/drivers/net/af_packet/rte_eth_af_packet.c
+++ b/drivers/net/af_packet/rte_eth_af_packet.c
@@ -462,7 +462,7 @@ eth_dev_close(struct rte_eth_dev *dev)
rte_free(internals->rx_queue[q].rd);
rte_free(internals->tx_queue[q].rd);
}
- free(internals->if_name);
+ rte_free(internals->if_name);
rte_free(internals->rx_queue);
rte_free(internals->tx_queue);
@@ -752,9 +752,10 @@ rte_pmd_init_internals(struct rte_vdev_device *dev,
PMD_LOG_ERRNO(ERR, "%s: ioctl failed (SIOCGIFINDEX)", name);
goto free_internals;
}
- (*internals)->if_name = strdup(pair->value);
+ (*internals)->if_name = rte_malloc_socket(name, ifnamelen + 1, 0, numa_node);
if ((*internals)->if_name == NULL)
goto free_internals;
+ strlcpy((*internals)->if_name, pair->value, ifnamelen + 1);
(*internals)->if_index = ifr.ifr_ifindex;
if (ioctl(sockfd, SIOCGIFHWADDR, &ifr) == -1) {
@@ -941,7 +942,7 @@ error:
free_internals:
rte_free((*internals)->rx_queue);
rte_free((*internals)->tx_queue);
- free((*internals)->if_name);
+ rte_free((*internals)->if_name);
rte_free(*internals);
return -1;
}
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:36.827302727 +0000
+++ 0055-net-af_packet-fix-crash-in-secondary-process.patch 2025-10-27 15:54:34.831950453 +0000
@@ -1 +1 @@
-From d57124f60ef60b24cd39e895cf6d211b93b897ae Mon Sep 17 00:00:00 2001
+From 1abf7e31f268f3ec07df0ef96f612cc9f6a9d332 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit d57124f60ef60b24cd39e895cf6d211b93b897ae ]
+
@@ -14 +15,0 @@
-Cc: stable@dpdk.org
@@ -23 +24 @@
-index ff13bf09fb..ff873856cb 100644
+index fb9c3d74f9..3ff821f286 100644
@@ -26 +27 @@
-@@ -830,6 +830,7 @@ Kefu Chai <tchaikov@gmail.com>
+@@ -729,6 +729,7 @@ Kefu Chai <tchaikov@gmail.com>
@@ -35 +36 @@
-index 85bc1201b4..de7ff63527 100644
+index 0b059bfd0b..6803502c74 100644
@@ -38 +39 @@
-@@ -525,7 +525,7 @@ eth_dev_close(struct rte_eth_dev *dev)
+@@ -462,7 +462,7 @@ eth_dev_close(struct rte_eth_dev *dev)
@@ -47 +48 @@
-@@ -875,9 +875,10 @@ rte_pmd_init_internals(struct rte_vdev_device *dev,
+@@ -752,9 +752,10 @@ rte_pmd_init_internals(struct rte_vdev_device *dev,
@@ -59 +60 @@
-@@ -1063,7 +1064,7 @@ error:
+@@ -941,7 +942,7 @@ error:
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/ark: remove double mbuf free' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (53 preceding siblings ...)
2025-10-27 16:19 ` patch 'net/af_packet: fix crash in secondary process' " luca.boccassi
@ 2025-10-27 16:19 ` luca.boccassi
2025-10-27 16:19 ` patch 'net/hns3: fix VLAN tag loss for short tunnel frame' " luca.boccassi
` (22 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:19 UTC (permalink / raw)
To: John Miller; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/ea33b28d560769ab9bcc6b8c076f4df6bb7bc104
Thanks.
Luca Boccassi
---
From ea33b28d560769ab9bcc6b8c076f4df6bb7bc104 Mon Sep 17 00:00:00 2001
From: John Miller <john.miller@atomicrules.com>
Date: Mon, 15 Sep 2025 11:02:02 -0400
Subject: [PATCH] net/ark: remove double mbuf free
[ upstream commit f8c85054cc9cb160ca12e1bf96b569e654f96c74 ]
Fixes: 8b154b690266 ("net/ark: add Rx initial version")
Signed-off-by: John Miller <john.miller@atomicrules.com>
---
drivers/net/ark/ark_ethdev_rx.c | 4 ----
1 file changed, 4 deletions(-)
diff --git a/drivers/net/ark/ark_ethdev_rx.c b/drivers/net/ark/ark_ethdev_rx.c
index 38bc69dff4..a016bf77c0 100644
--- a/drivers/net/ark/ark_ethdev_rx.c
+++ b/drivers/net/ark/ark_ethdev_rx.c
@@ -530,7 +530,6 @@ void
eth_ark_dev_rx_queue_release(void *vqueue)
{
struct ark_rx_queue *queue;
- uint32_t i;
queue = (struct ark_rx_queue *)vqueue;
if (queue == 0)
@@ -543,9 +542,6 @@ eth_ark_dev_rx_queue_release(void *vqueue)
/* Need to clear out mbufs here, dropping packets along the way */
eth_ark_rx_queue_drain(queue);
- for (i = 0; i < queue->queue_size; ++i)
- rte_pktmbuf_free(queue->reserve_q[i]);
-
rte_free(queue->reserve_q);
rte_free(queue->paddress_q);
rte_free(queue);
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:36.860087164 +0000
+++ 0056-net-ark-remove-double-mbuf-free.patch 2025-10-27 15:54:34.831950453 +0000
@@ -1 +1 @@
-From f8c85054cc9cb160ca12e1bf96b569e654f96c74 Mon Sep 17 00:00:00 2001
+From ea33b28d560769ab9bcc6b8c076f4df6bb7bc104 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit f8c85054cc9cb160ca12e1bf96b569e654f96c74 ]
+
@@ -7 +8,0 @@
-Cc: stable@dpdk.org
@@ -15 +16 @@
-index 2fff0ffded..ce458a5a96 100644
+index 38bc69dff4..a016bf77c0 100644
@@ -18 +19 @@
-@@ -538,7 +538,6 @@ void
+@@ -530,7 +530,6 @@ void
@@ -26 +27 @@
-@@ -551,9 +550,6 @@ eth_ark_dev_rx_queue_release(void *vqueue)
+@@ -543,9 +542,6 @@ eth_ark_dev_rx_queue_release(void *vqueue)
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/hns3: fix VLAN tag loss for short tunnel frame' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (54 preceding siblings ...)
2025-10-27 16:19 ` patch 'net/ark: remove double mbuf free' " luca.boccassi
@ 2025-10-27 16:19 ` luca.boccassi
2025-10-27 16:19 ` patch 'ethdev: fix VLAN filter parameter description' " luca.boccassi
` (21 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:19 UTC (permalink / raw)
To: Xingui Yang; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/a93b0c242f9ec715d68fa676c74baa978ecdf0d1
Thanks.
Luca Boccassi
---
From a93b0c242f9ec715d68fa676c74baa978ecdf0d1 Mon Sep 17 00:00:00 2001
From: Xingui Yang <yangxingui@huawei.com>
Date: Mon, 29 Sep 2025 19:35:53 +0800
Subject: [PATCH] net/hns3: fix VLAN tag loss for short tunnel frame
[ upstream commit 2262fc29485bd863db55e820a194bf1e4be8a87c ]
When the hardware handles short tunnel frames below 65 bytes, the VLAN tag
will be lost if VLAN insert or QinQ insert is enabled. Therefore, the
packet size of the tunnel frame is padded to 65 bytes to fix this issue.
Fixes: de620754a109 ("net/hns3: fix sending packets less than 60 bytes")
Signed-off-by: Xingui Yang <yangxingui@huawei.com>
---
drivers/net/hns3/hns3_ethdev.h | 1 +
drivers/net/hns3/hns3_rxtx.c | 48 +++++++++++++++++++++++-----------
2 files changed, 34 insertions(+), 15 deletions(-)
diff --git a/drivers/net/hns3/hns3_ethdev.h b/drivers/net/hns3/hns3_ethdev.h
index 9ebf807202..864fb186b1 100644
--- a/drivers/net/hns3/hns3_ethdev.h
+++ b/drivers/net/hns3/hns3_ethdev.h
@@ -74,6 +74,7 @@
#define HNS3_DEFAULT_MTU 1500UL
#define HNS3_DEFAULT_FRAME_LEN (HNS3_DEFAULT_MTU + HNS3_ETH_OVERHEAD)
#define HNS3_HIP08_MIN_TX_PKT_LEN 33
+#define HNS3_MIN_TUN_PKT_LEN 65
#define HNS3_BITS_PER_BYTE 8
diff --git a/drivers/net/hns3/hns3_rxtx.c b/drivers/net/hns3/hns3_rxtx.c
index 56060730b0..3256e12b63 100644
--- a/drivers/net/hns3/hns3_rxtx.c
+++ b/drivers/net/hns3/hns3_rxtx.c
@@ -4124,6 +4124,37 @@ hns3_tx_fill_hw_ring(struct hns3_tx_queue *txq,
}
}
+static bool
+hns3_tx_pktmbuf_append(struct hns3_tx_queue *txq,
+ struct rte_mbuf *tx_pkt)
+{
+ uint16_t add_len = 0;
+ uint32_t ptype;
+ char *appended;
+
+ if (unlikely(tx_pkt->ol_flags & (RTE_MBUF_F_TX_VLAN | RTE_MBUF_F_TX_QINQ) &&
+ rte_pktmbuf_pkt_len(tx_pkt) < HNS3_MIN_TUN_PKT_LEN)) {
+ ptype = rte_net_get_ptype(tx_pkt, NULL, RTE_PTYPE_L2_MASK |
+ RTE_PTYPE_L3_MASK | RTE_PTYPE_L4_MASK |
+ RTE_PTYPE_TUNNEL_MASK);
+ if (ptype & RTE_PTYPE_TUNNEL_MASK)
+ add_len = HNS3_MIN_TUN_PKT_LEN - rte_pktmbuf_pkt_len(tx_pkt);
+ } else if (unlikely(rte_pktmbuf_pkt_len(tx_pkt) < txq->min_tx_pkt_len)) {
+ add_len = txq->min_tx_pkt_len - rte_pktmbuf_pkt_len(tx_pkt);
+ }
+
+ if (unlikely(add_len > 0)) {
+ appended = rte_pktmbuf_append(tx_pkt, add_len);
+ if (appended == NULL) {
+ txq->dfx_stats.pkt_padding_fail_cnt++;
+ return false;
+ }
+ memset(appended, 0, add_len);
+ }
+
+ return true;
+}
+
uint16_t
hns3_xmit_pkts_simple(void *tx_queue,
struct rte_mbuf **tx_pkts,
@@ -4201,21 +4232,8 @@ hns3_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts)
* by hardware in Tx direction, driver need to pad it to avoid
* error.
*/
- if (unlikely(rte_pktmbuf_pkt_len(tx_pkt) <
- txq->min_tx_pkt_len)) {
- uint16_t add_len;
- char *appended;
-
- add_len = txq->min_tx_pkt_len -
- rte_pktmbuf_pkt_len(tx_pkt);
- appended = rte_pktmbuf_append(tx_pkt, add_len);
- if (appended == NULL) {
- txq->dfx_stats.pkt_padding_fail_cnt++;
- break;
- }
-
- memset(appended, 0, add_len);
- }
+ if (!hns3_tx_pktmbuf_append(txq, tx_pkt))
+ break;
m_seg = tx_pkt;
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:36.894420222 +0000
+++ 0057-net-hns3-fix-VLAN-tag-loss-for-short-tunnel-frame.patch 2025-10-27 15:54:34.835950552 +0000
@@ -1 +1 @@
-From 2262fc29485bd863db55e820a194bf1e4be8a87c Mon Sep 17 00:00:00 2001
+From a93b0c242f9ec715d68fa676c74baa978ecdf0d1 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 2262fc29485bd863db55e820a194bf1e4be8a87c ]
+
@@ -11 +12,0 @@
-Cc: stable@dpdk.org
@@ -20 +21 @@
-index f6bb1b5d43..209b042816 100644
+index 9ebf807202..864fb186b1 100644
@@ -23 +24 @@
-@@ -75,6 +75,7 @@
+@@ -74,6 +74,7 @@
@@ -32 +33 @@
-index aa7ee6f3e8..df703134be 100644
+index 56060730b0..3256e12b63 100644
@@ -35 +36 @@
-@@ -4219,6 +4219,37 @@ hns3_tx_fill_hw_ring(struct hns3_tx_queue *txq,
+@@ -4124,6 +4124,37 @@ hns3_tx_fill_hw_ring(struct hns3_tx_queue *txq,
@@ -73 +74 @@
-@@ -4296,21 +4327,8 @@ hns3_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts)
+@@ -4201,21 +4232,8 @@ hns3_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts)
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'ethdev: fix VLAN filter parameter description' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (55 preceding siblings ...)
2025-10-27 16:19 ` patch 'net/hns3: fix VLAN tag loss for short tunnel frame' " luca.boccassi
@ 2025-10-27 16:19 ` luca.boccassi
2025-10-27 16:19 ` patch 'net/enetfec: fix file descriptor leak on read error' " luca.boccassi
` (20 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:19 UTC (permalink / raw)
To: Bruce Richardson; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/cecaf4c5446eb7162110f8e07d54dbbe317d48f0
Thanks.
Luca Boccassi
---
From cecaf4c5446eb7162110f8e07d54dbbe317d48f0 Mon Sep 17 00:00:00 2001
From: Bruce Richardson <bruce.richardson@intel.com>
Date: Fri, 3 Oct 2025 12:09:44 +0100
Subject: [PATCH] ethdev: fix VLAN filter parameter description
[ upstream commit f7eaa9063561a130badc978f2dfe49536904c907 ]
The description of the rx_queue_id parameter was copy-pasted from the
queue mapping function without being updated. Fix the text.
Fixes: 81f9db8ecc2c ("ethdev: add vlan offload support")
Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
---
lib/ethdev/rte_ethdev.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/ethdev/rte_ethdev.h b/lib/ethdev/rte_ethdev.h
index 896be82ee0..913ff2a9be 100644
--- a/lib/ethdev/rte_ethdev.h
+++ b/lib/ethdev/rte_ethdev.h
@@ -3443,7 +3443,7 @@ int rte_eth_dev_vlan_filter(uint16_t port_id, uint16_t vlan_id, int on);
* @param port_id
* The port identifier of the Ethernet device.
* @param rx_queue_id
- * The index of the receive queue for which a queue stats mapping is required.
+ * The index of the receive queue on which to enable/disable VLAN stripping.
* The value must be in the range [0, nb_rx_queue - 1] previously supplied
* to rte_eth_dev_configure().
* @param on
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:36.931233622 +0000
+++ 0058-ethdev-fix-VLAN-filter-parameter-description.patch 2025-10-27 15:54:34.839950653 +0000
@@ -1 +1 @@
-From f7eaa9063561a130badc978f2dfe49536904c907 Mon Sep 17 00:00:00 2001
+From cecaf4c5446eb7162110f8e07d54dbbe317d48f0 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit f7eaa9063561a130badc978f2dfe49536904c907 ]
+
@@ -10 +11,0 @@
-Cc: stable@dpdk.org
@@ -18 +19 @@
-index 091e0dad6e..2b7b195756 100644
+index 896be82ee0..913ff2a9be 100644
@@ -21 +22 @@
-@@ -3771,7 +3771,7 @@ int rte_eth_dev_vlan_filter(uint16_t port_id, uint16_t vlan_id, int on);
+@@ -3443,7 +3443,7 @@ int rte_eth_dev_vlan_filter(uint16_t port_id, uint16_t vlan_id, int on);
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/enetfec: fix file descriptor leak on read error' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (56 preceding siblings ...)
2025-10-27 16:19 ` patch 'ethdev: fix VLAN filter parameter description' " luca.boccassi
@ 2025-10-27 16:19 ` luca.boccassi
2025-10-27 16:19 ` patch 'net/enetfec: fix out-of-bounds access in UIO mapping' " luca.boccassi
` (19 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:19 UTC (permalink / raw)
To: Hemant Agrawal; +Cc: Sachin Saxena, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/dcae8c220ba99d898ad10c3b014392fd2e93416e
Thanks.
Luca Boccassi
---
From dcae8c220ba99d898ad10c3b014392fd2e93416e Mon Sep 17 00:00:00 2001
From: Hemant Agrawal <hemant.agrawal@nxp.com>
Date: Mon, 6 Oct 2025 13:34:00 +0530
Subject: [PATCH] net/enetfec: fix file descriptor leak on read error
[ upstream commit 2e503215692e8ab50e473e963ec58d5ab714a375 ]
The file descriptor was not closed when a read error occurred while
reading the first line from a UIO device file. This could lead to
resource leakage. The patch ensures the descriptor is closed in
case of read failure.
Fixes: b84fdd39638b ("net/enetfec: support UIO")
Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
Acked-by: Sachin Saxena <sachin.saxena@nxp.com>
---
drivers/net/enetfec/enet_uio.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/drivers/net/enetfec/enet_uio.c b/drivers/net/enetfec/enet_uio.c
index 6539cbb354..f41e314745 100644
--- a/drivers/net/enetfec/enet_uio.c
+++ b/drivers/net/enetfec/enet_uio.c
@@ -1,5 +1,5 @@
/* SPDX-License-Identifier: BSD-3-Clause
- * Copyright 2021 NXP
+ * Copyright 2021,2024 NXP
*/
#include <stdbool.h>
@@ -66,13 +66,16 @@ file_read_first_line(const char root[], const char subdir[],
"%s/%s/%s", root, subdir, filename);
fd = open(absolute_file_name, O_RDONLY);
- if (fd <= 0)
+ if (fd < 0) {
ENETFEC_PMD_ERR("Error opening file %s", absolute_file_name);
+ return fd;
+ }
/* read UIO device name from first line in file */
ret = read(fd, line, FEC_UIO_MAX_DEVICE_FILE_NAME_LENGTH);
if (ret <= 0) {
ENETFEC_PMD_ERR("Error reading file %s", absolute_file_name);
+ close(fd);
return ret;
}
close(fd);
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:36.967292619 +0000
+++ 0059-net-enetfec-fix-file-descriptor-leak-on-read-error.patch 2025-10-27 15:54:34.839950653 +0000
@@ -1 +1 @@
-From 2e503215692e8ab50e473e963ec58d5ab714a375 Mon Sep 17 00:00:00 2001
+From dcae8c220ba99d898ad10c3b014392fd2e93416e Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 2e503215692e8ab50e473e963ec58d5ab714a375 ]
+
@@ -12 +13,0 @@
-Cc: stable@dpdk.org
@@ -21 +22 @@
-index 9f4e896985..23cb4e7e93 100644
+index 6539cbb354..f41e314745 100644
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/enetfec: fix out-of-bounds access in UIO mapping' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (57 preceding siblings ...)
2025-10-27 16:19 ` patch 'net/enetfec: fix file descriptor leak on read error' " luca.boccassi
@ 2025-10-27 16:19 ` luca.boccassi
2025-10-27 16:19 ` patch 'net/enetfec: fix buffer descriptor size configuration' " luca.boccassi
` (18 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:19 UTC (permalink / raw)
To: Vanshika Shukla; +Cc: Sachin Saxena, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/059f9f130cb425d9186563ce7e5142ed0554ec56
Thanks.
Luca Boccassi
---
From 059f9f130cb425d9186563ce7e5142ed0554ec56 Mon Sep 17 00:00:00 2001
From: Vanshika Shukla <vanshika.shukla@nxp.com>
Date: Mon, 6 Oct 2025 13:34:01 +0530
Subject: [PATCH] net/enetfec: fix out-of-bounds access in UIO mapping
[ upstream commit 22b0837bd93a777b8ca7fcf234985175e456a4f5 ]
NXP internal Coverity flagged a potential out-of-bounds
access due to invalid mapping size. This patch adds a check to
ensure the mapping size is within valid bounds before proceeding
with memory mapping.
Fixes: b84fdd39638b ("net/enetfec: support UIO")
Signed-off-by: Vanshika Shukla <vanshika.shukla@nxp.com>
Acked-by: Sachin Saxena <sachin.saxena@nxp.com>
---
drivers/net/enetfec/enet_uio.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/drivers/net/enetfec/enet_uio.c b/drivers/net/enetfec/enet_uio.c
index f41e314745..786e7b6a0e 100644
--- a/drivers/net/enetfec/enet_uio.c
+++ b/drivers/net/enetfec/enet_uio.c
@@ -1,5 +1,5 @@
/* SPDX-License-Identifier: BSD-3-Clause
- * Copyright 2021,2024 NXP
+ * Copyright 2021,2024-2025 NXP
*/
#include <stdbool.h>
@@ -142,6 +142,10 @@ uio_map_mem(int uio_device_fd, int uio_device_id,
}
/* Read mapping size and physical address expressed in hexa(base 16) */
uio_map_size = strtol(uio_map_size_str, NULL, 16);
+ if (uio_map_size <= 0 || uio_map_size > INT_MAX) {
+ ENETFEC_PMD_ERR("Invalid mapping size: %u.", uio_map_size);
+ return NULL;
+ }
uio_map_p_addr = strtol(uio_map_p_addr_str, NULL, 16);
if (uio_map_id == 0) {
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:36.999662087 +0000
+++ 0060-net-enetfec-fix-out-of-bounds-access-in-UIO-mapping.patch 2025-10-27 15:54:34.839950653 +0000
@@ -1 +1 @@
-From 22b0837bd93a777b8ca7fcf234985175e456a4f5 Mon Sep 17 00:00:00 2001
+From 059f9f130cb425d9186563ce7e5142ed0554ec56 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 22b0837bd93a777b8ca7fcf234985175e456a4f5 ]
+
@@ -12 +13,0 @@
-Cc: stable@dpdk.org
@@ -21 +22 @@
-index 23cb4e7e93..f32d5e1b1e 100644
+index f41e314745..786e7b6a0e 100644
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/enetfec: fix buffer descriptor size configuration' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (58 preceding siblings ...)
2025-10-27 16:19 ` patch 'net/enetfec: fix out-of-bounds access in UIO mapping' " luca.boccassi
@ 2025-10-27 16:19 ` luca.boccassi
2025-10-27 16:19 ` patch 'net/enetfec: fix Tx queue free' " luca.boccassi
` (17 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:19 UTC (permalink / raw)
To: Hemant Agrawal; +Cc: Sachin Saxena, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/88b56e48b6d7424a0792ed714489390bc8d848de
Thanks.
Luca Boccassi
---
From 88b56e48b6d7424a0792ed714489390bc8d848de Mon Sep 17 00:00:00 2001
From: Hemant Agrawal <hemant.agrawal@nxp.com>
Date: Mon, 6 Oct 2025 13:34:02 +0530
Subject: [PATCH] net/enetfec: fix buffer descriptor size configuration
[ upstream commit f034c096b86ed79345cc1f83c6191713b2814fb0 ]
The driver previously allowed arbitrary descriptor counts, which could
lead to misaligned buffer allocations. This patch enforces the use of
fixed descriptor ring sizes for both RX and TX queues, ensuring proper
buffer allocation and avoiding potential runtime issues.
Fixes: bb5b5bf1e5c6 ("net/enetfec: support queue configuration")
Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
Acked-by: Sachin Saxena <sachin.saxena@nxp.com>
---
drivers/net/enetfec/enet_ethdev.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/net/enetfec/enet_ethdev.c b/drivers/net/enetfec/enet_ethdev.c
index d7a1121ff4..27f338a9af 100644
--- a/drivers/net/enetfec/enet_ethdev.c
+++ b/drivers/net/enetfec/enet_ethdev.c
@@ -389,7 +389,7 @@ enetfec_tx_queue_setup(struct rte_eth_dev *dev,
return -ENOMEM;
}
- if (nb_desc > MAX_TX_BD_RING_SIZE) {
+ if (nb_desc != MAX_TX_BD_RING_SIZE) {
nb_desc = MAX_TX_BD_RING_SIZE;
ENETFEC_PMD_WARN("modified the nb_desc to MAX_TX_BD_RING_SIZE");
}
@@ -473,7 +473,7 @@ enetfec_rx_queue_setup(struct rte_eth_dev *dev,
return -ENOMEM;
}
- if (nb_rx_desc > MAX_RX_BD_RING_SIZE) {
+ if (nb_rx_desc != MAX_RX_BD_RING_SIZE) {
nb_rx_desc = MAX_RX_BD_RING_SIZE;
ENETFEC_PMD_WARN("modified the nb_desc to MAX_RX_BD_RING_SIZE");
}
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:37.031667123 +0000
+++ 0061-net-enetfec-fix-buffer-descriptor-size-configuration.patch 2025-10-27 15:54:34.839950653 +0000
@@ -1 +1 @@
-From f034c096b86ed79345cc1f83c6191713b2814fb0 Mon Sep 17 00:00:00 2001
+From 88b56e48b6d7424a0792ed714489390bc8d848de Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit f034c096b86ed79345cc1f83c6191713b2814fb0 ]
+
@@ -12 +13,0 @@
-Cc: stable@dpdk.org
@@ -21 +22 @@
-index 7c2926409e..f7a45fcd4d 100644
+index d7a1121ff4..27f338a9af 100644
@@ -24 +25 @@
-@@ -384,7 +384,7 @@ enetfec_tx_queue_setup(struct rte_eth_dev *dev,
+@@ -389,7 +389,7 @@ enetfec_tx_queue_setup(struct rte_eth_dev *dev,
@@ -33 +34 @@
-@@ -462,7 +462,7 @@ enetfec_rx_queue_setup(struct rte_eth_dev *dev,
+@@ -473,7 +473,7 @@ enetfec_rx_queue_setup(struct rte_eth_dev *dev,
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/enetfec: fix Tx queue free' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (59 preceding siblings ...)
2025-10-27 16:19 ` patch 'net/enetfec: fix buffer descriptor size configuration' " luca.boccassi
@ 2025-10-27 16:19 ` luca.boccassi
2025-10-27 16:19 ` patch 'net/enetfec: fix checksum flag handling and error return' " luca.boccassi
` (16 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:19 UTC (permalink / raw)
To: Hemant Agrawal; +Cc: Sachin Saxena, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/0162bc45e694d4c6b9a09c6155d9c09286d9d8b5
Thanks.
Luca Boccassi
---
From 0162bc45e694d4c6b9a09c6155d9c09286d9d8b5 Mon Sep 17 00:00:00 2001
From: Hemant Agrawal <hemant.agrawal@nxp.com>
Date: Mon, 6 Oct 2025 13:34:03 +0530
Subject: [PATCH] net/enetfec: fix Tx queue free
[ upstream commit f0aa80200d87e38a613af1181a2b1048bd512c76 ]
The TX queue cleanup mistakenly freed RX queue pointers instead of TX
queue pointers. This patch corrects the loop to free the correct memory.
Fixes: ecae71571b0d ("net/enetfec: support Rx/Tx")
Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
Acked-by: Sachin Saxena <sachin.saxena@nxp.com>
---
drivers/net/enetfec/enet_ethdev.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/enetfec/enet_ethdev.c b/drivers/net/enetfec/enet_ethdev.c
index 27f338a9af..2f920faf3b 100644
--- a/drivers/net/enetfec/enet_ethdev.c
+++ b/drivers/net/enetfec/enet_ethdev.c
@@ -349,7 +349,7 @@ enet_free_queue(struct rte_eth_dev *dev)
for (i = 0; i < dev->data->nb_rx_queues; i++)
rte_free(fep->rx_queues[i]);
for (i = 0; i < dev->data->nb_tx_queues; i++)
- rte_free(fep->rx_queues[i]);
+ rte_free(fep->tx_queues[i]);
}
static const unsigned short offset_des_active_rxq[] = {
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:37.064529467 +0000
+++ 0062-net-enetfec-fix-Tx-queue-free.patch 2025-10-27 15:54:34.839950653 +0000
@@ -1 +1 @@
-From f0aa80200d87e38a613af1181a2b1048bd512c76 Mon Sep 17 00:00:00 2001
+From 0162bc45e694d4c6b9a09c6155d9c09286d9d8b5 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit f0aa80200d87e38a613af1181a2b1048bd512c76 ]
+
@@ -10 +11,0 @@
-Cc: stable@dpdk.org
@@ -19 +20 @@
-index f7a45fcd4d..16f36a53f1 100644
+index 27f338a9af..2f920faf3b 100644
@@ -22 +23 @@
-@@ -350,7 +350,7 @@ enet_free_queue(struct rte_eth_dev *dev)
+@@ -349,7 +349,7 @@ enet_free_queue(struct rte_eth_dev *dev)
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/enetfec: fix checksum flag handling and error return' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (60 preceding siblings ...)
2025-10-27 16:19 ` patch 'net/enetfec: fix Tx queue free' " luca.boccassi
@ 2025-10-27 16:19 ` luca.boccassi
2025-10-27 16:19 ` patch 'net/enetfec: reject multi-queue configuration' " luca.boccassi
` (15 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:19 UTC (permalink / raw)
To: Hemant Agrawal; +Cc: Sachin Saxena, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/d0777ba4054c3ae9b0555681171076af51db37f6
Thanks.
Luca Boccassi
---
From d0777ba4054c3ae9b0555681171076af51db37f6 Mon Sep 17 00:00:00 2001
From: Hemant Agrawal <hemant.agrawal@nxp.com>
Date: Mon, 6 Oct 2025 13:34:04 +0530
Subject: [PATCH] net/enetfec: fix checksum flag handling and error return
[ upstream commit b35089c52802378ed267717f069aa57cb8dce5d2 ]
- Corrects the logic for setting RX checksum flags based on error.
- Updates TX checksum offload condition to check for TX flags.
- Fixes incorrect error return in RX queue setup by replacing `errno`
with `-ENOMEM`.
Fixes: ecae71571b0d ("net/enetfec: support Rx/Tx")
Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
Acked-by: Sachin Saxena <sachin.saxena@nxp.com>
---
drivers/net/enetfec/enet_rxtx.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/drivers/net/enetfec/enet_rxtx.c b/drivers/net/enetfec/enet_rxtx.c
index 0aea8b240d..ea2c28a26b 100644
--- a/drivers/net/enetfec/enet_rxtx.c
+++ b/drivers/net/enetfec/enet_rxtx.c
@@ -121,10 +121,11 @@ enetfec_recv_pkts(void *rxq1, struct rte_mbuf **rx_pkts,
(rxq->fep->flag_csum & RX_FLAG_CSUM_EN)) {
if ((rte_read32(&ebdp->bd_esc) &
rte_cpu_to_le_32(RX_FLAG_CSUM_ERR)) == 0) {
- /* don't check it */
- mbuf->ol_flags = RTE_MBUF_F_RX_IP_CKSUM_BAD;
- } else {
+ /* No checksum error - checksum is good */
mbuf->ol_flags = RTE_MBUF_F_RX_IP_CKSUM_GOOD;
+ } else {
+ /* Checksum error detected */
+ mbuf->ol_flags = RTE_MBUF_F_RX_IP_CKSUM_BAD;
}
}
@@ -238,7 +239,8 @@ enetfec_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts)
if (txq->fep->bufdesc_ex) {
struct bufdesc_ex *ebdp = (struct bufdesc_ex *)bdp;
- if (mbuf->ol_flags == RTE_MBUF_F_RX_IP_CKSUM_GOOD)
+ if (mbuf->ol_flags & (RTE_MBUF_F_TX_IP_CKSUM | RTE_MBUF_F_TX_TCP_CKSUM |
+ RTE_MBUF_F_TX_UDP_CKSUM | RTE_MBUF_F_TX_SCTP_CKSUM))
estatus |= TX_BD_PINS | TX_BD_IINS;
rte_write32(0, &ebdp->bd_bdu);
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:37.097264651 +0000
+++ 0063-net-enetfec-fix-checksum-flag-handling-and-error-ret.patch 2025-10-27 15:54:34.839950653 +0000
@@ -1 +1 @@
-From b35089c52802378ed267717f069aa57cb8dce5d2 Mon Sep 17 00:00:00 2001
+From d0777ba4054c3ae9b0555681171076af51db37f6 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit b35089c52802378ed267717f069aa57cb8dce5d2 ]
+
@@ -12 +13,0 @@
-Cc: stable@dpdk.org
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/enetfec: reject multi-queue configuration' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (61 preceding siblings ...)
2025-10-27 16:19 ` patch 'net/enetfec: fix checksum flag handling and error return' " luca.boccassi
@ 2025-10-27 16:19 ` luca.boccassi
2025-10-27 16:19 ` patch 'net/enetfec: fix memory leak in Rx buffer cleanup' " luca.boccassi
` (14 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:19 UTC (permalink / raw)
To: Hemant Agrawal; +Cc: Sachin Saxena, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/e2a01705fc3fc1d36e39e1876d94fd98ff834bdf
Thanks.
Luca Boccassi
---
From e2a01705fc3fc1d36e39e1876d94fd98ff834bdf Mon Sep 17 00:00:00 2001
From: Hemant Agrawal <hemant.agrawal@nxp.com>
Date: Mon, 6 Oct 2025 13:34:05 +0530
Subject: [PATCH] net/enetfec: reject multi-queue configuration
[ upstream commit b1c162858c1efc31c8b4ac26b5943b7b8dd65bf8 ]
The enetfec PMD currently supports only a single TX queue. This patch
adds a check to prevent users from configuring more than one queue,
ensuring predictable behavior and avoiding unsupported configurations.
Fixes: bb5b5bf1e5c6 ("net/enetfec: support queue configuration")
Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
Acked-by: Sachin Saxena <sachin.saxena@nxp.com>
---
drivers/net/enetfec/enet_ethdev.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/drivers/net/enetfec/enet_ethdev.c b/drivers/net/enetfec/enet_ethdev.c
index 2f920faf3b..e6e74c30b8 100644
--- a/drivers/net/enetfec/enet_ethdev.c
+++ b/drivers/net/enetfec/enet_ethdev.c
@@ -1,5 +1,5 @@
/* SPDX-License-Identifier: BSD-3-Clause
- * Copyright 2020-2021 NXP
+ * Copyright 2020-2021,2023 NXP
*/
#include <inttypes.h>
@@ -382,6 +382,11 @@ enetfec_tx_queue_setup(struct rte_eth_dev *dev,
return -EINVAL;
}
+ if (queue_idx > 0) {
+ ENETFEC_PMD_ERR("Multi queue not supported");
+ return -EINVAL;
+ }
+
/* allocate transmit queue */
txq = rte_zmalloc(NULL, sizeof(*txq), RTE_CACHE_LINE_SIZE);
if (txq == NULL) {
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:37.129641292 +0000
+++ 0064-net-enetfec-reject-multi-queue-configuration.patch 2025-10-27 15:54:34.839950653 +0000
@@ -1 +1 @@
-From b1c162858c1efc31c8b4ac26b5943b7b8dd65bf8 Mon Sep 17 00:00:00 2001
+From e2a01705fc3fc1d36e39e1876d94fd98ff834bdf Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit b1c162858c1efc31c8b4ac26b5943b7b8dd65bf8 ]
+
@@ -11 +12,0 @@
-Cc: stable@dpdk.org
@@ -20 +21 @@
-index 16f36a53f1..bcecab828e 100644
+index 2f920faf3b..e6e74c30b8 100644
@@ -30,3 +31,3 @@
-@@ -377,6 +377,11 @@ enetfec_tx_queue_setup(struct rte_eth_dev *dev,
- sizeof(struct bufdesc);
- unsigned int dsize_log2 = rte_fls_u64(dsize) - 1;
+@@ -382,6 +382,11 @@ enetfec_tx_queue_setup(struct rte_eth_dev *dev,
+ return -EINVAL;
+ }
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/enetfec: fix memory leak in Rx buffer cleanup' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (62 preceding siblings ...)
2025-10-27 16:19 ` patch 'net/enetfec: reject multi-queue configuration' " luca.boccassi
@ 2025-10-27 16:19 ` luca.boccassi
2025-10-27 16:19 ` patch 'net/enetfec: reject Tx deferred queue' " luca.boccassi
` (13 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:19 UTC (permalink / raw)
To: Hemant Agrawal; +Cc: Sachin Saxena, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/496f59b06f375a78775ab71d57adafea0c4abbe9
Thanks.
Luca Boccassi
---
From 496f59b06f375a78775ab71d57adafea0c4abbe9 Mon Sep 17 00:00:00 2001
From: Hemant Agrawal <hemant.agrawal@nxp.com>
Date: Mon, 6 Oct 2025 13:34:06 +0530
Subject: [PATCH] net/enetfec: fix memory leak in Rx buffer cleanup
[ upstream commit 979d00728b01a77f8f67f46c7cb06e2628542d29 ]
The RX buffer cleanup logic did not check for NULL before freeing mbufs,
which could lead to undefined behavior. This patch adds a NULL check
before freeing each mbuf.
Fixes: ecae71571b0d ("net/enetfec: support Rx/Tx")
Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
Acked-by: Sachin Saxena <sachin.saxena@nxp.com>
---
drivers/net/enetfec/enet_ethdev.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/drivers/net/enetfec/enet_ethdev.c b/drivers/net/enetfec/enet_ethdev.c
index e6e74c30b8..c2898737eb 100644
--- a/drivers/net/enetfec/enet_ethdev.c
+++ b/drivers/net/enetfec/enet_ethdev.c
@@ -1,5 +1,5 @@
/* SPDX-License-Identifier: BSD-3-Clause
- * Copyright 2020-2021,2023 NXP
+ * Copyright 2020-2021,2023-2024 NXP
*/
#include <inttypes.h>
@@ -171,8 +171,10 @@ enet_free_buffers(struct rte_eth_dev *dev)
bdp = rxq->bd.base;
for (i = 0; i < rxq->bd.ring_size; i++) {
mbuf = rxq->rx_mbuf[i];
- rxq->rx_mbuf[i] = NULL;
- rte_pktmbuf_free(mbuf);
+ if (mbuf) {
+ rxq->rx_mbuf[i] = NULL;
+ rte_pktmbuf_free(mbuf);
+ }
bdp = enet_get_nextdesc(bdp, &rxq->bd);
}
}
@@ -558,7 +560,7 @@ err_alloc:
}
}
rte_free(rxq);
- return errno;
+ return -ENOMEM;
}
static const struct eth_dev_ops enetfec_ops = {
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:37.162841990 +0000
+++ 0065-net-enetfec-fix-memory-leak-in-Rx-buffer-cleanup.patch 2025-10-27 15:54:34.839950653 +0000
@@ -1 +1 @@
-From 979d00728b01a77f8f67f46c7cb06e2628542d29 Mon Sep 17 00:00:00 2001
+From 496f59b06f375a78775ab71d57adafea0c4abbe9 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 979d00728b01a77f8f67f46c7cb06e2628542d29 ]
+
@@ -11 +12,0 @@
-Cc: stable@dpdk.org
@@ -20 +21 @@
-index bcecab828e..60bb4f7ebd 100644
+index e6e74c30b8..c2898737eb 100644
@@ -30 +31 @@
-@@ -172,8 +172,10 @@ enet_free_buffers(struct rte_eth_dev *dev)
+@@ -171,8 +171,10 @@ enet_free_buffers(struct rte_eth_dev *dev)
@@ -43 +44 @@
-@@ -547,7 +549,7 @@ err_alloc:
+@@ -558,7 +560,7 @@ err_alloc:
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/enetfec: reject Tx deferred queue' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (63 preceding siblings ...)
2025-10-27 16:19 ` patch 'net/enetfec: fix memory leak in Rx buffer cleanup' " luca.boccassi
@ 2025-10-27 16:19 ` luca.boccassi
2025-10-27 16:19 ` patch 'net/tap: fix interrupt callback crash after failed start' " luca.boccassi
` (12 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:19 UTC (permalink / raw)
To: Hemant Agrawal; +Cc: Sachin Saxena, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/4eea4fd0291f90f85ae65130bc5d399a2e099d08
Thanks.
Luca Boccassi
---
From 4eea4fd0291f90f85ae65130bc5d399a2e099d08 Mon Sep 17 00:00:00 2001
From: Hemant Agrawal <hemant.agrawal@nxp.com>
Date: Mon, 6 Oct 2025 13:34:07 +0530
Subject: [PATCH] net/enetfec: reject Tx deferred queue
[ upstream commit dd6b3572a310d0f3e045d8e9d1eb5f6181729d08 ]
This patch adds a check to reject configuration of Tx deferred start,
which is not supported by the enetfec PMD. This ensures that unsupported
features are explicitly handled and reported.
Fixes: bb5b5bf1e5c6 ("net/enetfec: support queue configuration")
Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
Acked-by: Sachin Saxena <sachin.saxena@nxp.com>
---
drivers/net/enetfec/enet_ethdev.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/drivers/net/enetfec/enet_ethdev.c b/drivers/net/enetfec/enet_ethdev.c
index c2898737eb..2b36176ab6 100644
--- a/drivers/net/enetfec/enet_ethdev.c
+++ b/drivers/net/enetfec/enet_ethdev.c
@@ -389,6 +389,12 @@ enetfec_tx_queue_setup(struct rte_eth_dev *dev,
return -EINVAL;
}
+ /* Tx deferred start is not supported */
+ if (tx_conf->tx_deferred_start) {
+ ENETFEC_PMD_ERR("Tx deferred start not supported");
+ return -EINVAL;
+ }
+
/* allocate transmit queue */
txq = rte_zmalloc(NULL, sizeof(*txq), RTE_CACHE_LINE_SIZE);
if (txq == NULL) {
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:37.194811518 +0000
+++ 0066-net-enetfec-reject-Tx-deferred-queue.patch 2025-10-27 15:54:34.839950653 +0000
@@ -1 +1 @@
-From dd6b3572a310d0f3e045d8e9d1eb5f6181729d08 Mon Sep 17 00:00:00 2001
+From 4eea4fd0291f90f85ae65130bc5d399a2e099d08 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit dd6b3572a310d0f3e045d8e9d1eb5f6181729d08 ]
+
@@ -11 +12,0 @@
-Cc: stable@dpdk.org
@@ -20 +21 @@
-index 60bb4f7ebd..6d4d3e0fc2 100644
+index c2898737eb..2b36176ab6 100644
@@ -23 +24 @@
-@@ -384,6 +384,12 @@ enetfec_tx_queue_setup(struct rte_eth_dev *dev,
+@@ -389,6 +389,12 @@ enetfec_tx_queue_setup(struct rte_eth_dev *dev,
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/tap: fix interrupt callback crash after failed start' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (64 preceding siblings ...)
2025-10-27 16:19 ` patch 'net/enetfec: reject Tx deferred queue' " luca.boccassi
@ 2025-10-27 16:19 ` luca.boccassi
2025-10-27 16:19 ` patch 'net/ena: fix PCI BAR mapping on 64K page size' " luca.boccassi
` (11 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:19 UTC (permalink / raw)
To: Robin Jarry; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/1669b8b486d6a0114a2c21654a1ef5248dca4725
Thanks.
Luca Boccassi
---
From 1669b8b486d6a0114a2c21654a1ef5248dca4725 Mon Sep 17 00:00:00 2001
From: Robin Jarry <rjarry@redhat.com>
Date: Fri, 17 Oct 2025 14:19:47 +0200
Subject: [PATCH] net/tap: fix interrupt callback crash after failed start
[ upstream commit c44ed082917316257dbeb2454414932d39f9c321 ]
After moving a tap linux net device to a different namespace,
tap_link_set_up fails with an -ENODEV error. Indeed it relies on an
ioctl call using the interface name as argument:
/* with ifr->ifrn_name = "dtapX" */
ioctl(pmd->ioctl_sock, SIOCGIFFLAGS, ifr)
This causes rte_eth_dev_stop() to do nothing since the device is not
seen as started. And then, when removing the device, the interrupt
callbacks are left there.
If they are invoked, they will be so with a "freed" device pointer:
Thread 2 "dpdk-intr" hit Breakpoint 1, tap_dev_intr_handler
at ../drivers/net/tap/rte_eth_tap.c:1689
1689 struct pmd_internals *pmd = dev->data->dev_private;
(gdb) p *dev
$2 = {
...
data = 0x0,
...
state = RTE_ETH_DEV_UNUSED,
security_ctx = 0x0
}
This causes a crash when dereferencing the data pointer.
When tap_link_set_up fails, ensure to unregister the interrupt callbacks
that were just reinstalled.
Fixes: c0bddd3a057f ("net/tap: add link status notification")
Signed-off-by: Robin Jarry <rjarry@redhat.com>
---
drivers/net/tap/rte_eth_tap.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/net/tap/rte_eth_tap.c b/drivers/net/tap/rte_eth_tap.c
index 68f9a5ce34..cb7ed40840 100644
--- a/drivers/net/tap/rte_eth_tap.c
+++ b/drivers/net/tap/rte_eth_tap.c
@@ -952,8 +952,10 @@ tap_dev_start(struct rte_eth_dev *dev)
return err;
err = tap_link_set_up(dev);
- if (err)
+ if (err) {
+ tap_intr_handle_set(dev, 0);
return err;
+ }
for (i = 0; i < dev->data->nb_tx_queues; i++)
dev->data->tx_queue_state[i] = RTE_ETH_QUEUE_STATE_STARTED;
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:37.227582229 +0000
+++ 0067-net-tap-fix-interrupt-callback-crash-after-failed-st.patch 2025-10-27 15:54:34.843950754 +0000
@@ -1 +1 @@
-From c44ed082917316257dbeb2454414932d39f9c321 Mon Sep 17 00:00:00 2001
+From 1669b8b486d6a0114a2c21654a1ef5248dca4725 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit c44ed082917316257dbeb2454414932d39f9c321 ]
+
@@ -37 +38,0 @@
-Cc: stable@dpdk.org
@@ -45 +46 @@
-index 650ddbd706..58d70f7dd6 100644
+index 68f9a5ce34..cb7ed40840 100644
@@ -48 +49 @@
-@@ -889,8 +889,10 @@ tap_dev_start(struct rte_eth_dev *dev)
+@@ -952,8 +952,10 @@ tap_dev_start(struct rte_eth_dev *dev)
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/ena: fix PCI BAR mapping on 64K page size' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (65 preceding siblings ...)
2025-10-27 16:19 ` patch 'net/tap: fix interrupt callback crash after failed start' " luca.boccassi
@ 2025-10-27 16:19 ` luca.boccassi
2025-10-27 16:19 ` patch 'net/ena/base: fix unsafe memcpy on invalid memory' " luca.boccassi
` (10 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:19 UTC (permalink / raw)
To: Shai Brandes; +Cc: Amit Bernstein, Yosef Raisman, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/a27f262b008305bdf84343509f9a70c13c1e16c5
Thanks.
Luca Boccassi
---
From a27f262b008305bdf84343509f9a70c13c1e16c5 Mon Sep 17 00:00:00 2001
From: Shai Brandes <shaibran@amazon.com>
Date: Wed, 15 Oct 2025 15:09:16 +0300
Subject: [PATCH] net/ena: fix PCI BAR mapping on 64K page size
[ upstream commit c71e3fbee65637084e1e42500e9e6300d50f467b ]
On 64K page systems, DPDK `pci_uio` driver aligns the physical address
to a 64K boundary before assigning a virtual address.
If the original physical BAR address is not 64K-aligned,
this adjustment leads to an incorrect mapping.
This patch ensures the BAR virtual address received in the driver accounts
for both PAGE size and BAR physical offset to correctly map each BAR.
The fix is compatible for every PAGE size, applies to every used BAR,
and supports both 32/64 bit DPDK builds.
Example issue:
- BAR0 physical address: 0x80208000 (not 64K-aligned)
- DPDK aligned physical address: 0x80208000 -> 0x80200000
(masking 0x8000 offset)
- DPDK mapped physical to virtual address: 0x80200000 -> 0x1140000000
- Driver accessed BAR0 virtual address = 0x1140000000
(causing init failure)
- Resolution is to add correct offset to driver BAR0 address:
0x1140000000 + 0x8000
Fixes: 1173fca25af9 ("ena: add polling-mode driver")
Signed-off-by: Amit Bernstein <amitbern@amazon.com>
Signed-off-by: Shai Brandes <shaibran@amazon.com>
Reviewed-by: Yosef Raisman <yraisman@amazon.com>
---
drivers/net/ena/ena_ethdev.c | 28 ++++++++++++++++++++++++----
1 file changed, 24 insertions(+), 4 deletions(-)
diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c
index e640bbae3d..079fc23f05 100644
--- a/drivers/net/ena/ena_ethdev.c
+++ b/drivers/net/ena/ena_ethdev.c
@@ -8,6 +8,7 @@
#include <rte_version.h>
#include <rte_net.h>
#include <rte_kvargs.h>
+#include <rte_eal_paging.h>
#include "ena_ethdev.h"
#include "ena_logs.h"
@@ -2084,6 +2085,24 @@ static int ena_init_once(void)
return 0;
}
+/*
+ * Returns PCI BAR virtual address.
+ * If the physical address is not page-aligned,
+ * adjusts the virtual address by the page offset.
+ * Assumes page size is a power of 2.
+ */
+static void *pci_bar_addr(struct rte_pci_device *dev, uint32_t bar)
+{
+ const struct rte_mem_resource *res = &dev->mem_resource[bar];
+ size_t offset = res->phys_addr % rte_mem_page_size();
+ void *vaddr = RTE_PTR_ADD(res->addr, offset);
+
+ PMD_INIT_LOG(INFO, "PCI BAR [%u]: phys_addr=0x%" PRIx64 ", addr=%p, offset=0x%zx, adjusted_addr=%p\n",
+ bar, res->phys_addr, res->addr, offset, vaddr);
+
+ return vaddr;
+}
+
static int eth_ena_dev_init(struct rte_eth_dev *eth_dev)
{
struct ena_calc_queue_size_ctx calc_queue_ctx = { 0 };
@@ -2128,16 +2147,17 @@ static int eth_ena_dev_init(struct rte_eth_dev *eth_dev)
intr_handle = pci_dev->intr_handle;
- adapter->regs = pci_dev->mem_resource[ENA_REGS_BAR].addr;
- adapter->dev_mem_base = pci_dev->mem_resource[ENA_MEM_BAR].addr;
-
+ adapter->regs = pci_bar_addr(pci_dev, ENA_REGS_BAR);
if (!adapter->regs) {
PMD_INIT_LOG(CRIT, "Failed to access registers BAR(%d)\n",
ENA_REGS_BAR);
return -ENXIO;
}
-
ena_dev->reg_bar = adapter->regs;
+
+ /* Memory BAR may be NULL on non LLQ supported devices */
+ adapter->dev_mem_base = pci_bar_addr(pci_dev, ENA_MEM_BAR);
+
/* Pass device data as a pointer which can be passed to the IO functions
* by the ena_com (for example - the memory allocation).
*/
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:37.270665819 +0000
+++ 0068-net-ena-fix-PCI-BAR-mapping-on-64K-page-size.patch 2025-10-27 15:54:34.843950754 +0000
@@ -1 +1 @@
-From c71e3fbee65637084e1e42500e9e6300d50f467b Mon Sep 17 00:00:00 2001
+From a27f262b008305bdf84343509f9a70c13c1e16c5 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit c71e3fbee65637084e1e42500e9e6300d50f467b ]
+
@@ -27 +28,0 @@
-Cc: stable@dpdk.org
@@ -33,16 +34,3 @@
- doc/guides/rel_notes/release_25_11.rst | 1 +
- drivers/net/ena/ena_ethdev.c | 28 ++++++++++++++++++++++----
- 2 files changed, 25 insertions(+), 4 deletions(-)
-
-diff --git a/doc/guides/rel_notes/release_25_11.rst b/doc/guides/rel_notes/release_25_11.rst
-index 94e5182016..863d111c8d 100644
---- a/doc/guides/rel_notes/release_25_11.rst
-+++ b/doc/guides/rel_notes/release_25_11.rst
-@@ -109,6 +109,7 @@ New Features
- * **Updated Amazon ENA (Elastic Network Adapter) ethernet driver.**
-
- * Added support for retrieving HW timestamps for Rx packets with nanosecond resolution.
-+ * Fixed PCI BAR mapping on 64K page size.
-
- * **Added Huawei hinic3 ethernet driver.**
-
+ drivers/net/ena/ena_ethdev.c | 28 ++++++++++++++++++++++++----
+ 1 file changed, 24 insertions(+), 4 deletions(-)
+
@@ -50 +38 @@
-index 5147a754b2..aaa4feb11b 100644
+index e640bbae3d..079fc23f05 100644
@@ -53 +41 @@
-@@ -9,6 +9,7 @@
+@@ -8,6 +8,7 @@
@@ -61 +49 @@
-@@ -2364,6 +2365,24 @@ static int ena_init_once(void)
+@@ -2084,6 +2085,24 @@ static int ena_init_once(void)
@@ -77 +65 @@
-+ PMD_INIT_LOG_LINE(INFO, "PCI BAR [%u]: phys_addr=0x%" PRIx64 ", addr=%p, offset=0x%zx, adjusted_addr=%p",
++ PMD_INIT_LOG(INFO, "PCI BAR [%u]: phys_addr=0x%" PRIx64 ", addr=%p, offset=0x%zx, adjusted_addr=%p\n",
@@ -86 +74 @@
-@@ -2409,16 +2428,17 @@ static int eth_ena_dev_init(struct rte_eth_dev *eth_dev)
+@@ -2128,16 +2147,17 @@ static int eth_ena_dev_init(struct rte_eth_dev *eth_dev)
@@ -95 +83 @@
- PMD_INIT_LOG_LINE(CRIT, "Failed to access registers BAR(%d)",
+ PMD_INIT_LOG(CRIT, "Failed to access registers BAR(%d)\n",
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/ena/base: fix unsafe memcpy on invalid memory' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (66 preceding siblings ...)
2025-10-27 16:19 ` patch 'net/ena: fix PCI BAR mapping on 64K page size' " luca.boccassi
@ 2025-10-27 16:19 ` luca.boccassi
2025-10-27 16:19 ` patch 'net/dpaa2: fix uninitialized variable' " luca.boccassi
` (9 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:19 UTC (permalink / raw)
To: Shai Brandes; +Cc: Amit Bernstein, Yosef Raisman, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/dc02906bd29022033d42eb96823010b852f4d100
Thanks.
Luca Boccassi
---
From dc02906bd29022033d42eb96823010b852f4d100 Mon Sep 17 00:00:00 2001
From: Shai Brandes <shaibran@amazon.com>
Date: Wed, 15 Oct 2025 15:12:30 +0300
Subject: [PATCH] net/ena/base: fix unsafe memcpy on invalid memory
[ upstream commit b70db0912a6a181ecf513a4eef61153d1063c0ae ]
The return status check was placed after a memcpy operation,
which could result in copying from an invalid memory region
if the feature fetch failed.
Fixes: b68309be44c0 ("net/ena/base: update communication layer for the ENAv2")
Signed-off-by: Shai Brandes <shaibran@amazon.com>
Reviewed-by: Amit Bernstein <amitbern@amazon.com>
Reviewed-by: Yosef Raisman <yraisman@amazon.com>
---
drivers/net/ena/base/ena_com.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/net/ena/base/ena_com.c b/drivers/net/ena/base/ena_com.c
index 98035f3cd4..4e22b5f563 100644
--- a/drivers/net/ena/base/ena_com.c
+++ b/drivers/net/ena/base/ena_com.c
@@ -2014,13 +2014,13 @@ int ena_com_get_dev_attr_feat(struct ena_com_dev *ena_dev,
} else {
rc = ena_com_get_feature(ena_dev, &get_resp,
ENA_ADMIN_MAX_QUEUES_NUM, 0);
+ if (rc)
+ return rc;
+
memcpy(&get_feat_ctx->max_queues, &get_resp.u.max_queue,
sizeof(get_resp.u.max_queue));
ena_dev->tx_max_header_size =
get_resp.u.max_queue.max_header_size;
-
- if (rc)
- return rc;
}
rc = ena_com_get_feature(ena_dev, &get_resp,
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:37.305959051 +0000
+++ 0069-net-ena-base-fix-unsafe-memcpy-on-invalid-memory.patch 2025-10-27 15:54:34.843950754 +0000
@@ -1 +1 @@
-From b70db0912a6a181ecf513a4eef61153d1063c0ae Mon Sep 17 00:00:00 2001
+From dc02906bd29022033d42eb96823010b852f4d100 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit b70db0912a6a181ecf513a4eef61153d1063c0ae ]
+
@@ -11 +12,0 @@
-Cc: stable@dpdk.org
@@ -21 +22 @@
-index ede3c06139..f0936a6262 100644
+index 98035f3cd4..4e22b5f563 100644
@@ -24 +25 @@
-@@ -2453,13 +2453,13 @@ int ena_com_get_dev_attr_feat(struct ena_com_dev *ena_dev,
+@@ -2014,13 +2014,13 @@ int ena_com_get_dev_attr_feat(struct ena_com_dev *ena_dev,
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/dpaa2: fix uninitialized variable' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (67 preceding siblings ...)
2025-10-27 16:19 ` patch 'net/ena/base: fix unsafe memcpy on invalid memory' " luca.boccassi
@ 2025-10-27 16:19 ` luca.boccassi
2025-10-27 16:19 ` patch 'net/dpaa2: fix L3/L4 checksum results' " luca.boccassi
` (8 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:19 UTC (permalink / raw)
To: Prashant Gupta; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/36e67b7e40dad7c12ebd7383c11d823e8b7ec8a1
Thanks.
Luca Boccassi
---
From 36e67b7e40dad7c12ebd7383c11d823e8b7ec8a1 Mon Sep 17 00:00:00 2001
From: Prashant Gupta <prashant.gupta_3@nxp.com>
Date: Thu, 16 Oct 2025 15:57:51 +0530
Subject: [PATCH] net/dpaa2: fix uninitialized variable
[ upstream commit 058043d0590f52dd45555a362d31646c7c3ff943 ]
Initialize the kg_cfg structure before use in
rte_pmd_dpaa2_set_custom_hash(). This resolves an issue with
uninitialized memory access.
Fixes: 5f822962498e ("net/dpaa2: support custom hash key")
Signed-off-by: Prashant Gupta <prashant.gupta_3@nxp.com>
---
.mailmap | 1 +
drivers/net/dpaa2/base/dpaa2_hw_dpni.c | 3 ++-
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/.mailmap b/.mailmap
index 3ff821f286..ddc091adac 100644
--- a/.mailmap
+++ b/.mailmap
@@ -1111,6 +1111,7 @@ Piotr Pietruszewski <piotr.pietruszewski@intel.com>
Piotr Skajewski <piotrx.skajewski@intel.com>
Pradeep Satyanarayana <pradeep@us.ibm.com>
Prashant Bhole <bhole_prashant_q7@lab.ntt.co.jp>
+Prashant Gupta <prashant.gupta_3@nxp.com>
Prashant Upadhyaya <prashant.upadhyaya@aricent.com> <praupadhyaya@gmail.com>
Prateek Agarwal <prateekag@cse.iitb.ac.in>
Praveen Shetty <praveen.shetty@intel.com>
diff --git a/drivers/net/dpaa2/base/dpaa2_hw_dpni.c b/drivers/net/dpaa2/base/dpaa2_hw_dpni.c
index 4d33b51fea..2f3270fe29 100644
--- a/drivers/net/dpaa2/base/dpaa2_hw_dpni.c
+++ b/drivers/net/dpaa2/base/dpaa2_hw_dpni.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-3-Clause
*
* Copyright (c) 2016 Freescale Semiconductor, Inc. All rights reserved.
- * Copyright 2016-2021 NXP
+ * Copyright 2016-2021,2023-2025 NXP
*
*/
@@ -59,6 +59,7 @@ rte_pmd_dpaa2_set_custom_hash(uint16_t port_id,
return -ENOMEM;
}
+ memset(&kg_cfg, 0, sizeof(struct dpkg_profile_cfg));
kg_cfg.extracts[0].type = DPKG_EXTRACT_FROM_DATA;
kg_cfg.extracts[0].extract.from_data.offset = offset;
kg_cfg.extracts[0].extract.from_data.size = size;
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:37.338688313 +0000
+++ 0070-net-dpaa2-fix-uninitialized-variable.patch 2025-10-27 15:54:34.847950853 +0000
@@ -1 +1 @@
-From 058043d0590f52dd45555a362d31646c7c3ff943 Mon Sep 17 00:00:00 2001
+From 36e67b7e40dad7c12ebd7383c11d823e8b7ec8a1 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 058043d0590f52dd45555a362d31646c7c3ff943 ]
+
@@ -11 +12,0 @@
-Cc: stable@dpdk.org
@@ -20 +21 @@
-index 984621f26b..68bebe2ee0 100644
+index 3ff821f286..ddc091adac 100644
@@ -23,2 +24,2 @@
-@@ -1266,6 +1266,7 @@ Piotr Skajewski <piotrx.skajewski@intel.com>
- Potnuri Bharat Teja <bharat@chelsio.com>
+@@ -1111,6 +1111,7 @@ Piotr Pietruszewski <piotr.pietruszewski@intel.com>
+ Piotr Skajewski <piotrx.skajewski@intel.com>
@@ -30 +31 @@
- Prathisna Padmasanan <prathisna.padmasanan@intel.com>
+ Praveen Shetty <praveen.shetty@intel.com>
@@ -32 +33 @@
-index b1d473429a..13825046d8 100644
+index 4d33b51fea..2f3270fe29 100644
@@ -39 +40 @@
-- * Copyright 2016-2021,2023-2024 NXP
+- * Copyright 2016-2021 NXP
@@ -44 +45 @@
-@@ -60,6 +60,7 @@ rte_pmd_dpaa2_set_custom_hash(uint16_t port_id,
+@@ -59,6 +59,7 @@ rte_pmd_dpaa2_set_custom_hash(uint16_t port_id,
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/dpaa2: fix L3/L4 checksum results' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (68 preceding siblings ...)
2025-10-27 16:19 ` patch 'net/dpaa2: fix uninitialized variable' " luca.boccassi
@ 2025-10-27 16:19 ` luca.boccassi
2025-10-27 16:19 ` patch 'net/dpaa2: receive packets with additional parse errors' " luca.boccassi
` (7 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:19 UTC (permalink / raw)
To: Brick Yang; +Cc: Gagandeep Singh, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/68a50d66909c7bb8305eac7cdd1325fcbab01341
Thanks.
Luca Boccassi
---
From 68a50d66909c7bb8305eac7cdd1325fcbab01341 Mon Sep 17 00:00:00 2001
From: Brick Yang <brick.yang@nxp.com>
Date: Thu, 16 Oct 2025 15:57:53 +0530
Subject: [PATCH] net/dpaa2: fix L3/L4 checksum results
[ upstream commit 870354264644bc8a2f014571e9a34757258d2ec8 ]
Layer3 and layer4 checksum validation and error
status is part of word1 of annotation area, but
driver is looking into wrong word.
This patch fixes the checksum error status in packet
parsing.
Fixes: 94d31549c380 ("net/dpaa2: support Rx checksum offload in slow parsing")
Signed-off-by: Gagandeep Singh <g.singh@nxp.com>
Signed-off-by: Brick Yang <brick.yang@nxp.com>
---
drivers/net/dpaa2/base/dpaa2_hw_dpni_annot.h | 10 +++++-----
drivers/net/dpaa2/dpaa2_rxtx.c | 16 ++++------------
2 files changed, 9 insertions(+), 17 deletions(-)
diff --git a/drivers/net/dpaa2/base/dpaa2_hw_dpni_annot.h b/drivers/net/dpaa2/base/dpaa2_hw_dpni_annot.h
index 7e5e499b6a..4f5ac1a481 100644
--- a/drivers/net/dpaa2/base/dpaa2_hw_dpni_annot.h
+++ b/drivers/net/dpaa2/base/dpaa2_hw_dpni_annot.h
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-3-Clause
*
* Copyright (c) 2016 Freescale Semiconductor, Inc. All rights reserved.
- * Copyright 2016,2019 NXP
+ * Copyright 2016,2019,2022,2024 NXP
*
*/
@@ -298,13 +298,13 @@ struct dpaa2_faead {
#define DPAA2_ETH_FAS_PHE 0x00000020
#define DPAA2_ETH_FAS_BLE 0x00000010
/* L3 csum validation performed */
-#define DPAA2_ETH_FAS_L3CV 0x00000008
+#define DPAA2_ETH_FAS_L3CV 0x0000000800000000
/* L3 csum error */
-#define DPAA2_ETH_FAS_L3CE 0x00000004
+#define DPAA2_ETH_FAS_L3CE 0x0000000400000000
/* L4 csum validation performed */
-#define DPAA2_ETH_FAS_L4CV 0x00000002
+#define DPAA2_ETH_FAS_L4CV 0x0000000200000000
/* L4 csum error */
-#define DPAA2_ETH_FAS_L4CE 0x00000001
+#define DPAA2_ETH_FAS_L4CE 0x0000000100000000
#ifdef __cplusplus
}
diff --git a/drivers/net/dpaa2/dpaa2_rxtx.c b/drivers/net/dpaa2/dpaa2_rxtx.c
index a9de1c9f99..a40bf57004 100644
--- a/drivers/net/dpaa2/dpaa2_rxtx.c
+++ b/drivers/net/dpaa2/dpaa2_rxtx.c
@@ -196,14 +196,10 @@ dpaa2_dev_rx_parse_slow(struct rte_mbuf *mbuf,
goto parse_done;
}
- if (BIT_ISSET_AT_POS(annotation->word8, DPAA2_ETH_FAS_L3CE))
+ if (BIT_ISSET_AT_POS(annotation->word1, DPAA2_ETH_FAS_L3CE))
mbuf->ol_flags |= RTE_MBUF_F_RX_IP_CKSUM_BAD;
- else
- mbuf->ol_flags |= RTE_MBUF_F_RX_IP_CKSUM_GOOD;
- if (BIT_ISSET_AT_POS(annotation->word8, DPAA2_ETH_FAS_L4CE))
+ else if (BIT_ISSET_AT_POS(annotation->word1, DPAA2_ETH_FAS_L4CE))
mbuf->ol_flags |= RTE_MBUF_F_RX_L4_CKSUM_BAD;
- else
- mbuf->ol_flags |= RTE_MBUF_F_RX_L4_CKSUM_GOOD;
if (BIT_ISSET_AT_POS(annotation->word4, L3_IP_1_FIRST_FRAGMENT |
L3_IP_1_MORE_FRAGMENT |
@@ -243,14 +239,10 @@ dpaa2_dev_rx_parse(struct rte_mbuf *mbuf, void *hw_annot_addr)
DPAA2_PMD_DP_DEBUG("(fast parse) Annotation = 0x%" PRIx64 "\t",
annotation->word4);
- if (BIT_ISSET_AT_POS(annotation->word8, DPAA2_ETH_FAS_L3CE))
+ if (BIT_ISSET_AT_POS(annotation->word1, DPAA2_ETH_FAS_L3CE))
mbuf->ol_flags |= RTE_MBUF_F_RX_IP_CKSUM_BAD;
- else
- mbuf->ol_flags |= RTE_MBUF_F_RX_IP_CKSUM_GOOD;
- if (BIT_ISSET_AT_POS(annotation->word8, DPAA2_ETH_FAS_L4CE))
+ else if (BIT_ISSET_AT_POS(annotation->word1, DPAA2_ETH_FAS_L4CE))
mbuf->ol_flags |= RTE_MBUF_F_RX_L4_CKSUM_BAD;
- else
- mbuf->ol_flags |= RTE_MBUF_F_RX_L4_CKSUM_GOOD;
if (dpaa2_enable_ts[mbuf->port]) {
*dpaa2_timestamp_dynfield(mbuf) = annotation->word2;
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:37.375535617 +0000
+++ 0071-net-dpaa2-fix-L3-L4-checksum-results.patch 2025-10-27 15:54:34.847950853 +0000
@@ -1 +1 @@
-From 870354264644bc8a2f014571e9a34757258d2ec8 Mon Sep 17 00:00:00 2001
+From 68a50d66909c7bb8305eac7cdd1325fcbab01341 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 870354264644bc8a2f014571e9a34757258d2ec8 ]
+
@@ -13 +14,0 @@
-Cc: stable@dpdk.org
@@ -23 +24 @@
-index d156b07087..a670098958 100644
+index 7e5e499b6a..4f5ac1a481 100644
@@ -35 +36 @@
-@@ -304,13 +304,13 @@ struct dpaa2_faead {
+@@ -298,13 +298,13 @@ struct dpaa2_faead {
@@ -54 +55 @@
-index 656a3a423f..da0c06caad 100644
+index a9de1c9f99..a40bf57004 100644
@@ -57 +58 @@
-@@ -201,14 +201,10 @@ dpaa2_dev_rx_parse_slow(struct rte_mbuf *mbuf,
+@@ -196,14 +196,10 @@ dpaa2_dev_rx_parse_slow(struct rte_mbuf *mbuf,
@@ -74 +75 @@
-@@ -248,14 +244,10 @@ dpaa2_dev_rx_parse(struct rte_mbuf *mbuf, void *hw_annot_addr)
+@@ -243,14 +239,10 @@ dpaa2_dev_rx_parse(struct rte_mbuf *mbuf, void *hw_annot_addr)
@@ -89,2 +90,2 @@
- if (unlikely(dpaa2_print_parser_result))
- dpaa2_print_parse_result(annotation);
+ if (dpaa2_enable_ts[mbuf->port]) {
+ *dpaa2_timestamp_dynfield(mbuf) = annotation->word2;
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/dpaa2: receive packets with additional parse errors' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (69 preceding siblings ...)
2025-10-27 16:19 ` patch 'net/dpaa2: fix L3/L4 checksum results' " luca.boccassi
@ 2025-10-27 16:19 ` luca.boccassi
2025-10-27 16:19 ` patch 'crypto/qat: fix source buffer alignment' " luca.boccassi
` (6 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:19 UTC (permalink / raw)
To: Brick Yang; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/d027565f4ad01f84d30bc5139d277a880d94522c
Thanks.
Luca Boccassi
---
From d027565f4ad01f84d30bc5139d277a880d94522c Mon Sep 17 00:00:00 2001
From: Brick Yang <brick.yang@nxp.com>
Date: Thu, 16 Oct 2025 15:57:54 +0530
Subject: [PATCH] net/dpaa2: receive packets with additional parse errors
[ upstream commit e285f6ead6f20e3d05bf1c8fd4ed119d6fda0335 ]
Also receive packets with HW parser length errors.
Thus this option allows HW to not drop packets for any kind of parser
errors.
Fixes: 4690a6114ff6 ("net/dpaa2: enable error queues optionally")
Signed-off-by: Brick Yang <brick.yang@nxp.com>
---
drivers/net/dpaa2/dpaa2_ethdev.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/dpaa2/dpaa2_ethdev.c b/drivers/net/dpaa2/dpaa2_ethdev.c
index 834f904c14..1f3277ba34 100644
--- a/drivers/net/dpaa2/dpaa2_ethdev.c
+++ b/drivers/net/dpaa2/dpaa2_ethdev.c
@@ -1242,7 +1242,7 @@ dpaa2_dev_start(struct rte_eth_dev *dev)
err_cfg.errors = DPNI_ERROR_L3CE | DPNI_ERROR_L4CE;
/* if packet with parse error are not to be dropped */
- err_cfg.errors |= DPNI_ERROR_PHE;
+ err_cfg.errors |= DPNI_ERROR_PHE | DPNI_ERROR_BLE;
err_cfg.error_action = DPNI_ERROR_ACTION_CONTINUE;
}
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:37.407958547 +0000
+++ 0072-net-dpaa2-receive-packets-with-additional-parse-erro.patch 2025-10-27 15:54:34.847950853 +0000
@@ -1 +1 @@
-From e285f6ead6f20e3d05bf1c8fd4ed119d6fda0335 Mon Sep 17 00:00:00 2001
+From d027565f4ad01f84d30bc5139d277a880d94522c Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit e285f6ead6f20e3d05bf1c8fd4ed119d6fda0335 ]
+
@@ -11 +12,0 @@
-Cc: stable@dpdk.org
@@ -19 +20 @@
-index 41678ce09b..0fd577c448 100644
+index 834f904c14..1f3277ba34 100644
@@ -22 +23 @@
-@@ -1240,7 +1240,7 @@ dpaa2_dev_start(struct rte_eth_dev *dev)
+@@ -1242,7 +1242,7 @@ dpaa2_dev_start(struct rte_eth_dev *dev)
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'crypto/qat: fix source buffer alignment' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (70 preceding siblings ...)
2025-10-27 16:19 ` patch 'net/dpaa2: receive packets with additional parse errors' " luca.boccassi
@ 2025-10-27 16:19 ` luca.boccassi
2025-10-27 16:19 ` patch 'crypto/cnxk: refactor RSA verification' " luca.boccassi
` (5 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:19 UTC (permalink / raw)
To: Radu Nicolau; +Cc: Kai Ji, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/4c7cbd6bf29276e8f874343f8c262756e90c4f02
Thanks.
Luca Boccassi
---
From 4c7cbd6bf29276e8f874343f8c262756e90c4f02 Mon Sep 17 00:00:00 2001
From: Radu Nicolau <radu.nicolau@intel.com>
Date: Wed, 6 Aug 2025 14:48:32 +0000
Subject: [PATCH] crypto/qat: fix source buffer alignment
[ upstream commit 253174309ff7abf9eaba58d1bccf90cca7e6d215 ]
Fix performance regression resulting from using non cache-aligned
source buffers when using cryptodev API.
Fixes: fb3b9f492205 ("crypto/qat: rework burst data path")
Signed-off-by: Radu Nicolau <radu.nicolau@intel.com>
Acked-by: Kai Ji <kai.ji@intel.com>
---
drivers/crypto/qat/dev/qat_crypto_pmd_gen3.c | 14 ++++++------
drivers/crypto/qat/dev/qat_crypto_pmd_gen4.c | 6 ++---
drivers/crypto/qat/dev/qat_crypto_pmd_gens.h | 21 ++++++++++++++++-
drivers/crypto/qat/dev/qat_sym_pmd_gen1.c | 24 ++++++++++----------
4 files changed, 42 insertions(+), 23 deletions(-)
diff --git a/drivers/crypto/qat/dev/qat_crypto_pmd_gen3.c b/drivers/crypto/qat/dev/qat_crypto_pmd_gen3.c
index 989caabf17..4a114a8a79 100644
--- a/drivers/crypto/qat/dev/qat_crypto_pmd_gen3.c
+++ b/drivers/crypto/qat/dev/qat_crypto_pmd_gen3.c
@@ -368,7 +368,7 @@ qat_sym_build_op_aead_gen3(void *in_op, struct qat_sym_session *ctx,
}
total_len = qat_sym_build_req_set_data(req, in_op, cookie,
- in_sgl.vec, in_sgl.num, out_sgl.vec, out_sgl.num);
+ in_sgl.vec, in_sgl.num, out_sgl.vec, out_sgl.num, &ofs, op);
if (unlikely(total_len < 0)) {
op->status = RTE_CRYPTO_OP_STATUS_INVALID_ARGS;
return -EINVAL;
@@ -414,7 +414,7 @@ qat_sym_build_op_auth_gen3(void *in_op, struct qat_sym_session *ctx,
}
total_len = qat_sym_build_req_set_data(req, in_op, cookie,
- in_sgl.vec, in_sgl.num, out_sgl.vec, out_sgl.num);
+ in_sgl.vec, in_sgl.num, out_sgl.vec, out_sgl.num, &ofs, op);
if (unlikely(total_len < 0)) {
op->status = RTE_CRYPTO_OP_STATUS_INVALID_ARGS;
return -EINVAL;
@@ -503,7 +503,7 @@ qat_sym_dp_enqueue_single_aead_gen3(void *qp_data, uint8_t *drv_ctx,
rte_mov128((uint8_t *)req, (const uint8_t *)&(ctx->fw_req));
rte_prefetch0((uint8_t *)tx_queue->base_addr + tail);
data_len = qat_sym_build_req_set_data(req, user_data, cookie,
- data, n_data_vecs, NULL, 0);
+ data, n_data_vecs, NULL, 0, NULL, NULL);
if (unlikely(data_len < 0))
return -1;
@@ -555,12 +555,12 @@ qat_sym_dp_enqueue_aead_jobs_gen3(void *qp_data, uint8_t *drv_ctx,
data_len = qat_sym_build_req_set_data(req,
user_data[i], cookie,
vec->src_sgl[i].vec, vec->src_sgl[i].num,
- vec->dest_sgl[i].vec, vec->dest_sgl[i].num);
+ vec->dest_sgl[i].vec, vec->dest_sgl[i].num, NULL, NULL);
} else {
data_len = qat_sym_build_req_set_data(req,
user_data[i], cookie,
vec->src_sgl[i].vec,
- vec->src_sgl[i].num, NULL, 0);
+ vec->src_sgl[i].num, NULL, 0, NULL, NULL);
}
if (unlikely(data_len < 0))
@@ -616,7 +616,7 @@ qat_sym_dp_enqueue_single_auth_gen3(void *qp_data, uint8_t *drv_ctx,
rte_mov128((uint8_t *)req, (const uint8_t *)&(ctx->fw_req));
rte_prefetch0((uint8_t *)tx_queue->base_addr + tail);
data_len = qat_sym_build_req_set_data(req, user_data, cookie,
- data, n_data_vecs, NULL, 0);
+ data, n_data_vecs, NULL, 0, NULL, NULL);
if (unlikely(data_len < 0))
return -1;
@@ -679,7 +679,7 @@ qat_sym_dp_enqueue_auth_jobs_gen3(void *qp_data, uint8_t *drv_ctx,
data_len = qat_sym_build_req_set_data(req,
user_data[i], cookie,
vec->src_sgl[i].vec,
- vec->src_sgl[i].num, NULL, 0);
+ vec->src_sgl[i].num, NULL, 0, NULL, NULL);
}
if (unlikely(data_len < 0) || error)
diff --git a/drivers/crypto/qat/dev/qat_crypto_pmd_gen4.c b/drivers/crypto/qat/dev/qat_crypto_pmd_gen4.c
index 1ffc4528cf..54b3295647 100644
--- a/drivers/crypto/qat/dev/qat_crypto_pmd_gen4.c
+++ b/drivers/crypto/qat/dev/qat_crypto_pmd_gen4.c
@@ -207,7 +207,7 @@ qat_sym_build_op_aead_gen4(void *in_op, struct qat_sym_session *ctx,
}
total_len = qat_sym_build_req_set_data(qat_req, in_op, cookie,
- in_sgl.vec, in_sgl.num, out_sgl.vec, out_sgl.num);
+ in_sgl.vec, in_sgl.num, out_sgl.vec, out_sgl.num, &ofs, op);
if (unlikely(total_len < 0)) {
op->status = RTE_CRYPTO_OP_STATUS_INVALID_ARGS;
return -EINVAL;
@@ -366,7 +366,7 @@ qat_sym_dp_enqueue_single_aead_gen4(void *qp_data, uint8_t *drv_ctx,
rte_mov128((uint8_t *)req, (const uint8_t *)&(ctx->fw_req));
rte_prefetch0((uint8_t *)tx_queue->base_addr + tail);
data_len = qat_sym_build_req_set_data(req, user_data, cookie,
- data, n_data_vecs, NULL, 0);
+ data, n_data_vecs, NULL, 0, NULL, NULL);
if (unlikely(data_len < 0))
return -1;
@@ -426,7 +426,7 @@ qat_sym_dp_enqueue_aead_jobs_gen4(void *qp_data, uint8_t *drv_ctx,
data_len = qat_sym_build_req_set_data(req,
user_data[i], cookie,
vec->src_sgl[i].vec,
- vec->src_sgl[i].num, NULL, 0);
+ vec->src_sgl[i].num, NULL, 0, NULL, NULL);
}
if (unlikely(data_len < 0) || error)
diff --git a/drivers/crypto/qat/dev/qat_crypto_pmd_gens.h b/drivers/crypto/qat/dev/qat_crypto_pmd_gens.h
index 6f676a2c44..3201e1ead8 100644
--- a/drivers/crypto/qat/dev/qat_crypto_pmd_gens.h
+++ b/drivers/crypto/qat/dev/qat_crypto_pmd_gens.h
@@ -411,7 +411,8 @@ static __rte_always_inline int32_t
qat_sym_build_req_set_data(struct icp_qat_fw_la_bulk_req *req,
void *opaque, struct qat_sym_op_cookie *cookie,
struct rte_crypto_vec *src_vec, uint16_t n_src,
- struct rte_crypto_vec *dst_vec, uint16_t n_dst)
+ struct rte_crypto_vec *dst_vec, uint16_t n_dst,
+ union rte_crypto_sym_ofs *ofs, struct rte_crypto_op *op)
{
struct qat_sgl *list;
uint32_t i;
@@ -483,6 +484,24 @@ qat_sym_build_req_set_data(struct icp_qat_fw_la_bulk_req *req,
dst_data_start = src_data_start;
}
+ /* For crypto API only try to align the in-place buffers*/
+ if (op != NULL && likely(n_dst == 0)) {
+ uint16_t offset = src_data_start & RTE_CACHE_LINE_MASK;
+ if (offset) {
+ rte_iova_t buff_addr = rte_mbuf_iova_get(op->sym->m_src);
+ /* make sure src_data_start is still within the buffer */
+ if (src_data_start - offset >= buff_addr) {
+ src_data_start -= offset;
+ dst_data_start = src_data_start;
+ ofs->ofs.auth.head += offset;
+ ofs->ofs.cipher.head += offset;
+ tl_src += offset;
+ total_len_src = tl_src;
+ total_len_dst = tl_src;
+ }
+ }
+ }
+
req->comn_mid.src_data_addr = src_data_start;
req->comn_mid.dest_data_addr = dst_data_start;
req->comn_mid.src_length = total_len_src;
diff --git a/drivers/crypto/qat/dev/qat_sym_pmd_gen1.c b/drivers/crypto/qat/dev/qat_sym_pmd_gen1.c
index 1856770522..be50f5049f 100644
--- a/drivers/crypto/qat/dev/qat_sym_pmd_gen1.c
+++ b/drivers/crypto/qat/dev/qat_sym_pmd_gen1.c
@@ -236,7 +236,7 @@ qat_sym_build_op_cipher_gen1(void *in_op, struct qat_sym_session *ctx,
}
total_len = qat_sym_build_req_set_data(req, in_op, cookie,
- in_sgl.vec, in_sgl.num, out_sgl.vec, out_sgl.num);
+ in_sgl.vec, in_sgl.num, out_sgl.vec, out_sgl.num, &ofs, op);
if (unlikely(total_len < 0)) {
op->status = RTE_CRYPTO_OP_STATUS_INVALID_ARGS;
return -EINVAL;
@@ -281,7 +281,7 @@ qat_sym_build_op_auth_gen1(void *in_op, struct qat_sym_session *ctx,
}
total_len = qat_sym_build_req_set_data(req, in_op, cookie,
- in_sgl.vec, in_sgl.num, out_sgl.vec, out_sgl.num);
+ in_sgl.vec, in_sgl.num, out_sgl.vec, out_sgl.num, &ofs, op);
if (unlikely(total_len < 0)) {
op->status = RTE_CRYPTO_OP_STATUS_INVALID_ARGS;
return -EINVAL;
@@ -328,7 +328,7 @@ qat_sym_build_op_aead_gen1(void *in_op, struct qat_sym_session *ctx,
}
total_len = qat_sym_build_req_set_data(req, in_op, cookie,
- in_sgl.vec, in_sgl.num, out_sgl.vec, out_sgl.num);
+ in_sgl.vec, in_sgl.num, out_sgl.vec, out_sgl.num, &ofs, op);
if (unlikely(total_len < 0)) {
op->status = RTE_CRYPTO_OP_STATUS_INVALID_ARGS;
return -EINVAL;
@@ -375,7 +375,7 @@ qat_sym_build_op_chain_gen1(void *in_op, struct qat_sym_session *ctx,
}
total_len = qat_sym_build_req_set_data(req, in_op, cookie,
- in_sgl.vec, in_sgl.num, out_sgl.vec, out_sgl.num);
+ in_sgl.vec, in_sgl.num, out_sgl.vec, out_sgl.num, &ofs, op);
if (unlikely(total_len < 0)) {
op->status = RTE_CRYPTO_OP_STATUS_INVALID_ARGS;
return -EINVAL;
@@ -508,7 +508,7 @@ qat_sym_dp_enqueue_single_cipher_gen1(void *qp_data, uint8_t *drv_ctx,
rte_prefetch0((uint8_t *)tx_queue->base_addr + tail);
data_len = qat_sym_build_req_set_data(req, user_data, cookie,
- data, n_data_vecs, NULL, 0);
+ data, n_data_vecs, NULL, 0, NULL, NULL);
if (unlikely(data_len < 0))
return -1;
@@ -569,7 +569,7 @@ qat_sym_dp_enqueue_cipher_jobs_gen1(void *qp_data, uint8_t *drv_ctx,
data_len = qat_sym_build_req_set_data(req,
user_data[i], cookie,
vec->src_sgl[i].vec,
- vec->src_sgl[i].num, NULL, 0);
+ vec->src_sgl[i].num, NULL, 0, NULL, NULL);
}
if (unlikely(data_len < 0 || error))
@@ -622,7 +622,7 @@ qat_sym_dp_enqueue_single_auth_gen1(void *qp_data, uint8_t *drv_ctx,
rte_mov128((uint8_t *)req, (const uint8_t *)&(ctx->fw_req));
rte_prefetch0((uint8_t *)tx_queue->base_addr + tail);
data_len = qat_sym_build_req_set_data(req, user_data, cookie,
- data, n_data_vecs, NULL, 0);
+ data, n_data_vecs, NULL, 0, NULL, NULL);
if (unlikely(data_len < 0))
return -1;
@@ -690,7 +690,7 @@ qat_sym_dp_enqueue_auth_jobs_gen1(void *qp_data, uint8_t *drv_ctx,
data_len = qat_sym_build_req_set_data(req,
user_data[i], cookie,
vec->src_sgl[i].vec,
- vec->src_sgl[i].num, NULL, 0);
+ vec->src_sgl[i].num, NULL, 0, NULL, NULL);
}
if (unlikely(data_len < 0 || error))
@@ -749,7 +749,7 @@ qat_sym_dp_enqueue_single_chain_gen1(void *qp_data, uint8_t *drv_ctx,
rte_mov128((uint8_t *)req, (const uint8_t *)&(ctx->fw_req));
rte_prefetch0((uint8_t *)tx_queue->base_addr + tail);
data_len = qat_sym_build_req_set_data(req, user_data, cookie,
- data, n_data_vecs, NULL, 0);
+ data, n_data_vecs, NULL, 0, NULL, NULL);
if (unlikely(data_len < 0))
return -1;
@@ -818,7 +818,7 @@ qat_sym_dp_enqueue_chain_jobs_gen1(void *qp_data, uint8_t *drv_ctx,
data_len = qat_sym_build_req_set_data(req,
user_data[i], cookie,
vec->src_sgl[i].vec,
- vec->src_sgl[i].num, NULL, 0);
+ vec->src_sgl[i].num, NULL, 0, NULL, NULL);
}
if (unlikely(data_len < 0 || error))
@@ -882,7 +882,7 @@ qat_sym_dp_enqueue_single_aead_gen1(void *qp_data, uint8_t *drv_ctx,
rte_mov128((uint8_t *)req, (const uint8_t *)&(ctx->fw_req));
rte_prefetch0((uint8_t *)tx_queue->base_addr + tail);
data_len = qat_sym_build_req_set_data(req, user_data, cookie,
- data, n_data_vecs, NULL, 0);
+ data, n_data_vecs, NULL, 0, NULL, NULL);
if (unlikely(data_len < 0))
return -1;
@@ -942,7 +942,7 @@ qat_sym_dp_enqueue_aead_jobs_gen1(void *qp_data, uint8_t *drv_ctx,
data_len = qat_sym_build_req_set_data(req,
user_data[i], cookie,
vec->src_sgl[i].vec,
- vec->src_sgl[i].num, NULL, 0);
+ vec->src_sgl[i].num, NULL, 0, NULL, NULL);
}
if (unlikely(data_len < 0) || error)
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:37.440334027 +0000
+++ 0073-crypto-qat-fix-source-buffer-alignment.patch 2025-10-27 15:54:34.851950954 +0000
@@ -1 +1 @@
-From 253174309ff7abf9eaba58d1bccf90cca7e6d215 Mon Sep 17 00:00:00 2001
+From 4c7cbd6bf29276e8f874343f8c262756e90c4f02 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 253174309ff7abf9eaba58d1bccf90cca7e6d215 ]
+
@@ -10 +11,0 @@
-Cc: stable@dpdk.org
@@ -22 +23 @@
-index 0dcb5a7cb4..c196cf3cdb 100644
+index 989caabf17..4a114a8a79 100644
@@ -25 +26 @@
-@@ -422,7 +422,7 @@ qat_sym_build_op_aead_gen3(void *in_op, struct qat_sym_session *ctx,
+@@ -368,7 +368,7 @@ qat_sym_build_op_aead_gen3(void *in_op, struct qat_sym_session *ctx,
@@ -34 +35 @@
-@@ -466,7 +466,7 @@ qat_sym_build_op_auth_gen3(void *in_op, struct qat_sym_session *ctx,
+@@ -414,7 +414,7 @@ qat_sym_build_op_auth_gen3(void *in_op, struct qat_sym_session *ctx,
@@ -43 +44 @@
-@@ -564,7 +564,7 @@ qat_sym_dp_enqueue_single_aead_gen3(void *qp_data, uint8_t *drv_ctx,
+@@ -503,7 +503,7 @@ qat_sym_dp_enqueue_single_aead_gen3(void *qp_data, uint8_t *drv_ctx,
@@ -52 +53,7 @@
-@@ -623,7 +623,7 @@ qat_sym_dp_enqueue_aead_jobs_gen3(void *qp_data, uint8_t *drv_ctx,
+@@ -555,12 +555,12 @@ qat_sym_dp_enqueue_aead_jobs_gen3(void *qp_data, uint8_t *drv_ctx,
+ data_len = qat_sym_build_req_set_data(req,
+ user_data[i], cookie,
+ vec->src_sgl[i].vec, vec->src_sgl[i].num,
+- vec->dest_sgl[i].vec, vec->dest_sgl[i].num);
++ vec->dest_sgl[i].vec, vec->dest_sgl[i].num, NULL, NULL);
+ } else {
@@ -60,2 +67,2 @@
- if (unlikely(data_len < 0) || error)
-@@ -677,7 +677,7 @@ qat_sym_dp_enqueue_single_auth_gen3(void *qp_data, uint8_t *drv_ctx,
+ if (unlikely(data_len < 0))
+@@ -616,7 +616,7 @@ qat_sym_dp_enqueue_single_auth_gen3(void *qp_data, uint8_t *drv_ctx,
@@ -70,7 +77 @@
-@@ -732,12 +732,12 @@ qat_sym_dp_enqueue_auth_jobs_gen3(void *qp_data, uint8_t *drv_ctx,
- data_len = qat_sym_build_req_set_data(req,
- user_data[i], cookie,
- vec->src_sgl[i].vec, vec->src_sgl[i].num,
-- vec->dest_sgl[i].vec, vec->dest_sgl[i].num);
-+ vec->dest_sgl[i].vec, vec->dest_sgl[i].num, NULL, NULL);
- } else {
+@@ -679,7 +679,7 @@ qat_sym_dp_enqueue_auth_jobs_gen3(void *qp_data, uint8_t *drv_ctx,
@@ -84 +85 @@
- if (unlikely(data_len < 0))
+ if (unlikely(data_len < 0) || error)
@@ -86 +87 @@
-index 843580af72..82c5a40501 100644
+index 1ffc4528cf..54b3295647 100644
@@ -89 +90 @@
-@@ -289,7 +289,7 @@ qat_sym_build_op_aead_gen4(void *in_op, struct qat_sym_session *ctx,
+@@ -207,7 +207,7 @@ qat_sym_build_op_aead_gen4(void *in_op, struct qat_sym_session *ctx,
@@ -98 +99 @@
-@@ -446,7 +446,7 @@ qat_sym_dp_enqueue_single_aead_gen4(void *qp_data, uint8_t *drv_ctx,
+@@ -366,7 +366,7 @@ qat_sym_dp_enqueue_single_aead_gen4(void *qp_data, uint8_t *drv_ctx,
@@ -107 +108 @@
-@@ -505,7 +505,7 @@ qat_sym_dp_enqueue_aead_jobs_gen4(void *qp_data, uint8_t *drv_ctx,
+@@ -426,7 +426,7 @@ qat_sym_dp_enqueue_aead_jobs_gen4(void *qp_data, uint8_t *drv_ctx,
@@ -117 +118 @@
-index 1f19c69f88..67dc889b50 100644
+index 6f676a2c44..3201e1ead8 100644
@@ -120 +121 @@
-@@ -430,7 +430,8 @@ static __rte_always_inline int32_t
+@@ -411,7 +411,8 @@ static __rte_always_inline int32_t
@@ -130 +131 @@
-@@ -502,6 +503,24 @@ qat_sym_build_req_set_data(struct icp_qat_fw_la_bulk_req *req,
+@@ -483,6 +484,24 @@ qat_sym_build_req_set_data(struct icp_qat_fw_la_bulk_req *req,
@@ -156 +157 @@
-index 8cb85fd8df..6da0f6c645 100644
+index 1856770522..be50f5049f 100644
@@ -159 +160 @@
-@@ -242,7 +242,7 @@ qat_sym_build_op_cipher_gen1(void *in_op, struct qat_sym_session *ctx,
+@@ -236,7 +236,7 @@ qat_sym_build_op_cipher_gen1(void *in_op, struct qat_sym_session *ctx,
@@ -168,2 +169,2 @@
-@@ -294,7 +294,7 @@ qat_sym_build_op_auth_gen1(void *in_op, struct qat_sym_session *ctx,
- req->comn_hdr.serv_specif_flags, 0);
+@@ -281,7 +281,7 @@ qat_sym_build_op_auth_gen1(void *in_op, struct qat_sym_session *ctx,
+ }
@@ -177 +178 @@
-@@ -339,7 +339,7 @@ qat_sym_build_op_aead_gen1(void *in_op, struct qat_sym_session *ctx,
+@@ -328,7 +328,7 @@ qat_sym_build_op_aead_gen1(void *in_op, struct qat_sym_session *ctx,
@@ -186 +187 @@
-@@ -384,7 +384,7 @@ qat_sym_build_op_chain_gen1(void *in_op, struct qat_sym_session *ctx,
+@@ -375,7 +375,7 @@ qat_sym_build_op_chain_gen1(void *in_op, struct qat_sym_session *ctx,
@@ -195 +196 @@
-@@ -512,7 +512,7 @@ qat_sym_dp_enqueue_single_cipher_gen1(void *qp_data, uint8_t *drv_ctx,
+@@ -508,7 +508,7 @@ qat_sym_dp_enqueue_single_cipher_gen1(void *qp_data, uint8_t *drv_ctx,
@@ -204 +205 @@
-@@ -571,7 +571,7 @@ qat_sym_dp_enqueue_cipher_jobs_gen1(void *qp_data, uint8_t *drv_ctx,
+@@ -569,7 +569,7 @@ qat_sym_dp_enqueue_cipher_jobs_gen1(void *qp_data, uint8_t *drv_ctx,
@@ -213 +214 @@
-@@ -623,7 +623,7 @@ qat_sym_dp_enqueue_single_auth_gen1(void *qp_data, uint8_t *drv_ctx,
+@@ -622,7 +622,7 @@ qat_sym_dp_enqueue_single_auth_gen1(void *qp_data, uint8_t *drv_ctx,
@@ -231 +232 @@
-@@ -747,7 +747,7 @@ qat_sym_dp_enqueue_single_chain_gen1(void *qp_data, uint8_t *drv_ctx,
+@@ -749,7 +749,7 @@ qat_sym_dp_enqueue_single_chain_gen1(void *qp_data, uint8_t *drv_ctx,
@@ -240 +241 @@
-@@ -815,7 +815,7 @@ qat_sym_dp_enqueue_chain_jobs_gen1(void *qp_data, uint8_t *drv_ctx,
+@@ -818,7 +818,7 @@ qat_sym_dp_enqueue_chain_jobs_gen1(void *qp_data, uint8_t *drv_ctx,
@@ -249 +250 @@
-@@ -877,7 +877,7 @@ qat_sym_dp_enqueue_single_aead_gen1(void *qp_data, uint8_t *drv_ctx,
+@@ -882,7 +882,7 @@ qat_sym_dp_enqueue_single_aead_gen1(void *qp_data, uint8_t *drv_ctx,
@@ -258 +259 @@
-@@ -936,7 +936,7 @@ qat_sym_dp_enqueue_aead_jobs_gen1(void *qp_data, uint8_t *drv_ctx,
+@@ -942,7 +942,7 @@ qat_sym_dp_enqueue_aead_jobs_gen1(void *qp_data, uint8_t *drv_ctx,
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'crypto/cnxk: refactor RSA verification' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (71 preceding siblings ...)
2025-10-27 16:19 ` patch 'crypto/qat: fix source buffer alignment' " luca.boccassi
@ 2025-10-27 16:19 ` luca.boccassi
2025-10-27 16:19 ` patch 'test/crypto: fix mbuf handling' " luca.boccassi
` (4 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:19 UTC (permalink / raw)
To: Sucharitha Sarananaga; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/3b34eb20115e16dc18577a4d5d087bb519eb73b5
Thanks.
Luca Boccassi
---
From 3b34eb20115e16dc18577a4d5d087bb519eb73b5 Mon Sep 17 00:00:00 2001
From: Sucharitha Sarananaga <ssarananaga@marvell.com>
Date: Mon, 29 Sep 2025 15:13:49 +0530
Subject: [PATCH] crypto/cnxk: refactor RSA verification
[ upstream commit dfd038b97ec3d173ded0f985df39301b7c7662f2 ]
This patch avoid copying the decrypted message into
the signature buffer, which is actually an input to the
verify operation. This prevents overwriting the input
buffer unnecessarily.
Fixes: 6661bedf1605 ("crypto/cnxk: add asymmetric datapath")
Signed-off-by: Sucharitha Sarananaga <ssarananaga@marvell.com>
---
drivers/crypto/cnxk/cnxk_ae.h | 15 ++++++---------
1 file changed, 6 insertions(+), 9 deletions(-)
diff --git a/drivers/crypto/cnxk/cnxk_ae.h b/drivers/crypto/cnxk/cnxk_ae.h
index 156bd2e94f..231060b387 100644
--- a/drivers/crypto/cnxk/cnxk_ae.h
+++ b/drivers/crypto/cnxk/cnxk_ae.h
@@ -841,20 +841,17 @@ cnxk_ae_dequeue_rsa_op(struct rte_crypto_op *cop, uint8_t *rptr,
case RTE_CRYPTO_ASYM_OP_VERIFY:
if (rsa->padding.type == RTE_CRYPTO_RSA_PADDING_NONE) {
rsa->sign.length = rsa_ctx->n.length;
- memcpy(rsa->sign.data, rptr, rsa->sign.length);
+ if (memcmp(rptr, rsa->message.data, rsa->message.length))
+ cop->status = RTE_CRYPTO_OP_STATUS_ERROR;
} else {
/* Get length of signed output */
- rsa->sign.length =
- rte_cpu_to_be_16(*((uint16_t *)rptr));
+ rsa->sign.length = rte_cpu_to_be_16(*((uint16_t *)rptr));
/*
* Offset output data pointer by length field
- * (2 bytes) and copy signed data.
+ * (2 bytes) and compare signed data.
*/
- memcpy(rsa->sign.data, rptr + 2, rsa->sign.length);
- }
- if (memcmp(rsa->sign.data, rsa->message.data,
- rsa->message.length)) {
- cop->status = RTE_CRYPTO_OP_STATUS_ERROR;
+ if (memcmp(rptr + 2, rsa->message.data, rsa->message.length))
+ cop->status = RTE_CRYPTO_OP_STATUS_ERROR;
}
break;
default:
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:37.474262967 +0000
+++ 0074-crypto-cnxk-refactor-RSA-verification.patch 2025-10-27 15:54:34.851950954 +0000
@@ -1 +1 @@
-From dfd038b97ec3d173ded0f985df39301b7c7662f2 Mon Sep 17 00:00:00 2001
+From 3b34eb20115e16dc18577a4d5d087bb519eb73b5 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit dfd038b97ec3d173ded0f985df39301b7c7662f2 ]
+
@@ -12 +13,0 @@
-Cc: stable@dpdk.org
@@ -20 +21 @@
-index 8508ab8736..912a2a9496 100644
+index 156bd2e94f..231060b387 100644
@@ -23 +24 @@
-@@ -1592,20 +1592,17 @@ cnxk_ae_dequeue_rsa_op(struct rte_crypto_op *cop, uint8_t *rptr,
+@@ -841,20 +841,17 @@ cnxk_ae_dequeue_rsa_op(struct rte_crypto_op *cop, uint8_t *rptr,
@@ -25 +26 @@
- if (rsa_ctx->padding.type == RTE_CRYPTO_RSA_PADDING_NONE) {
+ if (rsa->padding.type == RTE_CRYPTO_RSA_PADDING_NONE) {
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'test/crypto: fix mbuf handling' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (72 preceding siblings ...)
2025-10-27 16:19 ` patch 'crypto/cnxk: refactor RSA verification' " luca.boccassi
@ 2025-10-27 16:19 ` luca.boccassi
2025-10-27 16:19 ` patch 'app/crypto-perf: fix plaintext size exceeds buffer size' " luca.boccassi
` (3 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:19 UTC (permalink / raw)
To: Nithinsen Kaithakadan; +Cc: Akhil Goyal, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/6a8fd6242932862c080c41232f5b296dc05a59f7
Thanks.
Luca Boccassi
---
From 6a8fd6242932862c080c41232f5b296dc05a59f7 Mon Sep 17 00:00:00 2001
From: Nithinsen Kaithakadan <nkaithakadan@marvell.com>
Date: Tue, 23 Sep 2025 14:22:54 +0000
Subject: [PATCH] test/crypto: fix mbuf handling
[ upstream commit 1ff54c055d95736aae05a40b361427215c318cc1 ]
This patch resolves the following mbuf sanity check errors.
- updating nb_segs and pkt_len in the head mbuf after
freeing intermediate nodes in the chain.
- fix incorrect usage of rte_pktmbuf_append by ensuring
the head mbuf is passed instead of an intermediate
node, allowing proper tail detection and metadata
update.
Fixes: dc3f6c5347b2 ("test/crypto: fix wireless auth digest segment")
Fixes: 43220096d66a ("test/crypto: add PDCP cases for scatter gather")
Fixes: dcdd01691f39 ("test/crypto: add GMAC SGL")
Fixes: f3dbf94be60c ("app/test: check SGL on QAT")
Signed-off-by: Nithinsen Kaithakadan <nkaithakadan@marvell.com>
Acked-by: Akhil Goyal <gakhil@marvell.com>
---
app/test/test_cryptodev.c | 59 ++++++++++++++++++++++++++-------------
1 file changed, 40 insertions(+), 19 deletions(-)
diff --git a/app/test/test_cryptodev.c b/app/test/test_cryptodev.c
index 8d58510e2d..6dc6dfb9c5 100644
--- a/app/test/test_cryptodev.c
+++ b/app/test/test_cryptodev.c
@@ -3000,6 +3000,8 @@ create_wireless_algo_auth_cipher_operation(
uint16_t remaining_off = (auth_offset >> 3) + (auth_len >> 3);
struct rte_mbuf *sgl_buf = (op_mode == IN_PLACE ?
sym_op->m_src : sym_op->m_dst);
+ struct rte_mbuf *sgl_buf_head = sgl_buf;
+
while (remaining_off >= rte_pktmbuf_data_len(sgl_buf)) {
remaining_off -= rte_pktmbuf_data_len(sgl_buf);
sgl_buf = sgl_buf->next;
@@ -3007,11 +3009,18 @@ create_wireless_algo_auth_cipher_operation(
/* The last segment should be large enough to hold full digest */
if (sgl_buf->data_len < auth_tag_len) {
- rte_pktmbuf_free(sgl_buf->next);
- sgl_buf->next = NULL;
- TEST_ASSERT_NOT_NULL(rte_pktmbuf_append(sgl_buf,
- auth_tag_len - sgl_buf->data_len),
- "No room to append auth tag");
+ uint16_t next_data_len = 0;
+ if (sgl_buf->next != NULL) {
+ next_data_len = sgl_buf->next->data_len;
+
+ rte_pktmbuf_free(sgl_buf->next);
+ sgl_buf->next = NULL;
+ sgl_buf_head->nb_segs -= 1;
+ sgl_buf_head->pkt_len -= next_data_len;
+ }
+ TEST_ASSERT_NOT_NULL(rte_pktmbuf_append(
+ sgl_buf_head, auth_tag_len - sgl_buf->data_len),
+ "No room to append auth tag");
}
sym_op->auth.digest.data = rte_pktmbuf_mtod_offset(sgl_buf,
@@ -8871,11 +8880,13 @@ test_pdcp_proto_SGL(int i, int oop,
buf_oop = buf_oop->next;
memset(rte_pktmbuf_mtod(buf_oop, uint8_t *),
0, rte_pktmbuf_tailroom(buf_oop));
- rte_pktmbuf_append(buf_oop, to_trn);
+ TEST_ASSERT_NOT_NULL(ut_params->obuf, "Output buffer not initialized");
+ TEST_ASSERT_NOT_NULL(rte_pktmbuf_append(ut_params->obuf, to_trn), "Failed to append to mbuf");
}
- plaintext = (uint8_t *)rte_pktmbuf_append(buf,
+ plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
to_trn);
+ TEST_ASSERT_NOT_NULL(plaintext, "Failed to append plaintext");
memcpy(plaintext, input_vec + trn_data, to_trn);
trn_data += to_trn;
@@ -8904,7 +8915,7 @@ test_pdcp_proto_SGL(int i, int oop,
buf_oop = buf_oop->next;
memset(rte_pktmbuf_mtod(buf_oop, uint8_t *),
0, rte_pktmbuf_tailroom(buf_oop));
- rte_pktmbuf_append(buf_oop, to_trn);
+ TEST_ASSERT_NOT_NULL(rte_pktmbuf_append(ut_params->obuf, to_trn), "Failed to append to mbuf");
trn_data += to_trn;
}
@@ -13426,15 +13437,18 @@ test_AES_GMAC_authentication_SGL(const struct gmac_test_data *tdata,
memset(rte_pktmbuf_mtod(buf, uint8_t *), 0,
rte_pktmbuf_tailroom(buf));
- plaintext = (uint8_t *)rte_pktmbuf_append(buf,
+ plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
to_trn);
+ TEST_ASSERT_NOT_NULL(plaintext, "Failed to append plaintext");
memcpy(plaintext, tdata->plaintext.data + trn_data,
to_trn);
trn_data += to_trn;
- if (trn_data == tdata->plaintext.len)
- digest_mem = (uint8_t *)rte_pktmbuf_append(buf,
+ if (trn_data == tdata->plaintext.len) {
+ digest_mem = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
tdata->gmac_tag.len);
+ TEST_ASSERT_NOT_NULL(digest_mem, "Failed to append digest data");
+ }
}
ut_params->ibuf->nb_segs = segs;
@@ -14717,23 +14731,28 @@ test_authenticated_encryption_SGL(const struct aead_test_data *tdata,
buf_oop = buf_oop->next;
memset(rte_pktmbuf_mtod(buf_oop, uint8_t *),
0, rte_pktmbuf_tailroom(buf_oop));
- rte_pktmbuf_append(buf_oop, to_trn);
+ TEST_ASSERT_NOT_NULL(rte_pktmbuf_append(ut_params->obuf, to_trn), "Failed to append to mbuf");
}
- plaintext = (uint8_t *)rte_pktmbuf_append(buf,
+ plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
to_trn);
+ TEST_ASSERT_NOT_NULL(plaintext, "Failed to append plaintext");
memcpy(plaintext, tdata->plaintext.data + trn_data,
to_trn);
trn_data += to_trn;
if (trn_data == tdata->plaintext.len) {
if (oop) {
- if (!fragsz_oop)
- digest_mem = rte_pktmbuf_append(buf_oop,
+ if (!fragsz_oop) {
+ digest_mem = rte_pktmbuf_append(ut_params->obuf,
tdata->auth_tag.len);
- } else
- digest_mem = (uint8_t *)rte_pktmbuf_append(buf,
+ TEST_ASSERT_NOT_NULL(digest_mem, "Failed to append auth tag");
+ }
+ } else {
+ digest_mem = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
tdata->auth_tag.len);
+ TEST_ASSERT_NOT_NULL(digest_mem, "Failed to append auth tag");
+ }
}
}
@@ -14768,16 +14787,18 @@ test_authenticated_encryption_SGL(const struct aead_test_data *tdata,
buf_last_oop = buf_oop->next =
rte_pktmbuf_alloc(ts_params->mbuf_pool);
+ TEST_ASSERT_NOT_NULL(buf_oop->next, "Unexpected end of chain");
buf_oop = buf_oop->next;
memset(rte_pktmbuf_mtod(buf_oop, uint8_t *),
0, rte_pktmbuf_tailroom(buf_oop));
- rte_pktmbuf_append(buf_oop, to_trn);
+ TEST_ASSERT_NOT_NULL(rte_pktmbuf_append(ut_params->obuf, to_trn), "Failed to append to mbuf");
trn_data += to_trn;
if (trn_data == tdata->plaintext.len) {
- digest_mem = rte_pktmbuf_append(buf_oop,
+ digest_mem = rte_pktmbuf_append(ut_params->obuf,
tdata->auth_tag.len);
+ TEST_ASSERT_NOT_NULL(digest_mem, "Failed to append auth tag");
}
}
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:37.508616334 +0000
+++ 0075-test-crypto-fix-mbuf-handling.patch 2025-10-27 15:54:34.859951155 +0000
@@ -1 +1 @@
-From 1ff54c055d95736aae05a40b361427215c318cc1 Mon Sep 17 00:00:00 2001
+From 6a8fd6242932862c080c41232f5b296dc05a59f7 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 1ff54c055d95736aae05a40b361427215c318cc1 ]
+
@@ -18 +19,0 @@
-Cc: stable@dpdk.org
@@ -27 +28 @@
-index 5229ac2bf6..f092f608a9 100644
+index 8d58510e2d..6dc6dfb9c5 100644
@@ -30 +31 @@
-@@ -3488,6 +3488,8 @@ create_wireless_algo_auth_cipher_operation(
+@@ -3000,6 +3000,8 @@ create_wireless_algo_auth_cipher_operation(
@@ -39 +40 @@
-@@ -3495,11 +3497,18 @@ create_wireless_algo_auth_cipher_operation(
+@@ -3007,11 +3009,18 @@ create_wireless_algo_auth_cipher_operation(
@@ -63 +64 @@
-@@ -9795,11 +9804,13 @@ test_pdcp_proto_SGL(int i, int oop,
+@@ -8871,11 +8880,13 @@ test_pdcp_proto_SGL(int i, int oop,
@@ -79 +80 @@
-@@ -9828,7 +9839,7 @@ test_pdcp_proto_SGL(int i, int oop,
+@@ -8904,7 +8915,7 @@ test_pdcp_proto_SGL(int i, int oop,
@@ -88 +89 @@
-@@ -15916,15 +15927,18 @@ test_AES_GMAC_authentication_SGL(const struct gmac_test_data *tdata,
+@@ -13426,15 +13437,18 @@ test_AES_GMAC_authentication_SGL(const struct gmac_test_data *tdata,
@@ -110 +111 @@
-@@ -17223,23 +17237,28 @@ test_authenticated_encryption_SGL(const struct aead_test_data *tdata,
+@@ -14717,23 +14731,28 @@ test_authenticated_encryption_SGL(const struct aead_test_data *tdata,
@@ -145 +146 @@
-@@ -17274,16 +17293,18 @@ test_authenticated_encryption_SGL(const struct aead_test_data *tdata,
+@@ -14768,16 +14787,18 @@ test_authenticated_encryption_SGL(const struct aead_test_data *tdata,
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'app/crypto-perf: fix plaintext size exceeds buffer size' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (73 preceding siblings ...)
2025-10-27 16:19 ` patch 'test/crypto: fix mbuf handling' " luca.boccassi
@ 2025-10-27 16:19 ` luca.boccassi
2025-10-27 16:19 ` patch 'test/crypto: fix vector initialization' " luca.boccassi
` (2 subsequent siblings)
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:19 UTC (permalink / raw)
To: Shani Peretz; +Cc: Kai Ji, Akhil Goyal, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/49d89d2e003ef9b463d5e10a8a8aaab20a141285
Thanks.
Luca Boccassi
---
From 49d89d2e003ef9b463d5e10a8a8aaab20a141285 Mon Sep 17 00:00:00 2001
From: Shani Peretz <shperetz@nvidia.com>
Date: Mon, 25 Aug 2025 10:14:50 +0300
Subject: [PATCH] app/crypto-perf: fix plaintext size exceeds buffer size
[ upstream commit b2988038656b03d1c019114fbe7609018cc16e87 ]
When test vector plaintext exceeds buffer size, only the first
max_buffer_size bytes are processed, causing incorrect digest
verification (computed vs expected mismatch).
This patch fixes this issue by checking that the plaintext size is
larger than the buffer size and returns an error with a log.
Fixes: f8be1786b1b8 ("app/crypto-perf: introduce performance test application")
Signed-off-by: Shani Peretz <shperetz@nvidia.com>
Acked-by: Kai Ji <kai.ji@intel.com>
Acked-by: Akhil Goyal <gakhil@marvell.com>
---
.../cperf_test_vector_parsing.c | 47 +++++++++++--------
1 file changed, 27 insertions(+), 20 deletions(-)
diff --git a/app/test-crypto-perf/cperf_test_vector_parsing.c b/app/test-crypto-perf/cperf_test_vector_parsing.c
index 737d61d4af..5665fb425b 100644
--- a/app/test-crypto-perf/cperf_test_vector_parsing.c
+++ b/app/test-crypto-perf/cperf_test_vector_parsing.c
@@ -308,12 +308,19 @@ parse_entry(char *entry, struct cperf_test_vector *vector,
if (strstr(key_token, "plaintext")) {
rte_free(vector->plaintext.data);
vector->plaintext.data = data;
+
+ if (opts->test == CPERF_TEST_TYPE_VERIFY && data_length > opts->max_buffer_size) {
+ printf("Global plaintext (%u) larger than buffer_sz (%u)\n",
+ data_length, opts->max_buffer_size);
+ return -1;
+ }
+
if (tc_found)
vector->plaintext.length = data_length;
else {
if (opts->max_buffer_size > data_length) {
- printf("Global plaintext shorter than "
- "buffer_sz\n");
+ printf("Global plaintext (%u) shorter than "
+ "buffer_sz (%u)\n", data_length, opts->max_buffer_size);
return -1;
}
vector->plaintext.length = opts->max_buffer_size;
@@ -326,8 +333,8 @@ parse_entry(char *entry, struct cperf_test_vector *vector,
vector->cipher_key.length = data_length;
else {
if (opts->cipher_key_sz > data_length) {
- printf("Global cipher_key shorter than "
- "cipher_key_sz\n");
+ printf("Global cipher_key (%u) shorter than "
+ "cipher_key_sz (%u)\n", data_length, opts->cipher_key_sz);
return -1;
}
vector->cipher_key.length = opts->cipher_key_sz;
@@ -340,8 +347,8 @@ parse_entry(char *entry, struct cperf_test_vector *vector,
vector->auth_key.length = data_length;
else {
if (opts->auth_key_sz > data_length) {
- printf("Global auth_key shorter than "
- "auth_key_sz\n");
+ printf("Global auth_key (%u) shorter than "
+ "auth_key_sz (%u)\n", data_length, opts->auth_key_sz);
return -1;
}
vector->auth_key.length = opts->auth_key_sz;
@@ -354,8 +361,8 @@ parse_entry(char *entry, struct cperf_test_vector *vector,
vector->aead_key.length = data_length;
else {
if (opts->aead_key_sz > data_length) {
- printf("Global aead_key shorter than "
- "aead_key_sz\n");
+ printf("Global aead_key (%u) shorter than "
+ "aead_key_sz (%u)\n", data_length, opts->aead_key_sz);
return -1;
}
vector->aead_key.length = opts->aead_key_sz;
@@ -368,8 +375,8 @@ parse_entry(char *entry, struct cperf_test_vector *vector,
vector->cipher_iv.length = data_length;
else {
if (opts->cipher_iv_sz > data_length) {
- printf("Global cipher iv shorter than "
- "cipher_iv_sz\n");
+ printf("Global cipher iv (%u) shorter than "
+ "cipher_iv_sz (%u)\n", data_length, opts->cipher_iv_sz);
return -1;
}
vector->cipher_iv.length = opts->cipher_iv_sz;
@@ -382,8 +389,8 @@ parse_entry(char *entry, struct cperf_test_vector *vector,
vector->auth_iv.length = data_length;
else {
if (opts->auth_iv_sz > data_length) {
- printf("Global auth iv shorter than "
- "auth_iv_sz\n");
+ printf("Global auth iv (%u) shorter than "
+ "auth_iv_sz (%u)\n", data_length, opts->auth_iv_sz);
return -1;
}
vector->auth_iv.length = opts->auth_iv_sz;
@@ -396,8 +403,8 @@ parse_entry(char *entry, struct cperf_test_vector *vector,
vector->aead_iv.length = data_length;
else {
if (opts->aead_iv_sz > data_length) {
- printf("Global aead iv shorter than "
- "aead_iv_sz\n");
+ printf("Global aead iv (%u) shorter than "
+ "aead_iv_sz (%u)\n", data_length, opts->aead_iv_sz);
return -1;
}
vector->aead_iv.length = opts->aead_iv_sz;
@@ -410,8 +417,8 @@ parse_entry(char *entry, struct cperf_test_vector *vector,
vector->ciphertext.length = data_length;
else {
if (opts->max_buffer_size > data_length) {
- printf("Global ciphertext shorter than "
- "buffer_sz\n");
+ printf("Global ciphertext (%u) shorter than "
+ "buffer_sz (%u)\n", data_length, opts->max_buffer_size);
return -1;
}
vector->ciphertext.length = opts->max_buffer_size;
@@ -425,8 +432,8 @@ parse_entry(char *entry, struct cperf_test_vector *vector,
vector->aad.length = data_length;
else {
if (opts->aead_aad_sz > data_length) {
- printf("Global aad shorter than "
- "aead_aad_sz\n");
+ printf("Global aad (%u) shorter than "
+ "aead_aad_sz (%u)\n", data_length, opts->aead_aad_sz);
return -1;
}
vector->aad.length = opts->aead_aad_sz;
@@ -441,8 +448,8 @@ parse_entry(char *entry, struct cperf_test_vector *vector,
vector->digest.length = data_length;
else {
if (opts->digest_sz > data_length) {
- printf("Global digest shorter than "
- "digest_sz\n");
+ printf("Global digest (%u) shorter than "
+ "digest_sz (%u)\n", data_length, opts->digest_sz);
return -1;
}
vector->digest.length = opts->digest_sz;
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:37.551745641 +0000
+++ 0076-app-crypto-perf-fix-plaintext-size-exceeds-buffer-si.patch 2025-10-27 15:54:34.859951155 +0000
@@ -1 +1 @@
-From b2988038656b03d1c019114fbe7609018cc16e87 Mon Sep 17 00:00:00 2001
+From 49d89d2e003ef9b463d5e10a8a8aaab20a141285 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit b2988038656b03d1c019114fbe7609018cc16e87 ]
+
@@ -14 +15,0 @@
-Cc: stable@dpdk.org
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'test/crypto: fix vector initialization' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (74 preceding siblings ...)
2025-10-27 16:19 ` patch 'app/crypto-perf: fix plaintext size exceeds buffer size' " luca.boccassi
@ 2025-10-27 16:19 ` luca.boccassi
2025-10-27 16:19 ` patch 'crypto/virtio: fix cookies leak' " luca.boccassi
2025-10-27 16:19 ` patch 'sched: fix WRR parameter data type' " luca.boccassi
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:19 UTC (permalink / raw)
To: Radu Nicolau; +Cc: Kai Ji, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/c84b443d8e726bcc059d5637084a537676561a07
Thanks.
Luca Boccassi
---
From c84b443d8e726bcc059d5637084a537676561a07 Mon Sep 17 00:00:00 2001
From: Radu Nicolau <radu.nicolau@intel.com>
Date: Thu, 11 Sep 2025 13:14:38 +0000
Subject: [PATCH] test/crypto: fix vector initialization
[ upstream commit 78ed9449a63ecc00b059ddc24dd04df8a119f5de ]
For CPU crypto code path make sure all fields in the
rte_crypto_sym_vec struct are initialised.
Fixes: 2a9f232ce60e ("test/crypto: add CPU crypto mode cases")
Signed-off-by: Radu Nicolau <radu.nicolau@intel.com>
Acked-by: Kai Ji <kai.ji@intel.com>
---
app/test/test_cryptodev.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/app/test/test_cryptodev.c b/app/test/test_cryptodev.c
index 6dc6dfb9c5..f8de6e8650 100644
--- a/app/test/test_cryptodev.c
+++ b/app/test/test_cryptodev.c
@@ -207,7 +207,7 @@ process_sym_raw_dp_op(uint8_t dev_id, uint16_t qp_id,
struct rte_crypto_vec data_vec[UINT8_MAX], dest_data_vec[UINT8_MAX];
struct rte_crypto_va_iova_ptr cipher_iv, digest, aad_auth_iv;
union rte_crypto_sym_ofs ofs;
- struct rte_crypto_sym_vec vec;
+ struct rte_crypto_sym_vec vec = {0};
struct rte_crypto_sgl sgl, dest_sgl;
uint32_t max_len;
union rte_cryptodev_session_ctx sess;
@@ -444,7 +444,7 @@ process_cpu_aead_op(uint8_t dev_id, struct rte_crypto_op *op)
struct rte_crypto_sym_op *sop;
union rte_crypto_sym_ofs ofs;
struct rte_crypto_sgl sgl;
- struct rte_crypto_sym_vec symvec;
+ struct rte_crypto_sym_vec symvec = {0};
struct rte_crypto_va_iova_ptr iv_ptr, aad_ptr, digest_ptr;
struct rte_crypto_vec vec[UINT8_MAX];
@@ -490,7 +490,7 @@ process_cpu_crypt_auth_op(uint8_t dev_id, struct rte_crypto_op *op)
struct rte_crypto_sym_op *sop;
union rte_crypto_sym_ofs ofs;
struct rte_crypto_sgl sgl;
- struct rte_crypto_sym_vec symvec;
+ struct rte_crypto_sym_vec symvec = {0};
struct rte_crypto_va_iova_ptr iv_ptr, digest_ptr;
struct rte_crypto_vec vec[UINT8_MAX];
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:37.581989963 +0000
+++ 0077-test-crypto-fix-vector-initialization.patch 2025-10-27 15:54:34.867951355 +0000
@@ -1 +1 @@
-From 78ed9449a63ecc00b059ddc24dd04df8a119f5de Mon Sep 17 00:00:00 2001
+From c84b443d8e726bcc059d5637084a537676561a07 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 78ed9449a63ecc00b059ddc24dd04df8a119f5de ]
+
@@ -10 +11,0 @@
-Cc: stable@dpdk.org
@@ -19 +20 @@
-index 50de525897..6e5f308e55 100644
+index 6dc6dfb9c5..f8de6e8650 100644
@@ -22 +23 @@
-@@ -289,7 +289,7 @@ process_sym_raw_dp_op(uint8_t dev_id, uint16_t qp_id,
+@@ -207,7 +207,7 @@ process_sym_raw_dp_op(uint8_t dev_id, uint16_t qp_id,
@@ -31 +32 @@
-@@ -526,7 +526,7 @@ process_cpu_aead_op(uint8_t dev_id, struct rte_crypto_op *op)
+@@ -444,7 +444,7 @@ process_cpu_aead_op(uint8_t dev_id, struct rte_crypto_op *op)
@@ -40 +41 @@
-@@ -572,7 +572,7 @@ process_cpu_crypt_auth_op(uint8_t dev_id, struct rte_crypto_op *op)
+@@ -490,7 +490,7 @@ process_cpu_crypt_auth_op(uint8_t dev_id, struct rte_crypto_op *op)
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'crypto/virtio: fix cookies leak' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (75 preceding siblings ...)
2025-10-27 16:19 ` patch 'test/crypto: fix vector initialization' " luca.boccassi
@ 2025-10-27 16:19 ` luca.boccassi
2025-10-27 16:19 ` patch 'sched: fix WRR parameter data type' " luca.boccassi
77 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:19 UTC (permalink / raw)
To: Gowrishankar Muthukrishnan; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/385b79cfbcc6fdce77b65d51ea6eeff9ec2d6a94
Thanks.
Luca Boccassi
---
From 385b79cfbcc6fdce77b65d51ea6eeff9ec2d6a94 Mon Sep 17 00:00:00 2001
From: Gowrishankar Muthukrishnan <gmuthukrishn@marvell.com>
Date: Sat, 11 Oct 2025 10:07:03 +0530
Subject: [PATCH] crypto/virtio: fix cookies leak
[ upstream commit 8b0d855fd98c6c88665489fdba12f8e603deae21 ]
Free memory used by virt queue op cookies in dev close.
Fixes: 6f0175ff53e0 ("crypto/virtio: support basic PMD ops")
Signed-off-by: Gowrishankar Muthukrishnan <gmuthukrishn@marvell.com>
---
drivers/crypto/virtio/virtio_cryptodev.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/crypto/virtio/virtio_cryptodev.c b/drivers/crypto/virtio/virtio_cryptodev.c
index 6020e70a5a..c160f53315 100644
--- a/drivers/crypto/virtio/virtio_cryptodev.c
+++ b/drivers/crypto/virtio/virtio_cryptodev.c
@@ -266,6 +266,7 @@ void
virtio_crypto_queue_release(struct virtqueue *vq)
{
struct virtio_crypto_hw *hw;
+ uint16_t i;
PMD_INIT_FUNC_TRACE();
@@ -276,6 +277,9 @@ virtio_crypto_queue_release(struct virtqueue *vq)
rte_memzone_free(vq->mz);
rte_mempool_free(vq->mpool);
+ for (i = 0; i < vq->vq_nentries; i++)
+ rte_free(vq->vq_descx[i].cookie);
+
rte_free(vq);
}
}
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:37.623037416 +0000
+++ 0078-crypto-virtio-fix-cookies-leak.patch 2025-10-27 15:54:34.867951355 +0000
@@ -1 +1 @@
-From 8b0d855fd98c6c88665489fdba12f8e603deae21 Mon Sep 17 00:00:00 2001
+From 385b79cfbcc6fdce77b65d51ea6eeff9ec2d6a94 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 8b0d855fd98c6c88665489fdba12f8e603deae21 ]
+
@@ -9 +10,0 @@
-Cc: stable@dpdk.org
@@ -17 +18 @@
-index d661ce8025..6f079f15f6 100644
+index 6020e70a5a..c160f53315 100644
@@ -20 +21 @@
-@@ -68,6 +68,7 @@ void
+@@ -266,6 +266,7 @@ void
@@ -28,2 +29,2 @@
-@@ -79,6 +80,9 @@ virtio_crypto_queue_release(struct virtqueue *vq)
- hw->vqs[vq->vq_queue_index] = NULL;
+@@ -276,6 +277,9 @@ virtio_crypto_queue_release(struct virtqueue *vq)
+
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'sched: fix WRR parameter data type' has been queued to stable release 22.11.11
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' has been queued to stable release 22.11.11 luca.boccassi
` (76 preceding siblings ...)
2025-10-27 16:19 ` patch 'crypto/virtio: fix cookies leak' " luca.boccassi
@ 2025-10-27 16:19 ` luca.boccassi
2025-11-12 16:52 ` patch 'test/hash: check memory allocation' " luca.boccassi
77 siblings, 1 reply; 130+ messages in thread
From: luca.boccassi @ 2025-10-27 16:19 UTC (permalink / raw)
To: Megha Ajmera; +Cc: Jasvinder Singh, Stephen Hemminger, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/3865b265093d1d0c8099afa40715963714275969
Thanks.
Luca Boccassi
---
From 3865b265093d1d0c8099afa40715963714275969 Mon Sep 17 00:00:00 2001
From: Megha Ajmera <megha.ajmera@intel.com>
Date: Thu, 18 Sep 2025 08:16:09 +0530
Subject: [PATCH] sched: fix WRR parameter data type
[ upstream commit 8dc7bf943fb6fad7b30b3a494f2216c2c4cf64d7 ]
wrr tokens getting truncated to uint8_t in wrr_store function() due to
type mismatch. This patch changes the data type to uint16_t.
Fixes: e16b06da0908 ("sched: remove WRR from strict priority TC queues")
Signed-off-by: Megha Ajmera <megha.ajmera@intel.com>
Acked-by: Jasvinder Singh <jasvinder.singh@intel.com>
Acked-by: Stephen Hemminger <stephen@networkplumber.org>
---
lib/sched/rte_sched.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/sched/rte_sched.c b/lib/sched/rte_sched.c
index 19768d8c38..649c51f7d2 100644
--- a/lib/sched/rte_sched.c
+++ b/lib/sched/rte_sched.c
@@ -67,7 +67,7 @@ struct rte_sched_pipe {
uint64_t tc_credits[RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE];
/* Weighted Round Robin (WRR) */
- uint8_t wrr_tokens[RTE_SCHED_BE_QUEUES_PER_PIPE];
+ uint16_t wrr_tokens[RTE_SCHED_BE_QUEUES_PER_PIPE];
/* TC oversubscription */
uint64_t tc_ov_credits;
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:37.654189511 +0000
+++ 0079-sched-fix-WRR-parameter-data-type.patch 2025-10-27 15:54:34.867951355 +0000
@@ -1 +1 @@
-From 8dc7bf943fb6fad7b30b3a494f2216c2c4cf64d7 Mon Sep 17 00:00:00 2001
+From 3865b265093d1d0c8099afa40715963714275969 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 8dc7bf943fb6fad7b30b3a494f2216c2c4cf64d7 ]
+
@@ -10 +11,0 @@
-Cc: stable@dpdk.org
@@ -20 +21 @@
-index 453f935ac8..daa31e8b99 100644
+index 19768d8c38..649c51f7d2 100644
@@ -23 +24 @@
-@@ -67,7 +67,7 @@ struct __rte_cache_aligned rte_sched_pipe {
+@@ -67,7 +67,7 @@ struct rte_sched_pipe {
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'test/hash: check memory allocation' has been queued to stable release 22.11.11
2025-10-27 16:19 ` patch 'sched: fix WRR parameter data type' " luca.boccassi
@ 2025-11-12 16:52 ` luca.boccassi
2025-11-12 16:52 ` patch 'dmadev: fix debug build with tracepoints' " luca.boccassi
` (47 more replies)
0 siblings, 48 replies; 130+ messages in thread
From: luca.boccassi @ 2025-11-12 16:52 UTC (permalink / raw)
To: Thomas Monjalon; +Cc: David Marchand, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
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/14/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/382d9f327ed1d097b89e78b5b5e0cfa578fbbca9
Thanks.
Luca Boccassi
---
From 382d9f327ed1d097b89e78b5b5e0cfa578fbbca9 Mon Sep 17 00:00:00 2001
From: Thomas Monjalon <thomas@monjalon.net>
Date: Thu, 30 Oct 2025 17:03:20 +0100
Subject: [PATCH] test/hash: check memory allocation
[ upstream commit 77e23b2d7ee45d153f588611a3fa479e4cf0c9b6 ]
When reserving a specific memory amount, it was possible to pass
the first allocations and fail on a later allocation
where there was no check, resulting in a crash.
It is fixed by stopping the test if allocation failed.
Fixes: fd368e1982bc ("test/hash: test more corner cases")
Fixes: 9c7d8eed1a45 ("test/hash: add RCU tests")
Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
Reviewed-by: David Marchand <david.marchand@redhat.com>
---
app/test/test_hash_readwrite.c | 5 +++++
app/test/test_hash_readwrite_lf_perf.c | 4 ++++
2 files changed, 9 insertions(+)
diff --git a/app/test/test_hash_readwrite.c b/app/test/test_hash_readwrite.c
index 9cc5f3487c..f85d291569 100644
--- a/app/test/test_hash_readwrite.c
+++ b/app/test/test_hash_readwrite.c
@@ -64,6 +64,11 @@ test_hash_readwrite_worker(__rte_unused void *arg)
ret = rte_malloc(NULL, sizeof(int) *
tbl_rw_test_param.num_insert, 0);
+ if (ret == NULL) {
+ printf("allocation failed\n");
+ return -1;
+ }
+
for (i = 0; i < rte_lcore_count(); i++) {
if (worker_core_ids[i] == lcore_id)
break;
diff --git a/app/test/test_hash_readwrite_lf_perf.c b/app/test/test_hash_readwrite_lf_perf.c
index cf86046a2f..b06322ce35 100644
--- a/app/test/test_hash_readwrite_lf_perf.c
+++ b/app/test/test_hash_readwrite_lf_perf.c
@@ -1310,6 +1310,10 @@ test_hash_rcu_qsbr_writer_perf(struct rwc_perf *rwc_perf_results, int rwc_lf,
sz = rte_rcu_qsbr_get_memsize(RTE_MAX_LCORE);
rv = (struct rte_rcu_qsbr *)rte_zmalloc(NULL, sz, RTE_CACHE_LINE_SIZE);
+ if (rv == NULL) {
+ printf("allocation failed\n");
+ goto err;
+ }
rcu_config.v = rv;
if (rte_hash_rcu_qsbr_add(tbl_rwc_test_param.h, &rcu_config) < 0) {
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-11-12 16:20:41.054036146 +0000
+++ 0001-test-hash-check-memory-allocation.patch 2025-11-12 16:20:40.875715664 +0000
@@ -1 +1 @@
-From 77e23b2d7ee45d153f588611a3fa479e4cf0c9b6 Mon Sep 17 00:00:00 2001
+From 382d9f327ed1d097b89e78b5b5e0cfa578fbbca9 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 77e23b2d7ee45d153f588611a3fa479e4cf0c9b6 ]
+
@@ -13 +14,0 @@
-Cc: stable@dpdk.org
@@ -23 +24 @@
-index 82fe03cc5a..22ccd6df6a 100644
+index 9cc5f3487c..f85d291569 100644
@@ -26 +27 @@
-@@ -70,6 +70,11 @@ test_hash_readwrite_worker(__rte_unused void *arg)
+@@ -64,6 +64,11 @@ test_hash_readwrite_worker(__rte_unused void *arg)
@@ -39 +40 @@
-index 864c3059d9..bef987d29d 100644
+index cf86046a2f..b06322ce35 100644
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'dmadev: fix debug build with tracepoints' has been queued to stable release 22.11.11
2025-11-12 16:52 ` patch 'test/hash: check memory allocation' " luca.boccassi
@ 2025-11-12 16:52 ` luca.boccassi
2025-11-12 16:52 ` patch 'buildtools/pmdinfogen: fix warning with python 3.14' " luca.boccassi
` (46 subsequent siblings)
47 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-11-12 16:52 UTC (permalink / raw)
To: Stephen Hemminger; +Cc: Chengwen Feng, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
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/14/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/d3deb6c4cf75791b4eb6fed07b3136456027af56
Thanks.
Luca Boccassi
---
From d3deb6c4cf75791b4eb6fed07b3136456027af56 Mon Sep 17 00:00:00 2001
From: Stephen Hemminger <stephen@networkplumber.org>
Date: Mon, 27 Oct 2025 09:46:20 -0700
Subject: [PATCH] dmadev: fix debug build with tracepoints
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
[ upstream commit 1624f34dde105a47e1d22f419a90fd65997c908f ]
Missing definition of errnos causes build failure:
In file included from ../lib/dmadev/rte_dmadev_trace.h:16,
from ../lib/dmadev/rte_dmadev_trace_points.c:8:
../lib/dmadev/rte_dmadev.h: In function ‘rte_dma_copy’:
../lib/dmadev/rte_dmadev.h:1183:25: error: ‘EINVAL’ undeclared
(first use in this function)
1183 | return -EINVAL;
| ^~~~~~
Bugzilla ID: 1814
Fixes: 91e581e5c924 ("dmadev: add data plane API")
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Chengwen Feng <fengchengwen@huawei.com>
---
lib/dmadev/rte_dmadev.h | 1 +
1 file changed, 1 insertion(+)
diff --git a/lib/dmadev/rte_dmadev.h b/lib/dmadev/rte_dmadev.h
index e61d71959e..23605606ff 100644
--- a/lib/dmadev/rte_dmadev.h
+++ b/lib/dmadev/rte_dmadev.h
@@ -145,6 +145,7 @@
*/
#include <stdint.h>
+#include <errno.h>
#include <rte_bitops.h>
#include <rte_common.h>
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-11-12 16:20:41.085749444 +0000
+++ 0002-dmadev-fix-debug-build-with-tracepoints.patch 2025-11-12 16:20:40.875715664 +0000
@@ -1 +1 @@
-From 1624f34dde105a47e1d22f419a90fd65997c908f Mon Sep 17 00:00:00 2001
+From d3deb6c4cf75791b4eb6fed07b3136456027af56 Mon Sep 17 00:00:00 2001
@@ -8,0 +9,2 @@
+[ upstream commit 1624f34dde105a47e1d22f419a90fd65997c908f ]
+
@@ -21 +22,0 @@
-Cc: stable@dpdk.org
@@ -30 +31 @@
-index 0f4f10ec12..e3d7c9d0ca 100644
+index e61d71959e..23605606ff 100644
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'buildtools/pmdinfogen: fix warning with python 3.14' has been queued to stable release 22.11.11
2025-11-12 16:52 ` patch 'test/hash: check memory allocation' " luca.boccassi
2025-11-12 16:52 ` patch 'dmadev: fix debug build with tracepoints' " luca.boccassi
@ 2025-11-12 16:52 ` luca.boccassi
2025-11-12 16:52 ` patch 'net/iavf: fix build with clang 21' " luca.boccassi
` (45 subsequent siblings)
47 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-11-12 16:52 UTC (permalink / raw)
To: Robin Jarry; +Cc: Dmitry Kozlyuk, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
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/14/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/669959909646c4a06823e0c87fbc246b96b8bec0
Thanks.
Luca Boccassi
---
From 669959909646c4a06823e0c87fbc246b96b8bec0 Mon Sep 17 00:00:00 2001
From: Robin Jarry <rjarry@redhat.com>
Date: Wed, 29 Oct 2025 17:46:17 +0100
Subject: [PATCH] buildtools/pmdinfogen: fix warning with python 3.14
[ upstream commit 74019b85e70e6152594768d6d07b8360e39ee70a ]
Fix the following warning seen on Fedora 43 with Python 3.14:
buildtools/pmdinfogen.py:118: DeprecationWarning: Due to '_pack_', the
'rte_pci_id' Structure will use memory layout compatible with MSVC
(Windows). If this is intended, set _layout_ to 'ms'. The implicit
default is dep recated and slated to become an error in Python 3.19.
Use the struct module which is simpler and assumes everything is packed
by default.
There is no change in the output of dpdk-pmdinfo.py before and after
this patch.
Bugzilla ID: 1818
Link: https://docs.python.org/3/library/struct.html
Signed-off-by: Robin Jarry <rjarry@redhat.com>
Acked-by: Dmitry Kozlyuk <dmitry.kozliuk@gmail.com>
---
buildtools/pmdinfogen.py | 42 +++++++++++-----------------------------
1 file changed, 11 insertions(+), 31 deletions(-)
diff --git a/buildtools/pmdinfogen.py b/buildtools/pmdinfogen.py
index dfb89500c0..09e34f1524 100755
--- a/buildtools/pmdinfogen.py
+++ b/buildtools/pmdinfogen.py
@@ -4,9 +4,9 @@
# Copyright (c) 2020 Dmitry Kozlyuk <dmitry.kozliuk@gmail.com>
import argparse
-import ctypes
import json
import re
+import struct
import sys
import tempfile
@@ -110,24 +110,6 @@ class COFFImage:
return None
-def define_rte_pci_id(is_big_endian):
- base_type = ctypes.LittleEndianStructure
- if is_big_endian:
- base_type = ctypes.BigEndianStructure
-
- class rte_pci_id(base_type):
- _pack_ = True
- _fields_ = [
- ("class_id", ctypes.c_uint32),
- ("vendor_id", ctypes.c_uint16),
- ("device_id", ctypes.c_uint16),
- ("subsystem_vendor_id", ctypes.c_uint16),
- ("subsystem_device_id", ctypes.c_uint16),
- ]
-
- return rte_pci_id
-
-
class Driver:
OPTIONS = [
("params", "_param_string_export"),
@@ -166,26 +148,24 @@ class Driver:
if not table_symbol:
raise Exception("PCI table declared but not defined: %d" % table_name)
- rte_pci_id = define_rte_pci_id(image.is_big_endian)
+ if image.is_big_endian:
+ fmt = ">"
+ else:
+ fmt = "<"
+ fmt += "LHHHH"
result = []
while True:
- size = ctypes.sizeof(rte_pci_id)
+ size = struct.calcsize(fmt)
offset = size * len(result)
data = table_symbol.get_value(offset, size)
if not data:
break
- pci_id = rte_pci_id.from_buffer_copy(data)
- if not pci_id.device_id:
+ _, vendor, device, ss_vendor, ss_device = struct.unpack_from(fmt, data)
+ if not device:
break
- result.append(
- [
- pci_id.vendor_id,
- pci_id.device_id,
- pci_id.subsystem_vendor_id,
- pci_id.subsystem_device_id,
- ]
- )
+ result.append((vendor, device, ss_vendor, ss_device))
+
return result
def dump(self, file):
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-11-12 16:20:41.118796795 +0000
+++ 0003-buildtools-pmdinfogen-fix-warning-with-python-3.14.patch 2025-11-12 16:20:40.875715664 +0000
@@ -1 +1 @@
-From 74019b85e70e6152594768d6d07b8360e39ee70a Mon Sep 17 00:00:00 2001
+From 669959909646c4a06823e0c87fbc246b96b8bec0 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 74019b85e70e6152594768d6d07b8360e39ee70a ]
+
@@ -20 +21,0 @@
-Cc: stable@dpdk.org
@@ -30 +31 @@
-index 63e0a8b364..4401106f0b 100755
+index dfb89500c0..09e34f1524 100755
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/iavf: fix build with clang 21' has been queued to stable release 22.11.11
2025-11-12 16:52 ` patch 'test/hash: check memory allocation' " luca.boccassi
2025-11-12 16:52 ` patch 'dmadev: fix debug build with tracepoints' " luca.boccassi
2025-11-12 16:52 ` patch 'buildtools/pmdinfogen: fix warning with python 3.14' " luca.boccassi
@ 2025-11-12 16:52 ` luca.boccassi
2025-11-12 16:52 ` patch 'eventdev/crypto: " luca.boccassi
` (44 subsequent siblings)
47 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-11-12 16:52 UTC (permalink / raw)
To: Jerin Jacob; +Cc: Vladimir Medvedkin, David Marchand, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
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/14/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/4e33c3709a3f5a12a49b044d5f634b3fbc428cca
Thanks.
Luca Boccassi
---
From 4e33c3709a3f5a12a49b044d5f634b3fbc428cca Mon Sep 17 00:00:00 2001
From: Jerin Jacob <jerinj@marvell.com>
Date: Tue, 28 Oct 2025 22:53:22 +0530
Subject: [PATCH] net/iavf: fix build with clang 21
[ upstream commit ffa370cf683a1dd37914a54b243ec38a237b3930 ]
Fix the following error seen with clang 21.1.4
drivers/net/intel/iavf/iavf_vchnl.c:123:38: error: variable
'notify_byte' is uninitialized when passed as a const pointer
argument here [-Werror,-Wuninitialized-const-pointer]
Fixes: cb5c1b91f76f ("net/iavf: add thread for event callbacks")
Signed-off-by: Jerin Jacob <jerinj@marvell.com>
Acked-by: Vladimir Medvedkin <vladimir.medvedkin@intel.com>
Reviewed-by: David Marchand <david.marchand@redhat.com>
---
drivers/net/iavf/iavf_vchnl.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/iavf/iavf_vchnl.c b/drivers/net/iavf/iavf_vchnl.c
index da1eec273c..71cd07770e 100644
--- a/drivers/net/iavf/iavf_vchnl.c
+++ b/drivers/net/iavf/iavf_vchnl.c
@@ -93,7 +93,7 @@ iavf_dev_event_post(struct rte_eth_dev *dev,
void *param, size_t param_alloc_size)
{
struct iavf_event_handler *handler = &event_handler;
- char notify_byte;
+ char notify_byte = 0;
struct iavf_event_element *elem = rte_malloc(NULL, sizeof(*elem) + param_alloc_size, 0);
if (!elem)
return;
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-11-12 16:20:41.151160629 +0000
+++ 0004-net-iavf-fix-build-with-clang-21.patch 2025-11-12 16:20:40.879715762 +0000
@@ -1 +1 @@
-From ffa370cf683a1dd37914a54b243ec38a237b3930 Mon Sep 17 00:00:00 2001
+From 4e33c3709a3f5a12a49b044d5f634b3fbc428cca Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit ffa370cf683a1dd37914a54b243ec38a237b3930 ]
+
@@ -13 +14,0 @@
-Cc: stable@dpdk.org
@@ -19 +20 @@
- drivers/net/intel/iavf/iavf_vchnl.c | 2 +-
+ drivers/net/iavf/iavf_vchnl.c | 2 +-
@@ -22,5 +23,5 @@
-diff --git a/drivers/net/intel/iavf/iavf_vchnl.c b/drivers/net/intel/iavf/iavf_vchnl.c
-index 460035d772..9ad39300c6 100644
---- a/drivers/net/intel/iavf/iavf_vchnl.c
-+++ b/drivers/net/intel/iavf/iavf_vchnl.c
-@@ -102,7 +102,7 @@ iavf_dev_event_post(struct rte_eth_dev *dev,
+diff --git a/drivers/net/iavf/iavf_vchnl.c b/drivers/net/iavf/iavf_vchnl.c
+index da1eec273c..71cd07770e 100644
+--- a/drivers/net/iavf/iavf_vchnl.c
++++ b/drivers/net/iavf/iavf_vchnl.c
+@@ -93,7 +93,7 @@ iavf_dev_event_post(struct rte_eth_dev *dev,
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'eventdev/crypto: fix build with clang 21' has been queued to stable release 22.11.11
2025-11-12 16:52 ` patch 'test/hash: check memory allocation' " luca.boccassi
` (2 preceding siblings ...)
2025-11-12 16:52 ` patch 'net/iavf: fix build with clang 21' " luca.boccassi
@ 2025-11-12 16:52 ` luca.boccassi
2025-11-12 16:52 ` patch 'rawdev: " luca.boccassi
` (43 subsequent siblings)
47 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-11-12 16:52 UTC (permalink / raw)
To: David Marchand; +Cc: Abhinandan Gujjar, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
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/14/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/0e1968e24fef9134607b11cbe1ef3524c0a2bc6e
Thanks.
Luca Boccassi
---
From 0e1968e24fef9134607b11cbe1ef3524c0a2bc6e Mon Sep 17 00:00:00 2001
From: David Marchand <david.marchand@redhat.com>
Date: Tue, 4 Nov 2025 12:52:22 +0100
Subject: [PATCH] eventdev/crypto: fix build with clang 21
[ upstream commit 9726ac9d903ce8bc76e4c8abde1de64b2827b609 ]
Fix 16-bits formatting issues reported by clang 21 on Fedora 43:
../lib/eventdev/rte_event_crypto_adapter.c:1461:4: error:
format specifies type 'unsigned char' but the argument has type
'uint16_t' (aka 'unsigned short') [-Werror,-Wformat]
1459 | RTE_EDEV_LOG_ERR("Failed to get adapter caps dev %" PRIu8
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1460 | " cdev %" PRIu8, adapter->eventdev_id,
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1461 | adapter->next_cdev_id);
| ^~~~~~~~~~~~~~~~~~~~~~
../lib/eventdev/rte_event_crypto_adapter.c:1592:46: error:
format specifies type 'unsigned char' but the argument has type
'uint16_t' (aka 'unsigned short') [-Werror,-Wformat]
1592 | RTE_EDEV_LOG_ERR("Invalid dev_id=%" PRIu8, cdev_id);
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~
../lib/eventdev/rte_event_crypto_adapter.c:1613:45: error:
format specifies type 'unsigned char' but the argument has type
'uint16_t' (aka 'unsigned short') [-Werror,-Wformat]
1612 | RTE_EDEV_LOG_ERR("Event vectorization is not supported,"
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1613 | "dev %" PRIu8 " cdev %" PRIu8, dev_id, cdev_id);
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~
Fixes: c1749bc5ee10 ("eventdev: introduce event cryptodev vector type")
Fixes: 04ed18cd41f1 ("eventdev/crypto: support runtime set/get parameters")
Signed-off-by: David Marchand <david.marchand@redhat.com>
Acked-by: Abhinandan Gujjar <abhinandan.gujjar@intel.com>
---
lib/eventdev/rte_event_crypto_adapter.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/lib/eventdev/rte_event_crypto_adapter.c b/lib/eventdev/rte_event_crypto_adapter.c
index 258be0f339..f0ef80fdf2 100644
--- a/lib/eventdev/rte_event_crypto_adapter.c
+++ b/lib/eventdev/rte_event_crypto_adapter.c
@@ -1453,7 +1453,7 @@ rte_event_crypto_adapter_vector_limits_get(
RTE_EVENTDEV_VALID_DEVID_OR_ERR_RET(dev_id, -EINVAL);
if (!rte_cryptodev_is_valid_dev(cdev_id)) {
- RTE_EDEV_LOG_ERR("Invalid dev_id=%" PRIu8, cdev_id);
+ RTE_EDEV_LOG_ERR("Invalid dev_id=%" PRIu16, cdev_id);
return -EINVAL;
}
@@ -1474,7 +1474,7 @@ rte_event_crypto_adapter_vector_limits_get(
if (!(cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_EVENT_VECTOR)) {
RTE_EDEV_LOG_ERR("Event vectorization is not supported,"
- "dev %" PRIu8 " cdev %" PRIu8, dev_id, cdev_id);
+ "dev %" PRIu8 " cdev %" PRIu16, dev_id, cdev_id);
return -ENOTSUP;
}
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-11-12 16:20:41.186506415 +0000
+++ 0005-eventdev-crypto-fix-build-with-clang-21.patch 2025-11-12 16:20:40.879715762 +0000
@@ -1 +1 @@
-From 9726ac9d903ce8bc76e4c8abde1de64b2827b609 Mon Sep 17 00:00:00 2001
+From 0e1968e24fef9134607b11cbe1ef3524c0a2bc6e Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 9726ac9d903ce8bc76e4c8abde1de64b2827b609 ]
+
@@ -34 +35,0 @@
-Cc: stable@dpdk.org
@@ -39,2 +40,2 @@
- lib/eventdev/rte_event_crypto_adapter.c | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
+ lib/eventdev/rte_event_crypto_adapter.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
@@ -43 +44 @@
-index b827a0ffd6..3f9cc7379a 100644
+index 258be0f339..f0ef80fdf2 100644
@@ -46,10 +47 @@
-@@ -1457,7 +1457,7 @@ crypto_adapter_cap_check(struct event_crypto_adapter *adapter)
- &caps);
- if (ret) {
- RTE_EDEV_LOG_ERR("Failed to get adapter caps dev %" PRIu8
-- " cdev %" PRIu8, adapter->eventdev_id,
-+ " cdev %" PRIu16, adapter->eventdev_id,
- adapter->next_cdev_id);
- return ret;
- }
-@@ -1589,7 +1589,7 @@ rte_event_crypto_adapter_vector_limits_get(
+@@ -1453,7 +1453,7 @@ rte_event_crypto_adapter_vector_limits_get(
@@ -64 +56 @@
-@@ -1610,7 +1610,7 @@ rte_event_crypto_adapter_vector_limits_get(
+@@ -1474,7 +1474,7 @@ rte_event_crypto_adapter_vector_limits_get(
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'rawdev: fix build with clang 21' has been queued to stable release 22.11.11
2025-11-12 16:52 ` patch 'test/hash: check memory allocation' " luca.boccassi
` (3 preceding siblings ...)
2025-11-12 16:52 ` patch 'eventdev/crypto: " luca.boccassi
@ 2025-11-12 16:52 ` luca.boccassi
2025-11-12 16:52 ` patch 'vdpa/mlx5: remove unused constant' " luca.boccassi
` (42 subsequent siblings)
47 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-11-12 16:52 UTC (permalink / raw)
To: David Marchand; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
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/14/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/c5ed7009c9a6fd9dc0dfcc8161d00119bf827b47
Thanks.
Luca Boccassi
---
From c5ed7009c9a6fd9dc0dfcc8161d00119bf827b47 Mon Sep 17 00:00:00 2001
From: David Marchand <david.marchand@redhat.com>
Date: Tue, 4 Nov 2025 12:52:28 +0100
Subject: [PATCH] rawdev: fix build with clang 21
[ upstream commit 8887f57cd71e47fa487b8d37c421fba897f7c7ee ]
Fix 16-bits formatting issues reported by clang 21 on Fedora 43:
../lib/rawdev/rte_rawdev.c:429:41: error: format specifies type
'unsigned char' but the argument has type 'uint16_t'
(aka 'unsigned short') [-Werror,-Wformat]
429 | RTE_RDEV_DEBUG("Start dev_id=%" PRIu8, dev_id);
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~
../lib/rawdev/rte_rawdev.c:435:9: error: format specifies type
'unsigned char' but the argument has type 'uint16_t'
(aka 'unsigned short') [-Werror,-Wformat]
434 | RTE_RDEV_ERR("Device with dev_id=%" PRIu8 "already started",
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
435 | dev_id);
| ^~~~~~~
../lib/rawdev/rte_rawdev.c:457:40: error: format specifies type
'unsigned char' but the argument has type 'uint16_t'
(aka 'unsigned short') [-Werror,-Wformat]
457 | RTE_RDEV_DEBUG("Stop dev_id=%" PRIu8, dev_id);
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~
../lib/rawdev/rte_rawdev.c:464:4: error: format specifies type
'unsigned char' but the argument has type 'uint16_t'
(aka 'unsigned short') [-Werror,-Wformat]
463 | RTE_RDEV_ERR("Device with dev_id=%" PRIu8 "already stopped",
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
464 | dev_id);
| ^~~~~~~
Fixes: c88b3f2558ed ("rawdev: introduce raw device library")
Signed-off-by: David Marchand <david.marchand@redhat.com>
---
lib/rawdev/rte_rawdev.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/lib/rawdev/rte_rawdev.c b/lib/rawdev/rte_rawdev.c
index dcebe4f653..4805e1408a 100644
--- a/lib/rawdev/rte_rawdev.c
+++ b/lib/rawdev/rte_rawdev.c
@@ -403,12 +403,12 @@ rte_rawdev_start(uint16_t dev_id)
struct rte_rawdev *dev;
int diag;
- RTE_RDEV_DEBUG("Start dev_id=%" PRIu8, dev_id);
+ RTE_RDEV_DEBUG("Start dev_id=%" PRIu16, dev_id);
RTE_RAWDEV_VALID_DEVID_OR_ERR_RET(dev_id, -EINVAL);
dev = &rte_rawdevs[dev_id];
if (dev->started != 0) {
- RTE_RDEV_ERR("Device with dev_id=%" PRIu8 "already started",
+ RTE_RDEV_ERR("Device with dev_id=%" PRIu16 "already started",
dev_id);
return 0;
}
@@ -430,13 +430,13 @@ rte_rawdev_stop(uint16_t dev_id)
{
struct rte_rawdev *dev;
- RTE_RDEV_DEBUG("Stop dev_id=%" PRIu8, dev_id);
+ RTE_RDEV_DEBUG("Stop dev_id=%" PRIu16, dev_id);
RTE_RAWDEV_VALID_DEVID_OR_RET(dev_id);
dev = &rte_rawdevs[dev_id];
if (dev->started == 0) {
- RTE_RDEV_ERR("Device with dev_id=%" PRIu8 "already stopped",
+ RTE_RDEV_ERR("Device with dev_id=%" PRIu16 "already stopped",
dev_id);
return;
}
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-11-12 16:20:41.218834962 +0000
+++ 0006-rawdev-fix-build-with-clang-21.patch 2025-11-12 16:20:40.879715762 +0000
@@ -1 +1 @@
-From 8887f57cd71e47fa487b8d37c421fba897f7c7ee Mon Sep 17 00:00:00 2001
+From c5ed7009c9a6fd9dc0dfcc8161d00119bf827b47 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 8887f57cd71e47fa487b8d37c421fba897f7c7ee ]
+
@@ -37 +38,0 @@
-Cc: stable@dpdk.org
@@ -45 +46 @@
-index f21d29114c..d193061842 100644
+index dcebe4f653..4805e1408a 100644
@@ -48 +49 @@
-@@ -426,12 +426,12 @@ rte_rawdev_start(uint16_t dev_id)
+@@ -403,12 +403,12 @@ rte_rawdev_start(uint16_t dev_id)
@@ -63 +64 @@
-@@ -454,13 +454,13 @@ rte_rawdev_stop(uint16_t dev_id)
+@@ -430,13 +430,13 @@ rte_rawdev_stop(uint16_t dev_id)
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'vdpa/mlx5: remove unused constant' has been queued to stable release 22.11.11
2025-11-12 16:52 ` patch 'test/hash: check memory allocation' " luca.boccassi
` (4 preceding siblings ...)
2025-11-12 16:52 ` patch 'rawdev: " luca.boccassi
@ 2025-11-12 16:52 ` luca.boccassi
2025-11-12 16:52 ` patch 'crypto/mlx5: remove unused constants' " luca.boccassi
` (41 subsequent siblings)
47 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-11-12 16:52 UTC (permalink / raw)
To: Thomas Monjalon; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
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/14/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/99ad118395bb53670b95fac67fe01c63bca70132
Thanks.
Luca Boccassi
---
From 99ad118395bb53670b95fac67fe01c63bca70132 Mon Sep 17 00:00:00 2001
From: Thomas Monjalon <thomas@monjalon.net>
Date: Fri, 31 Oct 2025 21:20:58 +0100
Subject: [PATCH] vdpa/mlx5: remove unused constant
[ upstream commit 3d8472f3c84cee0b5ac302b7d79e3407a30112c6 ]
The constant MLX5_VDPA_DEFAULT_TIMER_DELAY_US is not used anymore.
Fixes: 99f9d799ce21 ("vdpa/mlx5: improve interrupt management")
Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
---
drivers/vdpa/mlx5/mlx5_vdpa.h | 1 -
1 file changed, 1 deletion(-)
diff --git a/drivers/vdpa/mlx5/mlx5_vdpa.h b/drivers/vdpa/mlx5/mlx5_vdpa.h
index dc4dfba5ed..7ea26f1e5d 100644
--- a/drivers/vdpa/mlx5/mlx5_vdpa.h
+++ b/drivers/vdpa/mlx5/mlx5_vdpa.h
@@ -37,7 +37,6 @@
#define VIRTIO_F_RING_PACKED 34
#endif
-#define MLX5_VDPA_DEFAULT_TIMER_DELAY_US 0u
#define MLX5_VDPA_DEFAULT_TIMER_STEP_US 1u
struct mlx5_vdpa_cq {
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-11-12 16:20:41.252740523 +0000
+++ 0007-vdpa-mlx5-remove-unused-constant.patch 2025-11-12 16:20:40.879715762 +0000
@@ -1 +1 @@
-From 3d8472f3c84cee0b5ac302b7d79e3407a30112c6 Mon Sep 17 00:00:00 2001
+From 99ad118395bb53670b95fac67fe01c63bca70132 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 3d8472f3c84cee0b5ac302b7d79e3407a30112c6 ]
+
@@ -9 +10,0 @@
-Cc: stable@dpdk.org
@@ -17 +18 @@
-index a398aa22ce..06155d2405 100644
+index dc4dfba5ed..7ea26f1e5d 100644
@@ -20 +21 @@
-@@ -38,7 +38,6 @@
+@@ -37,7 +37,6 @@
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'crypto/mlx5: remove unused constants' has been queued to stable release 22.11.11
2025-11-12 16:52 ` patch 'test/hash: check memory allocation' " luca.boccassi
` (5 preceding siblings ...)
2025-11-12 16:52 ` patch 'vdpa/mlx5: remove unused constant' " luca.boccassi
@ 2025-11-12 16:52 ` luca.boccassi
2025-11-12 16:52 ` patch 'regex/mlx5: remove useless " luca.boccassi
` (40 subsequent siblings)
47 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-11-12 16:52 UTC (permalink / raw)
To: Thomas Monjalon; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
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/14/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/3cc1efc92e8faef8f8ddffc04c27317cfac31bc6
Thanks.
Luca Boccassi
---
From 3cc1efc92e8faef8f8ddffc04c27317cfac31bc6 Mon Sep 17 00:00:00 2001
From: Thomas Monjalon <thomas@monjalon.net>
Date: Fri, 31 Oct 2025 21:25:49 +0100
Subject: [PATCH] crypto/mlx5: remove unused constants
[ upstream commit 37fee5571702ebcf0e5ee9e38e01cb5eceaabe1e ]
The constant MLX5_CRYPTO_LOG_NAME was never used.
The constant MLX5_CRYPTO_MAX_SEGS was not used after the fix below.
Fixes: ba707cdb6da2 ("crypto/mlx5: fix queue size configuration")
Fixes: a7c86884f150 ("crypto/mlx5: introduce Mellanox crypto driver")
Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
---
drivers/crypto/mlx5/mlx5_crypto.c | 2 --
1 file changed, 2 deletions(-)
diff --git a/drivers/crypto/mlx5/mlx5_crypto.c b/drivers/crypto/mlx5/mlx5_crypto.c
index a54204007e..12176b4041 100644
--- a/drivers/crypto/mlx5/mlx5_crypto.c
+++ b/drivers/crypto/mlx5/mlx5_crypto.c
@@ -19,9 +19,7 @@
#include "mlx5_crypto.h"
#define MLX5_CRYPTO_DRIVER_NAME crypto_mlx5
-#define MLX5_CRYPTO_LOG_NAME pmd.crypto.mlx5
#define MLX5_CRYPTO_MAX_QPS 128
-#define MLX5_CRYPTO_MAX_SEGS 56
#define MLX5_CRYPTO_FEATURE_FLAGS(wrapped_mode) \
(RTE_CRYPTODEV_FF_SYMMETRIC_CRYPTO | RTE_CRYPTODEV_FF_HW_ACCELERATED | \
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-11-12 16:20:41.286462786 +0000
+++ 0008-crypto-mlx5-remove-unused-constants.patch 2025-11-12 16:20:40.879715762 +0000
@@ -1 +1 @@
-From 37fee5571702ebcf0e5ee9e38e01cb5eceaabe1e Mon Sep 17 00:00:00 2001
+From 3cc1efc92e8faef8f8ddffc04c27317cfac31bc6 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 37fee5571702ebcf0e5ee9e38e01cb5eceaabe1e ]
+
@@ -11 +12,0 @@
-Cc: stable@dpdk.org
@@ -19 +20 @@
-index 78a9e3d0fe..6b36a3ece5 100644
+index a54204007e..12176b4041 100644
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'regex/mlx5: remove useless constants' has been queued to stable release 22.11.11
2025-11-12 16:52 ` patch 'test/hash: check memory allocation' " luca.boccassi
` (6 preceding siblings ...)
2025-11-12 16:52 ` patch 'crypto/mlx5: remove unused constants' " luca.boccassi
@ 2025-11-12 16:52 ` luca.boccassi
2025-11-12 16:52 ` patch 'common/mlx5: " luca.boccassi
` (39 subsequent siblings)
47 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-11-12 16:52 UTC (permalink / raw)
To: Thomas Monjalon; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
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/14/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/bcef24364324549a134805d7e7b5f78d9e54ce03
Thanks.
Luca Boccassi
---
From bcef24364324549a134805d7e7b5f78d9e54ce03 Mon Sep 17 00:00:00 2001
From: Thomas Monjalon <thomas@monjalon.net>
Date: Fri, 31 Oct 2025 21:37:54 +0100
Subject: [PATCH] regex/mlx5: remove useless constants
[ upstream commit 9f6da93ec89a60df71f8e4d4748dff108a395595 ]
All these constants were unused since their introduction:
- MLX5_REGEX_WQE_CTRL_OFFSET
- MLX5_REGEX_RXP_ROF2_LINE_LEN
- MLX5_RXP_BF4_ROF_VERSION_STRING
- MLX5_RXP_CTRL_TYPE_*
- MLX5_RXP_CTRL_JOB_DESC_FLAGS
- MLX5_RXP_CTRL_VALID
- MLX5_RXP_INITIALIZATION_TIMEOUT
This constant became unused after supporting combined rule file:
- MLX5_RXP_POLL_CSR_FOR_VALUE_TIMEOUT
All these constants became unused after removing DB and register R/W:
- MLX5_RXP_MAX_ENGINES
- MLX5_RXP_EM_COUNT
- MLX5_RXP_DB_NOT_ASSIGNED
- MLX5_RXP_CSR_NUM_ENTRIES
- MLX5_RXP_CSR_CTRL_DISABLE_L2C
Fixes: 4d4e245ad637 ("regex/mlx5: support enqueue")
Fixes: f324162e8e77 ("regex/mlx5: support combined rule file")
Fixes: ab74680160ba ("regex/mlx5: support combined ROF file")
Fixes: b34d816363b5 ("regex/mlx5: support rules import")
Fixes: ab2e0b0d3531 ("regex/mlx5: remove register read/write")
Fixes: 9fa82d287f65 ("regex/mlx5: move RXP to CrSpace")
Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
---
drivers/regex/mlx5/mlx5_regex_fastpath.c | 1 -
drivers/regex/mlx5/mlx5_rxp.c | 2 --
drivers/regex/mlx5/mlx5_rxp.h | 20 --------------------
3 files changed, 23 deletions(-)
diff --git a/drivers/regex/mlx5/mlx5_regex_fastpath.c b/drivers/regex/mlx5/mlx5_regex_fastpath.c
index 8e5f8c9c95..6e21574d29 100644
--- a/drivers/regex/mlx5/mlx5_regex_fastpath.c
+++ b/drivers/regex/mlx5/mlx5_regex_fastpath.c
@@ -27,7 +27,6 @@
#define MLX5_REGEX_MAX_WQE_INDEX 0xffff
#define MLX5_REGEX_METADATA_SIZE ((size_t)64)
#define MLX5_REGEX_MAX_OUTPUT (((size_t)1) << 11)
-#define MLX5_REGEX_WQE_CTRL_OFFSET 12
#define MLX5_REGEX_WQE_METADATA_OFFSET 16
#define MLX5_REGEX_WQE_GATHER_OFFSET 32
#define MLX5_REGEX_WQE_SCATTER_OFFSET 48
diff --git a/drivers/regex/mlx5/mlx5_rxp.c b/drivers/regex/mlx5/mlx5_rxp.c
index 7730e11fb1..dda4a7fdb0 100644
--- a/drivers/regex/mlx5/mlx5_rxp.c
+++ b/drivers/regex/mlx5/mlx5_rxp.c
@@ -24,8 +24,6 @@
#define MLX5_REGEX_MAX_RULES_PER_GROUP UINT32_MAX
#define MLX5_REGEX_MAX_GROUPS MLX5_RXP_MAX_SUBSETS
-#define MLX5_REGEX_RXP_ROF2_LINE_LEN 34
-
const uint64_t combined_rof_tag = 0xff52544424a52475;
/* Private Declarations */
diff --git a/drivers/regex/mlx5/mlx5_rxp.h b/drivers/regex/mlx5/mlx5_rxp.h
index b38b53cc14..1f982f3b61 100644
--- a/drivers/regex/mlx5/mlx5_rxp.h
+++ b/drivers/regex/mlx5/mlx5_rxp.h
@@ -9,27 +9,13 @@
#define MLX5_RXP_BF3_IDENTIFIER 0x1
#define MLX5_RXP_MAX_JOB_LENGTH 16384
#define MLX5_RXP_MAX_SUBSETS 4095
-#define MLX5_RXP_CSR_NUM_ENTRIES 31
#define MLX5_RXP_BF2_ROF_VERSION_STRING 0x07055254
#define MLX5_RXP_BF3_ROF_VERSION_STRING 0x00065254
-#define MLX5_RXP_BF4_ROF_VERSION_STRING 0x00075254
-
-#define MLX5_RXP_CTRL_TYPE_MASK 7
-#define MLX5_RXP_CTRL_TYPE_JOB_DESCRIPTOR 0
-#define MLX5_RXP_CTRL_TYPE_RESPONSE_DESCRIPTOR 1
-#define MLX5_RXP_CTRL_TYPE_MEMORY_WRITE 4
-#define MLX5_RXP_CSR_CTRL_DISABLE_L2C (1 << 7)
#define MLX5_RXP_CTRL_JOB_DESC_SOF 0x0010
#define MLX5_RXP_CTRL_JOB_DESC_EOF 0x0020
#define MLX5_RXP_CTRL_JOB_DESC_HPM_ENABLE 0x0100
#define MLX5_RXP_CTRL_JOB_DESC_ANYMATCH_ENABLE 0x0200
-#define MLX5_RXP_CTRL_JOB_DESC_FLAGS (MLX5_RXP_CTRL_JOB_DESC_SOF | \
- MLX5_RXP_CTRL_JOB_DESC_EOF | \
- MLX5_RXP_CTRL_JOB_DESC_HPM_ENABLE | \
- MLX5_RXP_CTRL_JOB_DESC_ANYMATCH_ENABLE)
-
-#define MLX5_RXP_CTRL_VALID 0x8000
#define MLX5_RXP_RESP_STATUS_MAX_PRI_THREADS (1 << 3)
#define MLX5_RXP_RESP_STATUS_MAX_SEC_THREADS (1 << 4)
@@ -128,12 +114,6 @@ enum mlx5_rxp_program_mode {
MLX5_RXP_PRIVATE_PROG_MODE,
};
-#define MLX5_RXP_POLL_CSR_FOR_VALUE_TIMEOUT 3000 /* Poll timeout in ms. */
-#define MLX5_RXP_INITIALIZATION_TIMEOUT 60000 /* Initialize timeout in ms. */
-#define MLX5_RXP_MAX_ENGINES 2u /* Number of RXP engines. */
-#define MLX5_RXP_EM_COUNT 1u /* Extra External Memories to use. */
-#define MLX5_RXP_DB_NOT_ASSIGNED 0xFF
-
struct mlx5_regex_mkey {
struct mlx5dv_devx_umem *umem;
struct mlx5_devx_obj *mkey;
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-11-12 16:20:41.321818943 +0000
+++ 0009-regex-mlx5-remove-useless-constants.patch 2025-11-12 16:20:40.879715762 +0000
@@ -1 +1 @@
-From 9f6da93ec89a60df71f8e4d4748dff108a395595 Mon Sep 17 00:00:00 2001
+From bcef24364324549a134805d7e7b5f78d9e54ce03 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 9f6da93ec89a60df71f8e4d4748dff108a395595 ]
+
@@ -34 +35,0 @@
-Cc: stable@dpdk.org
@@ -69 +70 @@
-index 08b9a2680b..8ef1541d1a 100644
+index b38b53cc14..1f982f3b61 100644
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'common/mlx5: remove useless constants' has been queued to stable release 22.11.11
2025-11-12 16:52 ` patch 'test/hash: check memory allocation' " luca.boccassi
` (7 preceding siblings ...)
2025-11-12 16:52 ` patch 'regex/mlx5: remove useless " luca.boccassi
@ 2025-11-12 16:52 ` luca.boccassi
2025-11-12 16:52 ` patch 'net/mlx5: " luca.boccassi
` (38 subsequent siblings)
47 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-11-12 16:52 UTC (permalink / raw)
To: Thomas Monjalon; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
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/14/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/5b625cccee6408f9c998eb367bd7fc1935c05c98
Thanks.
Luca Boccassi
---
From 5b625cccee6408f9c998eb367bd7fc1935c05c98 Mon Sep 17 00:00:00 2001
From: Thomas Monjalon <thomas@monjalon.net>
Date: Fri, 31 Oct 2025 21:38:10 +0100
Subject: [PATCH] common/mlx5: remove useless constants
[ upstream commit 5f961fec22ff6903f2a11ffdc5ffef9c8c50cb5b ]
All these constants were unused since their introduction:
- MLX5_DRV_PROBE_AGAIN
- MLX5_NL_BUF_SIZE
- MLX5DV_FLOW_TABLE_TYPE_RDMA_RX
- IB_QPT_RAW_PACKET
Fixes: ad435d320473 ("common/mlx5: add bus-agnostic layer")
Fixes: ccdcba53a3f4 ("net/mlx5: use Netlink to add/remove MAC addresses")
Fixes: 03e1f7f760d8 ("net/mlx5: create flow matcher object on Windows")
Fixes: 358fbb018310 ("net/mlx5: support multi-packet Rx queue on Windows")
Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
---
drivers/common/mlx5/linux/mlx5_nl.c | 2 --
drivers/common/mlx5/mlx5_common.h | 3 ---
drivers/common/mlx5/windows/mlx5_win_defs.h | 1 -
3 files changed, 6 deletions(-)
diff --git a/drivers/common/mlx5/linux/mlx5_nl.c b/drivers/common/mlx5/linux/mlx5_nl.c
index 4fa2410a81..657cc1437f 100644
--- a/drivers/common/mlx5/linux/mlx5_nl.c
+++ b/drivers/common/mlx5/linux/mlx5_nl.c
@@ -27,8 +27,6 @@
#endif
-/* Size of the buffer to receive kernel messages */
-#define MLX5_NL_BUF_SIZE (32 * 1024)
/* Send buffer size for the Netlink socket */
#define MLX5_SEND_BUF_SIZE 32768
/* Receive buffer size for the Netlink socket */
diff --git a/drivers/common/mlx5/mlx5_common.h b/drivers/common/mlx5/mlx5_common.h
index 02b5d54363..c34385abc3 100644
--- a/drivers/common/mlx5/mlx5_common.h
+++ b/drivers/common/mlx5/mlx5_common.h
@@ -502,9 +502,6 @@ typedef int (mlx5_class_driver_probe_t)(struct mlx5_common_device *cdev,
*/
typedef int (mlx5_class_driver_remove_t)(struct mlx5_common_device *cdev);
-/** Device already probed can be probed again to check for new ports. */
-#define MLX5_DRV_PROBE_AGAIN 0x0004
-
/**
* A structure describing a mlx5 common class driver.
*/
diff --git a/drivers/common/mlx5/windows/mlx5_win_defs.h b/drivers/common/mlx5/windows/mlx5_win_defs.h
index 1ddf5c553d..91439d7468 100644
--- a/drivers/common/mlx5/windows/mlx5_win_defs.h
+++ b/drivers/common/mlx5/windows/mlx5_win_defs.h
@@ -184,7 +184,6 @@ enum mlx5dv_flow_table_type {
#define MLX5DV_FLOW_TABLE_TYPE_NIC_RX MLX5_IB_UAPI_FLOW_TABLE_TYPE_NIC_RX
#define MLX5DV_FLOW_TABLE_TYPE_NIC_TX MLX5_IB_UAPI_FLOW_TABLE_TYPE_NIC_TX
#define MLX5DV_FLOW_TABLE_TYPE_FDB MLX5_IB_UAPI_FLOW_TABLE_TYPE_FDB
-#define MLX5DV_FLOW_TABLE_TYPE_RDMA_RX MLX5_IB_UAPI_FLOW_TABLE_TYPE_RDMA_RX
struct mlx5dv_flow_match_parameters {
size_t match_sz;
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-11-12 16:20:41.356411799 +0000
+++ 0010-common-mlx5-remove-useless-constants.patch 2025-11-12 16:20:40.883715861 +0000
@@ -1 +1 @@
-From 5f961fec22ff6903f2a11ffdc5ffef9c8c50cb5b Mon Sep 17 00:00:00 2001
+From 5b625cccee6408f9c998eb367bd7fc1935c05c98 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 5f961fec22ff6903f2a11ffdc5ffef9c8c50cb5b ]
+
@@ -17 +18,0 @@
-Cc: stable@dpdk.org
@@ -23,2 +24,2 @@
- drivers/common/mlx5/windows/mlx5_win_defs.h | 2 --
- 3 files changed, 7 deletions(-)
+ drivers/common/mlx5/windows/mlx5_win_defs.h | 1 -
+ 3 files changed, 6 deletions(-)
@@ -27 +28 @@
-index 8753d3127c..d53543a113 100644
+index 4fa2410a81..657cc1437f 100644
@@ -30 +31 @@
-@@ -28,8 +28,6 @@
+@@ -27,8 +27,6 @@
@@ -40 +41 @@
-index b49f0c850e..214ddcb8b3 100644
+index 02b5d54363..c34385abc3 100644
@@ -43 +44 @@
-@@ -575,9 +575,6 @@ typedef int (mlx5_class_driver_probe_t)(struct mlx5_common_device *cdev,
+@@ -502,9 +502,6 @@ typedef int (mlx5_class_driver_probe_t)(struct mlx5_common_device *cdev,
@@ -54 +55 @@
-index d60df6fd37..d98725eea8 100644
+index 1ddf5c553d..91439d7468 100644
@@ -65,7 +65,0 @@
-@@ -263,6 +262,5 @@ enum {
- #define MLX5_MIN_SINGLE_STRIDE_LOG_NUM_BYTES 6
- #define MLX5_MAX_SINGLE_STRIDE_LOG_NUM_BYTES 13
- #define MLX5_EXT_MIN_SINGLE_WQE_LOG_NUM_STRIDES 3
--#define IB_QPT_RAW_PACKET 8
-
- #endif /* MLX5_WIN_DEFS_H */
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/mlx5: remove useless constants' has been queued to stable release 22.11.11
2025-11-12 16:52 ` patch 'test/hash: check memory allocation' " luca.boccassi
` (8 preceding siblings ...)
2025-11-12 16:52 ` patch 'common/mlx5: " luca.boccassi
@ 2025-11-12 16:52 ` luca.boccassi
2025-11-12 16:52 ` patch 'net/mlx5: remove unused macros' " luca.boccassi
` (37 subsequent siblings)
47 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-11-12 16:52 UTC (permalink / raw)
To: Thomas Monjalon; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
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/14/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/c497e8ae3655414f0fd624a4eefeb8b9d46fedc9
Thanks.
Luca Boccassi
---
From c497e8ae3655414f0fd624a4eefeb8b9d46fedc9 Mon Sep 17 00:00:00 2001
From: Thomas Monjalon <thomas@monjalon.net>
Date: Fri, 31 Oct 2025 21:38:26 +0100
Subject: [PATCH] net/mlx5: remove useless constants
[ upstream commit 9d3788534cba7cc3424e2a83db6b186211d4e94f ]
- MLX5_VEC_TX_CKSUM_OFFLOAD_CAP became unused when Tx metadata moved
to a dynamic field.
- MLX5_ALARM_TIMEOUT_US became unused when reworking link status wait.
- MLX5_FLOW_SFT_HLIST_ARRAY_SIZE was never used in hash list handling.
- MLX5_FLOW_MIN_ID_POOL_SIZE and MLX5_ID_GENERATION_ARRAY_FACTOR became
unused when the flow ID generator was replaced by ipool.
- MLX5_RSSQ_DEFAULT_NUM was used in the old per-thread flow workspace.
- MLX5_FLOW_TABLE_HWS_POLICY became unused because meter is not supported
in HWS.
- IPPROTO_MPLS became unused because MPLS over IP is not supported.
- MLX5_L4_RSS_TYPES has never been used.
- ETH_TYPE_IPV4/V6_VXLAN were never used in HWS.
- PCI_DRV_FLAGS became unused when migrating to bus-agnostic probing.
Fixes: 9bf26e1318e3 ("ethdev: move egress metadata to dynamic field")
Fixes: cfee94752b8f ("net/mlx5: fix link status to use wait to complete")
Fixes: f3020a331dca ("net/mlx5: optimize hash list table allocate on demand")
Fixes: 4ae8825c5085 ("net/mlx5: use indexed pool as id generator")
Fixes: dc7c5e0aa905 ("net/mlx5: fix flow workspace destruction")
Fixes: 645f240d1cd5 ("net/mlx5: remove unsupported flow meter action in HWS")
Fixes: 14ad99d78a46 ("net/mlx5: remove unsupported flow item MPLS over IP")
Fixes: ae67e3c43dd5 ("net/mlx5: support RSS expansion in non-template HWS setup")
Fixes: c55c2bf35333 ("net/mlx5/hws: add definer layer")
Fixes: a7f34989e9ad ("net/mlx5: migrate to bus-agnostic common interface")
Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
---
drivers/net/mlx5/hws/mlx5dr_definer.c | 2 --
drivers/net/mlx5/mlx5.c | 3 ---
drivers/net/mlx5/mlx5.h | 1 -
drivers/net/mlx5/mlx5_defs.h | 6 ------
drivers/net/mlx5/mlx5_flow.h | 7 -------
drivers/net/mlx5/mlx5_rxtx_vec.h | 7 -------
drivers/net/mlx5/windows/mlx5_os.h | 2 --
7 files changed, 28 deletions(-)
diff --git a/drivers/net/mlx5/hws/mlx5dr_definer.c b/drivers/net/mlx5/hws/mlx5dr_definer.c
index 527217487e..8770492d00 100644
--- a/drivers/net/mlx5/hws/mlx5dr_definer.c
+++ b/drivers/net/mlx5/hws/mlx5dr_definer.c
@@ -6,8 +6,6 @@
#define GTP_PDU_SC 0x85
#define BAD_PORT 0xBAD
-#define ETH_TYPE_IPV4_VXLAN 0x0800
-#define ETH_TYPE_IPV6_VXLAN 0x86DD
#define UDP_VXLAN_PORT 4789
#define STE_NO_VLAN 0x0
diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c
index 357f5eac11..674861d765 100644
--- a/drivers/net/mlx5/mlx5.c
+++ b/drivers/net/mlx5/mlx5.c
@@ -384,9 +384,6 @@ static const struct mlx5_indexed_pool_config mlx5_ipool_cfg[] = {
},
};
-#define MLX5_FLOW_MIN_ID_POOL_SIZE 512
-#define MLX5_ID_GENERATION_ARRAY_FACTOR 16
-
#define MLX5_FLOW_TABLE_HLIST_ARRAY_SIZE 1024
/**
diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h
index ad90b090cf..73d6bb6ad9 100644
--- a/drivers/net/mlx5/mlx5.h
+++ b/drivers/net/mlx5/mlx5.h
@@ -1149,7 +1149,6 @@ struct mlx5_flow_tbl_resource {
#define MLX5_FLOW_TABLE_LEVEL_METER (MLX5_MAX_TABLES - 3)
#define MLX5_FLOW_TABLE_LEVEL_POLICY (MLX5_MAX_TABLES - 4)
#define MLX5_MAX_TABLES_EXTERNAL MLX5_FLOW_TABLE_LEVEL_POLICY
-#define MLX5_FLOW_TABLE_HWS_POLICY (MLX5_MAX_TABLES - 10)
#define MLX5_MAX_TABLES_FDB UINT16_MAX
#define MLX5_FLOW_TABLE_FACTOR 10
diff --git a/drivers/net/mlx5/mlx5_defs.h b/drivers/net/mlx5/mlx5_defs.h
index 2af8c731ef..f101b3b438 100644
--- a/drivers/net/mlx5/mlx5_defs.h
+++ b/drivers/net/mlx5/mlx5_defs.h
@@ -46,9 +46,6 @@
/* Maximum number of DCS created per port. */
#define MLX5_HWS_CNT_DCS_NUM 4
-/* Alarm timeout. */
-#define MLX5_ALARM_TIMEOUT_US 100000
-
/* Maximum number of extended statistics counters. */
#define MLX5_MAX_XSTATS 64
@@ -170,9 +167,6 @@
/* Size of the hash table for tag table. */
#define MLX5_TAGS_HLIST_ARRAY_SIZE (1 << 15)
-/* Size fo the hash table for SFT table. */
-#define MLX5_FLOW_SFT_HLIST_ARRAY_SIZE 4096
-
/* Hairpin TX/RX queue configuration parameters. */
#define MLX5_HAIRPIN_QUEUE_STRIDE 6
#define MLX5_HAIRPIN_JUMBO_LOG_SIZE (14 + 2)
diff --git a/drivers/net/mlx5/mlx5_flow.h b/drivers/net/mlx5/mlx5_flow.h
index fc0b569505..39d7864f93 100644
--- a/drivers/net/mlx5/mlx5_flow.h
+++ b/drivers/net/mlx5/mlx5_flow.h
@@ -144,9 +144,6 @@ enum mlx5_feature_name {
MLX5_SAMPLE_ID,
};
-/* Default queue number. */
-#define MLX5_RSSQ_DEFAULT_NUM 16
-
#define MLX5_FLOW_LAYER_OUTER_L2 (1u << 0)
#define MLX5_FLOW_LAYER_OUTER_L3_IPV4 (1u << 1)
#define MLX5_FLOW_LAYER_OUTER_L3_IPV6 (1u << 2)
@@ -353,10 +350,6 @@ enum mlx5_feature_name {
#define MLX5_FLOW_XCAP_ACTIONS (MLX5_FLOW_ACTION_ENCAP | MLX5_FLOW_ACTION_DECAP)
-#ifndef IPPROTO_MPLS
-#define IPPROTO_MPLS 137
-#endif
-
/* UDP port number for MPLS */
#define MLX5_UDP_PORT_MPLS 6635
diff --git a/drivers/net/mlx5/mlx5_rxtx_vec.h b/drivers/net/mlx5/mlx5_rxtx_vec.h
index 77c3f4efa0..672e301f77 100644
--- a/drivers/net/mlx5/mlx5_rxtx_vec.h
+++ b/drivers/net/mlx5/mlx5_rxtx_vec.h
@@ -13,13 +13,6 @@
#include "mlx5_autoconf.h"
-/* HW checksum offload capabilities of vectorized Tx. */
-#define MLX5_VEC_TX_CKSUM_OFFLOAD_CAP \
- (RTE_ETH_TX_OFFLOAD_IPV4_CKSUM | \
- RTE_ETH_TX_OFFLOAD_UDP_CKSUM | \
- RTE_ETH_TX_OFFLOAD_TCP_CKSUM | \
- RTE_ETH_TX_OFFLOAD_OUTER_IPV4_CKSUM)
-
/*
* Compile time sanity check for vectorized functions.
*/
diff --git a/drivers/net/mlx5/windows/mlx5_os.h b/drivers/net/mlx5/windows/mlx5_os.h
index 8b58265687..7085e9b258 100644
--- a/drivers/net/mlx5/windows/mlx5_os.h
+++ b/drivers/net/mlx5/windows/mlx5_os.h
@@ -12,8 +12,6 @@ enum {
MLX5_FS_PATH_MAX = MLX5_DEVX_DEVICE_PNP_SIZE + 1
};
-#define PCI_DRV_FLAGS 0
-
#define MLX5_NAMESIZE MLX5_FS_NAME_MAX
enum mlx5_sw_parsing_offloads {
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-11-12 16:20:41.392310646 +0000
+++ 0011-net-mlx5-remove-useless-constants.patch 2025-11-12 16:20:40.891716059 +0000
@@ -1 +1 @@
-From 9d3788534cba7cc3424e2a83db6b186211d4e94f Mon Sep 17 00:00:00 2001
+From c497e8ae3655414f0fd624a4eefeb8b9d46fedc9 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 9d3788534cba7cc3424e2a83db6b186211d4e94f ]
+
@@ -30 +31,0 @@
-Cc: stable@dpdk.org
@@ -34,8 +35,8 @@
- drivers/net/mlx5/hws/mlx5dr_definer.c | 2 --
- drivers/net/mlx5/mlx5.c | 3 ---
- drivers/net/mlx5/mlx5.h | 1 -
- drivers/net/mlx5/mlx5_defs.h | 6 ------
- drivers/net/mlx5/mlx5_flow.h | 10 ----------
- drivers/net/mlx5/mlx5_rxtx_vec.h | 7 -------
- drivers/net/mlx5/windows/mlx5_os.h | 2 --
- 7 files changed, 31 deletions(-)
+ drivers/net/mlx5/hws/mlx5dr_definer.c | 2 --
+ drivers/net/mlx5/mlx5.c | 3 ---
+ drivers/net/mlx5/mlx5.h | 1 -
+ drivers/net/mlx5/mlx5_defs.h | 6 ------
+ drivers/net/mlx5/mlx5_flow.h | 7 -------
+ drivers/net/mlx5/mlx5_rxtx_vec.h | 7 -------
+ drivers/net/mlx5/windows/mlx5_os.h | 2 --
+ 7 files changed, 28 deletions(-)
@@ -44 +45 @@
-index 1c6b3e38c4..afa70bf793 100644
+index 527217487e..8770492d00 100644
@@ -47 +48,2 @@
-@@ -9,8 +9,6 @@
+@@ -6,8 +6,6 @@
+
@@ -50 +51,0 @@
- #define BAD_SQN 0xBAD
@@ -54,2 +55,2 @@
- #define UDP_VXLAN_GPE_PORT 4790
- #define UDP_GTPU_PORT 2152
+
+ #define STE_NO_VLAN 0x0
@@ -57 +58 @@
-index b018a4f0e2..4705c30801 100644
+index 357f5eac11..674861d765 100644
@@ -60 +61 @@
-@@ -394,9 +394,6 @@ static const struct mlx5_indexed_pool_config mlx5_ipool_cfg[] = {
+@@ -384,9 +384,6 @@ static const struct mlx5_indexed_pool_config mlx5_ipool_cfg[] = {
@@ -69 +70 @@
- #define MLX5_RXQ_ENH_CQE_COMP_MASK 0x80
+ /**
@@ -71 +72 @@
-index 07418b0922..233cb416cb 100644
+index ad90b090cf..73d6bb6ad9 100644
@@ -74 +75 @@
-@@ -1259,7 +1259,6 @@ struct mlx5_flow_tbl_resource {
+@@ -1149,7 +1149,6 @@ struct mlx5_flow_tbl_resource {
@@ -80,2 +81,2 @@
- #define MLX5_FLOW_TABLE_PTYPE_RSS_NUM 1024
- #define MLX5_FLOW_TABLE_PTYPE_RSS_LAST (MLX5_MAX_TABLES - 11)
+ #define MLX5_FLOW_TABLE_FACTOR 10
+
@@ -83 +84 @@
-index d326fec000..b8e5122323 100644
+index 2af8c731ef..f101b3b438 100644
@@ -107 +108 @@
-index ff61706054..1dca6e0532 100644
+index fc0b569505..39d7864f93 100644
@@ -110,2 +111,2 @@
-@@ -222,9 +222,6 @@ struct mlx5_mirror {
- struct mlx5_mirror_clone clone[MLX5_MIRROR_MAX_CLONES_NUM];
+@@ -144,9 +144,6 @@ enum mlx5_feature_name {
+ MLX5_SAMPLE_ID,
@@ -120 +121 @@
-@@ -469,10 +466,6 @@ struct mlx5_mirror {
+@@ -353,10 +350,6 @@ enum mlx5_feature_name {
@@ -128,12 +129,2 @@
- #define MLX5_IPV6_HDR_ECN_MASK 0x3
- #define MLX5_IPV6_HDR_DSCP_SHIFT 2
-
-@@ -519,9 +512,6 @@ struct mlx5_mirror {
- RTE_ETH_RSS_NONFRAG_IPV4_TCP | RTE_ETH_RSS_NONFRAG_IPV4_UDP | \
- RTE_ETH_RSS_NONFRAG_IPV4_OTHER)
-
--/* Valid L4 RSS types */
--#define MLX5_L4_RSS_TYPES (RTE_ETH_RSS_L4_SRC_ONLY | RTE_ETH_RSS_L4_DST_ONLY)
--
- /* IBV hash source bits for IPV4. */
- #define MLX5_IPV4_IBV_RX_HASH (IBV_RX_HASH_SRC_IPV4 | IBV_RX_HASH_DST_IPV4)
+ /* UDP port number for MPLS */
+ #define MLX5_UDP_PORT_MPLS 6635
@@ -160 +151 @@
-index fb7198c244..57d147bd8c 100644
+index 8b58265687..7085e9b258 100644
@@ -163,3 +154,3 @@
-@@ -7,8 +7,6 @@
-
- #include "mlx5_win_ext.h"
+@@ -12,8 +12,6 @@ enum {
+ MLX5_FS_PATH_MAX = MLX5_DEVX_DEVICE_PNP_SIZE + 1
+ };
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/mlx5: remove unused macros' has been queued to stable release 22.11.11
2025-11-12 16:52 ` patch 'test/hash: check memory allocation' " luca.boccassi
` (9 preceding siblings ...)
2025-11-12 16:52 ` patch 'net/mlx5: " luca.boccassi
@ 2025-11-12 16:52 ` luca.boccassi
2025-11-12 16:52 ` patch 'doc: fix NVIDIA bifurcated driver presentation link' " luca.boccassi
` (36 subsequent siblings)
47 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-11-12 16:52 UTC (permalink / raw)
To: Thomas Monjalon; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
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/14/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/76893a59ba135b0c07901e94a7e78002374051f3
Thanks.
Luca Boccassi
---
From 76893a59ba135b0c07901e94a7e78002374051f3 Mon Sep 17 00:00:00 2001
From: Thomas Monjalon <thomas@monjalon.net>
Date: Fri, 31 Oct 2025 21:38:26 +0100
Subject: [PATCH] net/mlx5: remove unused macros
[ upstream commit f2638f1f388c9300850d217f9a820c1c40f78a77 ]
- IS_BATCH_CNT became unused when removing flow counter container.
- MLX5_ETHER_TYPE_FROM_HEADER was used in the first integrity item check.
- ERRNO_SAFE was used in the old logging macros.
Fixes: 994829e695c0 ("net/mlx5: remove single counter container")
Fixes: 23b0a8b298b1 ("net/mlx5: fix integrity item validation and translation")
Fixes: a170a30d22a8 ("net/mlx5: use dynamic logging")
Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
---
drivers/net/mlx5/mlx5.h | 2 --
drivers/net/mlx5/mlx5_flow.h | 7 -------
drivers/net/mlx5/mlx5_utils.h | 3 ---
3 files changed, 12 deletions(-)
diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h
index 73d6bb6ad9..3cae07a6b9 100644
--- a/drivers/net/mlx5/mlx5.h
+++ b/drivers/net/mlx5/mlx5.h
@@ -413,8 +413,6 @@ struct mlx5_hw_q {
#define MLX5_MAX_PENDING_QUERIES 4
#define MLX5_CNT_MR_ALLOC_BULK 64
#define MLX5_CNT_SHARED_OFFSET 0x80000000
-#define IS_BATCH_CNT(cnt) (((cnt) & (MLX5_CNT_SHARED_OFFSET - 1)) >= \
- MLX5_CNT_BATCH_OFFSET)
#define MLX5_CNT_SIZE (sizeof(struct mlx5_flow_counter))
#define MLX5_AGE_SIZE (sizeof(struct mlx5_age_param))
diff --git a/drivers/net/mlx5/mlx5_flow.h b/drivers/net/mlx5/mlx5_flow.h
index 39d7864f93..39ca4a6599 100644
--- a/drivers/net/mlx5/mlx5_flow.h
+++ b/drivers/net/mlx5/mlx5_flow.h
@@ -1398,13 +1398,6 @@ struct rte_flow_template_table {
#define MLX5_RSS_HASH_NONE 0ULL
-/* extract next protocol type from Ethernet & VLAN headers */
-#define MLX5_ETHER_TYPE_FROM_HEADER(_s, _m, _itm, _prt) do { \
- (_prt) = ((const struct _s *)(_itm)->mask)->_m; \
- (_prt) &= ((const struct _s *)(_itm)->spec)->_m; \
- (_prt) = rte_be_to_cpu_16((_prt)); \
-} while (0)
-
/* array of valid combinations of RX Hash fields for RSS */
static const uint64_t mlx5_rss_hash_fields[] = {
MLX5_RSS_HASH_IPV4,
diff --git a/drivers/net/mlx5/mlx5_utils.h b/drivers/net/mlx5/mlx5_utils.h
index 82e8298781..3981bb7807 100644
--- a/drivers/net/mlx5/mlx5_utils.h
+++ b/drivers/net/mlx5/mlx5_utils.h
@@ -25,9 +25,6 @@
/* Convert a bit number to the corresponding 64-bit mask */
#define MLX5_BITSHIFT(v) (UINT64_C(1) << (v))
-/* Save and restore errno around argument evaluation. */
-#define ERRNO_SAFE(x) ((errno = (int []){ errno, ((x), 0) }[0]))
-
extern int mlx5_logtype;
#define MLX5_NET_LOG_PREFIX "mlx5_net"
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-11-12 16:20:41.435886493 +0000
+++ 0012-net-mlx5-remove-unused-macros.patch 2025-11-12 16:20:40.895716156 +0000
@@ -1 +1 @@
-From f2638f1f388c9300850d217f9a820c1c40f78a77 Mon Sep 17 00:00:00 2001
+From 76893a59ba135b0c07901e94a7e78002374051f3 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit f2638f1f388c9300850d217f9a820c1c40f78a77 ]
+
@@ -13 +14,0 @@
-Cc: stable@dpdk.org
@@ -23 +24 @@
-index 233cb416cb..4d9cf6b70b 100644
+index 73d6bb6ad9..3cae07a6b9 100644
@@ -26 +27 @@
-@@ -509,8 +509,6 @@ struct __rte_cache_aligned mlx5_hw_q {
+@@ -413,8 +413,6 @@ struct mlx5_hw_q {
@@ -36 +37 @@
-index 1dca6e0532..c525516672 100644
+index 39d7864f93..39ca4a6599 100644
@@ -39,3 +40,3 @@
-@@ -1888,13 +1888,6 @@ flow_hw_get_reg_id_from_ctx(void *dr_ctx, enum rte_flow_item_type type,
- (((func) == RTE_ETH_HASH_FUNCTION_SYMMETRIC_TOEPLITZ) || \
- ((func) == RTE_ETH_HASH_FUNCTION_SYMMETRIC_TOEPLITZ_SORT))
+@@ -1398,13 +1398,6 @@ struct rte_flow_template_table {
+ #define MLX5_RSS_HASH_NONE 0ULL
+
@@ -54 +55 @@
-index c65839c5d9..95866351c2 100644
+index 82e8298781..3981bb7807 100644
@@ -57,3 +58,3 @@
-@@ -22,9 +22,6 @@
-
- #include "mlx5_defs.h"
+@@ -25,9 +25,6 @@
+ /* Convert a bit number to the corresponding 64-bit mask */
+ #define MLX5_BITSHIFT(v) (UINT64_C(1) << (v))
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'doc: fix NVIDIA bifurcated driver presentation link' has been queued to stable release 22.11.11
2025-11-12 16:52 ` patch 'test/hash: check memory allocation' " luca.boccassi
` (10 preceding siblings ...)
2025-11-12 16:52 ` patch 'net/mlx5: remove unused macros' " luca.boccassi
@ 2025-11-12 16:52 ` luca.boccassi
2025-11-12 16:52 ` patch 'vfio: fix custom containers in multiprocess' " luca.boccassi
` (35 subsequent siblings)
47 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-11-12 16:52 UTC (permalink / raw)
To: Kevin Traynor; +Cc: Andre Muezerie, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
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/14/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/f878eaa65a545c2831c4639eb7b412efc5974c52
Thanks.
Luca Boccassi
---
From f878eaa65a545c2831c4639eb7b412efc5974c52 Mon Sep 17 00:00:00 2001
From: Kevin Traynor <ktraynor@redhat.com>
Date: Mon, 29 Sep 2025 12:31:10 +0100
Subject: [PATCH] doc: fix NVIDIA bifurcated driver presentation link
[ upstream commit f219e55e51d6bb9f8fcfc5899cfe5752e0bfca93 ]
Fix link for Nvidia bifurcated DPDK PMD presentation.
Bugzilla ID: 1793
Fixes: d052a9a7d5f9 ("doc: fix link about bifurcated model in Linux guide")
Reported-by: Andre Muezerie <andremue@linux.microsoft.com>
Signed-off-by: Kevin Traynor <ktraynor@redhat.com>
---
doc/guides/linux_gsg/linux_drivers.rst | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/doc/guides/linux_gsg/linux_drivers.rst b/doc/guides/linux_gsg/linux_drivers.rst
index 2f3f079aab..4e1c963755 100644
--- a/doc/guides/linux_gsg/linux_drivers.rst
+++ b/doc/guides/linux_gsg/linux_drivers.rst
@@ -319,7 +319,7 @@ Such model has the following benefits:
More about the bifurcated driver can be found in
NVIDIA `bifurcated PMD
-<https://www.dpdk.org/wp-content/uploads/sites/35/2016/10/Day02-Session04-RonyEfraim-Userspace2016.pdf>`_ presentation.
+<https://www.dpdk.org/wp-content/uploads/sites/23/2016/10/Day02-Session04-RonyEfraim-Userspace2016.pdf>`_ presentation.
.. _uio:
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-11-12 16:20:41.472280000 +0000
+++ 0013-doc-fix-NVIDIA-bifurcated-driver-presentation-link.patch 2025-11-12 16:20:40.895716156 +0000
@@ -1 +1 @@
-From f219e55e51d6bb9f8fcfc5899cfe5752e0bfca93 Mon Sep 17 00:00:00 2001
+From f878eaa65a545c2831c4639eb7b412efc5974c52 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit f219e55e51d6bb9f8fcfc5899cfe5752e0bfca93 ]
+
@@ -10 +11,0 @@
-Cc: stable@dpdk.org
@@ -19 +20 @@
-index 039823d61e..739fc0226c 100644
+index 2f3f079aab..4e1c963755 100644
@@ -22 +23 @@
-@@ -384,7 +384,7 @@ Such model has the following benefits:
+@@ -319,7 +319,7 @@ Such model has the following benefits:
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'vfio: fix custom containers in multiprocess' has been queued to stable release 22.11.11
2025-11-12 16:52 ` patch 'test/hash: check memory allocation' " luca.boccassi
` (11 preceding siblings ...)
2025-11-12 16:52 ` patch 'doc: fix NVIDIA bifurcated driver presentation link' " luca.boccassi
@ 2025-11-12 16:52 ` luca.boccassi
2025-11-12 16:52 ` patch 'net/vmxnet3: disable RSS for single queue for ESX8.0+' " luca.boccassi
` (34 subsequent siblings)
47 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-11-12 16:52 UTC (permalink / raw)
To: Anatoly Burakov; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
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/14/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/dc9e9a80570cef84bf1d1283b8491fb31fee0125
Thanks.
Luca Boccassi
---
From dc9e9a80570cef84bf1d1283b8491fb31fee0125 Mon Sep 17 00:00:00 2001
From: Anatoly Burakov <anatoly.burakov@intel.com>
Date: Tue, 21 Oct 2025 14:19:42 +0100
Subject: [PATCH] vfio: fix custom containers in multiprocess
[ upstream commit 8a8c02d2bb224ebbe60e8e1ce6edcfb481b46151 ]
Currently, the API regarding handling custom (non-default) containers has
a problem with how it behaves in secondary process. The expected flow for
using custom containers is to:
1) create a new container using rte_vfio_container_create()
2) look up IOMMU group with rte_vfio_get_group_num()
3) bind group to that container using rte_vfio_group_bind()
4) setup device with rte_vfio_setup_device()
When called from secondary process, rte_vfio_container_create() will check
if there's space in local VFIO config, and if there is, it will call
rte_vfio_get_container_fd() which, in secondary process, will call into a
multiprocess code to request primary process to open container fd, and then
pass it back to the requester. Primary process does not store this fd
anywhere, in fact it closes it immediately after responding to the request.
Following that, when we call rte_vfio_group_bind(), we check if the group
is open locally, and if not, we will call into multiprocess code again, to
request primary process to open the group fd for us, but since primary did
not store any information about the new container in step 1, it will store
the group in local config for default container, and return it to the
secondary, who will add it to its own config for a different container.
To address these issues, the following changes are made:
1) Clarify meaning of rte_vfio_get_container_fd() to only return the
default container, and always pick it up from process-local config
2) Avoid calling into multiprocess on rte_vfio_container_create()
3) Avoid calling into multiprocess in group-related code, except when
dealing with groups associated with default container
As a consequence, SOCKET_REQ_DEFAULT_CONTAINER can be removed and
consolidated with SOCKET_REQ_CONTAINER, which now only handles the
default container.
Fixes: ea2dc1066870 ("vfio: add multi container support")
Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
---
lib/eal/include/rte_vfio.h | 6 +-
lib/eal/linux/eal_vfio.c | 110 ++++++++++++++-----------------
lib/eal/linux/eal_vfio.h | 5 +-
lib/eal/linux/eal_vfio_mp_sync.c | 17 +----
4 files changed, 56 insertions(+), 82 deletions(-)
diff --git a/lib/eal/include/rte_vfio.h b/lib/eal/include/rte_vfio.h
index 7bdb8932b2..4c204fba07 100644
--- a/lib/eal/include/rte_vfio.h
+++ b/lib/eal/include/rte_vfio.h
@@ -214,14 +214,14 @@ rte_vfio_get_group_num(const char *sysfs_base,
const char *dev_addr, int *iommu_group_num);
/**
- * Open a new VFIO container fd
+ * Get the default VFIO container fd
*
* This function is only relevant to linux and will return
* an error on BSD.
*
* @return
- * > 0 container fd
- * < 0 for errors
+ * > 0 default container fd
+ * < 0 if VFIO is not enabled or not supported
*/
int
rte_vfio_get_container_fd(void);
diff --git a/lib/eal/linux/eal_vfio.c b/lib/eal/linux/eal_vfio.c
index 549b86ae1d..0bab0dd354 100644
--- a/lib/eal/linux/eal_vfio.c
+++ b/lib/eal/linux/eal_vfio.c
@@ -347,7 +347,7 @@ compact_user_maps(struct user_mem_maps *user_mem_maps)
}
static int
-vfio_open_group_fd(int iommu_group_num)
+vfio_open_group_fd(int iommu_group_num, bool mp_request)
{
int vfio_group_fd;
char filename[PATH_MAX];
@@ -355,11 +355,9 @@ vfio_open_group_fd(int iommu_group_num)
struct rte_mp_reply mp_reply = {0};
struct timespec ts = {.tv_sec = 5, .tv_nsec = 0};
struct vfio_mp_param *p = (struct vfio_mp_param *)mp_req.param;
- const struct internal_config *internal_conf =
- eal_get_internal_configuration();
- /* if primary, try to open the group */
- if (internal_conf->process_type == RTE_PROC_PRIMARY) {
+ /* if not requesting via mp, open the group locally */
+ if (!mp_request) {
/* try regular group format */
snprintf(filename, sizeof(filename),
VFIO_GROUP_FMT, iommu_group_num);
@@ -469,7 +467,24 @@ vfio_get_group_fd(struct vfio_config *vfio_cfg,
return -1;
}
- vfio_group_fd = vfio_open_group_fd(iommu_group_num);
+ /*
+ * When opening a group fd, we need to decide whether to open it locally
+ * or request it from the primary process via mp_sync.
+ *
+ * For the default container, secondary processes use mp_sync so that
+ * the primary process tracks the group fd and maintains VFIO state
+ * across all processes.
+ *
+ * For custom containers, we open the group fd locally in each process
+ * since custom containers are process-local and the primary has no
+ * knowledge of them. Requesting a group fd from the primary for a
+ * container it doesn't know about would be incorrect.
+ */
+ const struct internal_config *internal_conf = eal_get_internal_configuration();
+ bool mp_request = (internal_conf->process_type == RTE_PROC_SECONDARY) &&
+ (vfio_cfg == default_vfio_cfg);
+
+ vfio_group_fd = vfio_open_group_fd(iommu_group_num, mp_request);
if (vfio_group_fd < 0) {
RTE_LOG(ERR, EAL, "Failed to open VFIO group %d\n",
iommu_group_num);
@@ -1120,13 +1135,12 @@ rte_vfio_enable(const char *modname)
}
if (internal_conf->process_type == RTE_PROC_PRIMARY) {
- /* open a new container */
- default_vfio_cfg->vfio_container_fd =
- rte_vfio_get_container_fd();
+ /* open a default container */
+ default_vfio_cfg->vfio_container_fd = vfio_open_container_fd(false);
} else {
/* get the default container from the primary process */
default_vfio_cfg->vfio_container_fd =
- vfio_get_default_container_fd();
+ vfio_open_container_fd(true);
}
/* check if we have VFIO driver enabled */
@@ -1147,49 +1161,6 @@ rte_vfio_is_enabled(const char *modname)
return default_vfio_cfg->vfio_enabled && mod_available;
}
-int
-vfio_get_default_container_fd(void)
-{
- struct rte_mp_msg mp_req, *mp_rep;
- struct rte_mp_reply mp_reply = {0};
- struct timespec ts = {.tv_sec = 5, .tv_nsec = 0};
- struct vfio_mp_param *p = (struct vfio_mp_param *)mp_req.param;
- int container_fd;
- const struct internal_config *internal_conf =
- eal_get_internal_configuration();
-
- if (default_vfio_cfg->vfio_enabled)
- return default_vfio_cfg->vfio_container_fd;
-
- if (internal_conf->process_type == RTE_PROC_PRIMARY) {
- /* if we were secondary process we would try requesting
- * container fd from the primary, but we're the primary
- * process so just exit here
- */
- return -1;
- }
-
- p->req = SOCKET_REQ_DEFAULT_CONTAINER;
- strcpy(mp_req.name, EAL_VFIO_MP);
- mp_req.len_param = sizeof(*p);
- mp_req.num_fds = 0;
-
- if (rte_mp_request_sync(&mp_req, &mp_reply, &ts) == 0 &&
- mp_reply.nb_received == 1) {
- mp_rep = &mp_reply.msgs[0];
- p = (struct vfio_mp_param *)mp_rep->param;
- if (p->result == SOCKET_OK && mp_rep->num_fds == 1) {
- container_fd = mp_rep->fds[0];
- free(mp_reply.msgs);
- return container_fd;
- }
- }
-
- free(mp_reply.msgs);
- RTE_LOG(ERR, EAL, "Cannot request default VFIO container fd\n");
- return -1;
-}
-
int
vfio_get_iommu_type(void)
{
@@ -1255,20 +1226,25 @@ vfio_has_supported_extensions(int vfio_container_fd)
return 0;
}
+/*
+ * Open a new VFIO container fd.
+ *
+ * If mp_request is true, requests a new container fd from the primary process
+ * via mp channel (for secondary processes that need to open the default container).
+ *
+ * Otherwise, opens a new container fd locally by opening /dev/vfio/vfio.
+ */
int
-rte_vfio_get_container_fd(void)
+vfio_open_container_fd(bool mp_request)
{
int ret, vfio_container_fd;
struct rte_mp_msg mp_req, *mp_rep;
struct rte_mp_reply mp_reply = {0};
struct timespec ts = {.tv_sec = 5, .tv_nsec = 0};
struct vfio_mp_param *p = (struct vfio_mp_param *)mp_req.param;
- const struct internal_config *internal_conf =
- eal_get_internal_configuration();
-
- /* if we're in a primary process, try to open the container */
- if (internal_conf->process_type == RTE_PROC_PRIMARY) {
+ /* if not requesting via mp, open a new container locally */
+ if (!mp_request) {
vfio_container_fd = open(VFIO_CONTAINER_PATH, O_RDWR);
if (vfio_container_fd < 0) {
RTE_LOG(ERR, EAL,
@@ -1326,6 +1302,19 @@ rte_vfio_get_container_fd(void)
return -1;
}
+int
+rte_vfio_get_container_fd(void)
+{
+ /* Return the default container fd if VFIO is enabled.
+ * The default container is set up during rte_vfio_enable().
+ * This function does not create a new container.
+ */
+ if (!default_vfio_cfg->vfio_enabled)
+ return -1;
+
+ return default_vfio_cfg->vfio_container_fd;
+}
+
int
rte_vfio_get_group_num(const char *sysfs_base,
const char *dev_addr, int *iommu_group_num)
@@ -2072,7 +2061,8 @@ rte_vfio_container_create(void)
return -1;
}
- vfio_cfgs[i].vfio_container_fd = rte_vfio_get_container_fd();
+ /* Create a new container fd */
+ vfio_cfgs[i].vfio_container_fd = vfio_open_container_fd(false);
if (vfio_cfgs[i].vfio_container_fd < 0) {
RTE_LOG(NOTICE, EAL, "Fail to create a new VFIO container\n");
return -1;
diff --git a/lib/eal/linux/eal_vfio.h b/lib/eal/linux/eal_vfio.h
index bba5c7afa5..3ee4a3fb58 100644
--- a/lib/eal/linux/eal_vfio.h
+++ b/lib/eal/linux/eal_vfio.h
@@ -119,7 +119,7 @@ struct vfio_iommu_type {
};
/* get the vfio container that devices are bound to by default */
-int vfio_get_default_container_fd(void);
+int vfio_open_container_fd(bool mp_request);
/* pick IOMMU type. returns a pointer to vfio_iommu_type or NULL for error */
const struct vfio_iommu_type *
@@ -139,8 +139,7 @@ void vfio_mp_sync_cleanup(void);
#define SOCKET_REQ_CONTAINER 0x100
#define SOCKET_REQ_GROUP 0x200
-#define SOCKET_REQ_DEFAULT_CONTAINER 0x400
-#define SOCKET_REQ_IOMMU_TYPE 0x800
+#define SOCKET_REQ_IOMMU_TYPE 0x400
#define SOCKET_OK 0x0
#define SOCKET_NO_FD 0x1
#define SOCKET_ERR 0xFF
diff --git a/lib/eal/linux/eal_vfio_mp_sync.c b/lib/eal/linux/eal_vfio_mp_sync.c
index 157f20e583..abfd22c12a 100644
--- a/lib/eal/linux/eal_vfio_mp_sync.c
+++ b/lib/eal/linux/eal_vfio_mp_sync.c
@@ -26,7 +26,6 @@ static int
vfio_mp_primary(const struct rte_mp_msg *msg, const void *peer)
{
int fd = -1;
- int ret;
struct rte_mp_msg reply;
struct vfio_mp_param *r = (struct vfio_mp_param *)reply.param;
const struct vfio_mp_param *m =
@@ -67,17 +66,6 @@ vfio_mp_primary(const struct rte_mp_msg *msg, const void *peer)
reply.fds[0] = fd;
}
break;
- case SOCKET_REQ_DEFAULT_CONTAINER:
- r->req = SOCKET_REQ_DEFAULT_CONTAINER;
- fd = vfio_get_default_container_fd();
- if (fd < 0)
- r->result = SOCKET_ERR;
- else {
- r->result = SOCKET_OK;
- reply.num_fds = 1;
- reply.fds[0] = fd;
- }
- break;
case SOCKET_REQ_IOMMU_TYPE:
{
int iommu_type_id;
@@ -102,10 +90,7 @@ vfio_mp_primary(const struct rte_mp_msg *msg, const void *peer)
strcpy(reply.name, EAL_VFIO_MP);
reply.len_param = sizeof(*r);
- ret = rte_mp_reply(&reply, peer);
- if (m->req == SOCKET_REQ_CONTAINER && fd >= 0)
- close(fd);
- return ret;
+ return rte_mp_reply(&reply, peer);
}
int
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-11-12 16:20:41.508558598 +0000
+++ 0014-vfio-fix-custom-containers-in-multiprocess.patch 2025-11-12 16:20:40.895716156 +0000
@@ -1 +1 @@
-From 8a8c02d2bb224ebbe60e8e1ce6edcfb481b46151 Mon Sep 17 00:00:00 2001
+From dc9e9a80570cef84bf1d1283b8491fb31fee0125 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 8a8c02d2bb224ebbe60e8e1ce6edcfb481b46151 ]
+
@@ -44 +45,0 @@
-Cc: stable@dpdk.org
@@ -52 +53 @@
- 4 files changed, 57 insertions(+), 81 deletions(-)
+ 4 files changed, 56 insertions(+), 82 deletions(-)
@@ -55 +56 @@
-index 80951517fa..d1e8bce56b 100644
+index 7bdb8932b2..4c204fba07 100644
@@ -58,2 +59,2 @@
-@@ -192,14 +192,14 @@ rte_vfio_get_device_info(const char *sysfs_base, const char *dev_addr,
- int *vfio_dev_fd, struct vfio_device_info *device_info);
+@@ -214,14 +214,14 @@ rte_vfio_get_group_num(const char *sysfs_base,
+ const char *dev_addr, int *iommu_group_num);
@@ -77 +78 @@
-index 45c1354390..f1050ffa60 100644
+index 549b86ae1d..0bab0dd354 100644
@@ -80 +81 @@
-@@ -351,7 +351,7 @@ compact_user_maps(struct user_mem_maps *user_mem_maps)
+@@ -347,7 +347,7 @@ compact_user_maps(struct user_mem_maps *user_mem_maps)
@@ -89 +90 @@
-@@ -359,11 +359,9 @@ vfio_open_group_fd(int iommu_group_num)
+@@ -355,11 +355,9 @@ vfio_open_group_fd(int iommu_group_num)
@@ -101,3 +102,3 @@
- snprintf(filename, sizeof(filename), RTE_VFIO_GROUP_FMT, iommu_group_num);
- vfio_group_fd = open(filename, O_RDWR);
-@@ -471,7 +469,24 @@ vfio_get_group_fd(struct vfio_config *vfio_cfg,
+ snprintf(filename, sizeof(filename),
+ VFIO_GROUP_FMT, iommu_group_num);
+@@ -469,7 +467,24 @@ vfio_get_group_fd(struct vfio_config *vfio_cfg,
@@ -127 +128 @@
- EAL_LOG(ERR, "Failed to open VFIO group %d",
+ RTE_LOG(ERR, EAL, "Failed to open VFIO group %d\n",
@@ -129,9 +130,9 @@
-@@ -1140,13 +1155,13 @@ rte_vfio_enable(const char *modname)
- if (vfio_mp_sync_setup() == -1) {
- default_vfio_cfg->vfio_container_fd = -1;
- } else {
-- /* open a new container */
-- default_vfio_cfg->vfio_container_fd = rte_vfio_get_container_fd();
-+ /* open a default container */
-+ default_vfio_cfg->vfio_container_fd = vfio_open_container_fd(false);
- }
+@@ -1120,13 +1135,12 @@ rte_vfio_enable(const char *modname)
+ }
+
+ if (internal_conf->process_type == RTE_PROC_PRIMARY) {
+- /* open a new container */
+- default_vfio_cfg->vfio_container_fd =
+- rte_vfio_get_container_fd();
++ /* open a default container */
++ default_vfio_cfg->vfio_container_fd = vfio_open_container_fd(false);
@@ -146 +147 @@
-@@ -1168,49 +1183,6 @@ rte_vfio_is_enabled(const char *modname)
+@@ -1147,49 +1161,6 @@ rte_vfio_is_enabled(const char *modname)
@@ -189 +190 @@
-- EAL_LOG(ERR, "Cannot request default VFIO container fd");
+- RTE_LOG(ERR, EAL, "Cannot request default VFIO container fd\n");
@@ -196 +197 @@
-@@ -1303,20 +1275,25 @@ vfio_has_supported_extensions(int vfio_container_fd)
+@@ -1255,20 +1226,25 @@ vfio_has_supported_extensions(int vfio_container_fd)
@@ -200 +200,0 @@
--RTE_EXPORT_SYMBOL(rte_vfio_get_container_fd)
@@ -220,0 +221 @@
+-
@@ -225 +226 @@
- vfio_container_fd = open(RTE_VFIO_CONTAINER_PATH, O_RDWR);
+ vfio_container_fd = open(VFIO_CONTAINER_PATH, O_RDWR);
@@ -227,2 +228,2 @@
- EAL_LOG(ERR, "Cannot open VFIO container %s, error %i (%s)",
-@@ -1372,6 +1349,20 @@ rte_vfio_get_container_fd(void)
+ RTE_LOG(ERR, EAL,
+@@ -1326,6 +1302,19 @@ rte_vfio_get_container_fd(void)
@@ -232 +232,0 @@
-+RTE_EXPORT_SYMBOL(rte_vfio_get_container_fd)
@@ -246 +245,0 @@
- RTE_EXPORT_SYMBOL(rte_vfio_get_group_num)
@@ -249 +248,2 @@
-@@ -2093,7 +2084,8 @@ rte_vfio_container_create(void)
+ const char *dev_addr, int *iommu_group_num)
+@@ -2072,7 +2061,8 @@ rte_vfio_container_create(void)
@@ -257 +257 @@
- EAL_LOG(NOTICE, "Fail to create a new VFIO container");
+ RTE_LOG(NOTICE, EAL, "Fail to create a new VFIO container\n");
@@ -260 +260 @@
-index 5c5742b429..89c4b5ba45 100644
+index bba5c7afa5..3ee4a3fb58 100644
@@ -263 +263 @@
-@@ -42,7 +42,7 @@ struct vfio_iommu_type {
+@@ -119,7 +119,7 @@ struct vfio_iommu_type {
@@ -272 +272 @@
-@@ -62,8 +62,7 @@ void vfio_mp_sync_cleanup(void);
+@@ -139,8 +139,7 @@ void vfio_mp_sync_cleanup(void);
@@ -283 +283 @@
-index 8230f3d24d..22136f2e8b 100644
+index 157f20e583..abfd22c12a 100644
@@ -286 +286 @@
-@@ -18,7 +18,6 @@ static int
+@@ -26,7 +26,6 @@ static int
@@ -294 +294 @@
-@@ -59,17 +58,6 @@ vfio_mp_primary(const struct rte_mp_msg *msg, const void *peer)
+@@ -67,17 +66,6 @@ vfio_mp_primary(const struct rte_mp_msg *msg, const void *peer)
@@ -312 +312 @@
-@@ -94,10 +82,7 @@ vfio_mp_primary(const struct rte_mp_msg *msg, const void *peer)
+@@ -102,10 +90,7 @@ vfio_mp_primary(const struct rte_mp_msg *msg, const void *peer)
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/vmxnet3: disable RSS for single queue for ESX8.0+' has been queued to stable release 22.11.11
2025-11-12 16:52 ` patch 'test/hash: check memory allocation' " luca.boccassi
` (12 preceding siblings ...)
2025-11-12 16:52 ` patch 'vfio: fix custom containers in multiprocess' " luca.boccassi
@ 2025-11-12 16:52 ` luca.boccassi
2025-11-12 16:52 ` patch 'net/dpaa: fix resource leak' " luca.boccassi
` (33 subsequent siblings)
47 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-11-12 16:52 UTC (permalink / raw)
To: Amiya Ranjan Mohakud; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
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/14/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/23de7a32a3774a5e8e1e4fd314193d03377512f1
Thanks.
Luca Boccassi
---
From 23de7a32a3774a5e8e1e4fd314193d03377512f1 Mon Sep 17 00:00:00 2001
From: Amiya Ranjan Mohakud <amiyaranjan.mohakud@gmail.com>
Date: Thu, 23 Oct 2025 14:00:19 +0530
Subject: [PATCH] net/vmxnet3: disable RSS for single queue for ESX8.0+
[ upstream commit 9a219380b148c1837e54eb15cff501cba1ba842a ]
This fixes the issue of v4 RSS configuration failure in
vmxnet3_v4_rss_configure() while writing to BAR register.
It's very specific to single queue configuration.
https://mails.dpdk.org/archives/users/2025-April/008236.html
Bugzilla ID: 1789
Fixes: 52ec00fd1474e8 ("net/vmxnet3: fix RSS setting on v4")
Signed-off-by: Amiya Ranjan Mohakud <amiyaranjan.mohakud@gmail.com>
---
drivers/net/vmxnet3/vmxnet3_ethdev.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/drivers/net/vmxnet3/vmxnet3_ethdev.c b/drivers/net/vmxnet3/vmxnet3_ethdev.c
index eadfd6f230..59763fdc31 100644
--- a/drivers/net/vmxnet3/vmxnet3_ethdev.c
+++ b/drivers/net/vmxnet3/vmxnet3_ethdev.c
@@ -534,6 +534,13 @@ vmxnet3_dev_configure(struct rte_eth_dev *dev)
PMD_INIT_FUNC_TRACE();
+ /* Disabling RSS for single queue pair */
+ if (dev->data->nb_rx_queues == 1 &&
+ dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS) {
+ dev->data->dev_conf.rxmode.mq_mode = RTE_ETH_MQ_RX_NONE;
+ PMD_INIT_LOG(ERR, "WARN: Disabling RSS for single Rx queue");
+ }
+
if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
dev->data->dev_conf.rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-11-12 16:20:41.542609485 +0000
+++ 0015-net-vmxnet3-disable-RSS-for-single-queue-for-ESX8.0.patch 2025-11-12 16:20:40.895716156 +0000
@@ -1 +1 @@
-From 9a219380b148c1837e54eb15cff501cba1ba842a Mon Sep 17 00:00:00 2001
+From 23de7a32a3774a5e8e1e4fd314193d03377512f1 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 9a219380b148c1837e54eb15cff501cba1ba842a ]
+
@@ -14 +15,0 @@
-Cc: stable@dpdk.org
@@ -22 +23 @@
-index b0c19c5c7c..da9af08207 100644
+index eadfd6f230..59763fdc31 100644
@@ -25 +26 @@
-@@ -611,6 +611,13 @@ vmxnet3_dev_configure(struct rte_eth_dev *dev)
+@@ -534,6 +534,13 @@ vmxnet3_dev_configure(struct rte_eth_dev *dev)
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/dpaa: fix resource leak' has been queued to stable release 22.11.11
2025-11-12 16:52 ` patch 'test/hash: check memory allocation' " luca.boccassi
` (13 preceding siblings ...)
2025-11-12 16:52 ` patch 'net/vmxnet3: disable RSS for single queue for ESX8.0+' " luca.boccassi
@ 2025-11-12 16:52 ` luca.boccassi
2025-11-12 16:52 ` patch 'net/txgbe: reduce memory size of ring descriptors' " luca.boccassi
` (32 subsequent siblings)
47 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-11-12 16:52 UTC (permalink / raw)
To: Vanshika Shukla; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
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/14/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/a97f1d45efd3e0de4e092fc6cd8e1c408d2ed92a
Thanks.
Luca Boccassi
---
From a97f1d45efd3e0de4e092fc6cd8e1c408d2ed92a Mon Sep 17 00:00:00 2001
From: Vanshika Shukla <vanshika.shukla@nxp.com>
Date: Fri, 24 Oct 2025 11:49:06 +0530
Subject: [PATCH] net/dpaa: fix resource leak
[ upstream commit e7665de896836e99866ef8016bbaa12223e1cfb7 ]
This patch correct the cleanup order of PCD and
FMan handles to prevent resource leaks reported by
coverity tool.
Coverity issue: 362787
Fixes: 4defbc8cbb6d ("net/dpaa: support FMCless mode")
Signed-off-by: Vanshika Shukla <vanshika.shukla@nxp.com>
---
drivers/net/dpaa/dpaa_flow.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/net/dpaa/dpaa_flow.c b/drivers/net/dpaa/dpaa_flow.c
index 690ba6bcb3..4ce8e88d66 100644
--- a/drivers/net/dpaa/dpaa_flow.c
+++ b/drivers/net/dpaa/dpaa_flow.c
@@ -1,5 +1,5 @@
/* SPDX-License-Identifier: BSD-3-Clause
- * Copyright 2017-2019,2021 NXP
+ * Copyright 2017-2019,2021-2025 NXP
*/
/* System headers */
@@ -889,9 +889,9 @@ int dpaa_fm_init(void)
/* FM PCD Enable */
ret = fm_pcd_enable(pcd_handle);
if (ret) {
- fm_close(fman_handle);
- fm_pcd_close(pcd_handle);
DPAA_PMD_ERR("fm_pcd_enable: Failed");
+ fm_pcd_close(pcd_handle);
+ fm_close(fman_handle);
return -1;
}
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-11-12 16:20:41.577371001 +0000
+++ 0016-net-dpaa-fix-resource-leak.patch 2025-11-12 16:20:40.899716256 +0000
@@ -1 +1 @@
-From e7665de896836e99866ef8016bbaa12223e1cfb7 Mon Sep 17 00:00:00 2001
+From a97f1d45efd3e0de4e092fc6cd8e1c408d2ed92a Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit e7665de896836e99866ef8016bbaa12223e1cfb7 ]
+
@@ -12 +13,0 @@
-Cc: stable@dpdk.org
@@ -20 +21 @@
-index 2a22b23c8f..417b9b6fbb 100644
+index 690ba6bcb3..4ce8e88d66 100644
@@ -25 +26 @@
-- * Copyright 2017-2019,2021-2024 NXP
+- * Copyright 2017-2019,2021 NXP
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/txgbe: reduce memory size of ring descriptors' has been queued to stable release 22.11.11
2025-11-12 16:52 ` patch 'test/hash: check memory allocation' " luca.boccassi
` (14 preceding siblings ...)
2025-11-12 16:52 ` patch 'net/dpaa: fix resource leak' " luca.boccassi
@ 2025-11-12 16:52 ` luca.boccassi
2025-11-12 16:52 ` patch 'net/ngbe: " luca.boccassi
` (31 subsequent siblings)
47 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-11-12 16:52 UTC (permalink / raw)
To: Jiawen Wu; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
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/14/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/2a9e0fee2c790e0be322edf404d141eec6d54251
Thanks.
Luca Boccassi
---
From 2a9e0fee2c790e0be322edf404d141eec6d54251 Mon Sep 17 00:00:00 2001
From: Jiawen Wu <jiawenwu@trustnetic.com>
Date: Mon, 27 Oct 2025 11:15:26 +0800
Subject: [PATCH] net/txgbe: reduce memory size of ring descriptors
[ upstream commit 843c59d1c2cef10a75037ebc73460f2ed28f9839 ]
The memory of ring descriptors was allocated in size of the maximum ring
size. It seems not friendly to our hardware on some domestic platforms.
Change it to allocate in size of the real ring size.
Fixes: 226bf98eda87 ("net/txgbe: add Rx and Tx queues setup and release")
Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
---
drivers/net/txgbe/txgbe_rxtx.c | 20 +++++++-------------
1 file changed, 7 insertions(+), 13 deletions(-)
diff --git a/drivers/net/txgbe/txgbe_rxtx.c b/drivers/net/txgbe/txgbe_rxtx.c
index 5074587e14..f2a7fcf313 100644
--- a/drivers/net/txgbe/txgbe_rxtx.c
+++ b/drivers/net/txgbe/txgbe_rxtx.c
@@ -2335,13 +2335,9 @@ txgbe_dev_tx_queue_setup(struct rte_eth_dev *dev,
if (txq == NULL)
return -ENOMEM;
- /*
- * Allocate TX ring hardware descriptors. A memzone large enough to
- * handle the maximum ring size is allocated in order to allow for
- * resizing in later calls to the queue setup function.
- */
+ /* Allocate TX ring hardware descriptors. */
tz = rte_eth_dma_zone_reserve(dev, "tx_ring", queue_idx,
- sizeof(struct txgbe_tx_desc) * TXGBE_RING_DESC_MAX,
+ sizeof(struct txgbe_tx_desc) * nb_desc,
TXGBE_ALIGN, socket_id);
if (tz == NULL) {
txgbe_tx_queue_release(txq);
@@ -2579,6 +2575,7 @@ txgbe_dev_rx_queue_setup(struct rte_eth_dev *dev,
uint16_t len;
struct txgbe_adapter *adapter = TXGBE_DEV_ADAPTER(dev);
uint64_t offloads;
+ uint32_t size;
PMD_INIT_FUNC_TRACE();
hw = TXGBE_DEV_HW(dev);
@@ -2629,13 +2626,10 @@ txgbe_dev_rx_queue_setup(struct rte_eth_dev *dev,
*/
rxq->pkt_type_mask = TXGBE_PTID_MASK;
- /*
- * Allocate RX ring hardware descriptors. A memzone large enough to
- * handle the maximum ring size is allocated in order to allow for
- * resizing in later calls to the queue setup function.
- */
+ /* Allocate RX ring hardware descriptors. */
+ size = (nb_desc + RTE_PMD_TXGBE_RX_MAX_BURST) * sizeof(struct txgbe_rx_desc);
rz = rte_eth_dma_zone_reserve(dev, "rx_ring", queue_idx,
- RX_RING_SZ, TXGBE_ALIGN, socket_id);
+ size, TXGBE_ALIGN, socket_id);
if (rz == NULL) {
txgbe_rx_queue_release(rxq);
return -ENOMEM;
@@ -2645,7 +2639,7 @@ txgbe_dev_rx_queue_setup(struct rte_eth_dev *dev,
/*
* Zero init all the descriptors in the ring.
*/
- memset(rz->addr, 0, RX_RING_SZ);
+ memset(rz->addr, 0, size);
/*
* Modified to setup VFRDT for Virtual Function
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-11-12 16:20:41.608163882 +0000
+++ 0017-net-txgbe-reduce-memory-size-of-ring-descriptors.patch 2025-11-12 16:20:40.899716256 +0000
@@ -1 +1 @@
-From 843c59d1c2cef10a75037ebc73460f2ed28f9839 Mon Sep 17 00:00:00 2001
+From 2a9e0fee2c790e0be322edf404d141eec6d54251 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 843c59d1c2cef10a75037ebc73460f2ed28f9839 ]
+
@@ -11 +12,0 @@
-Cc: stable@dpdk.org
@@ -19 +20 @@
-index c606180741..d77db1efa2 100644
+index 5074587e14..f2a7fcf313 100644
@@ -22 +23 @@
-@@ -2521,13 +2521,9 @@ txgbe_dev_tx_queue_setup(struct rte_eth_dev *dev,
+@@ -2335,13 +2335,9 @@ txgbe_dev_tx_queue_setup(struct rte_eth_dev *dev,
@@ -38 +39 @@
-@@ -2781,6 +2777,7 @@ txgbe_dev_rx_queue_setup(struct rte_eth_dev *dev,
+@@ -2579,6 +2575,7 @@ txgbe_dev_rx_queue_setup(struct rte_eth_dev *dev,
@@ -46 +47 @@
-@@ -2831,13 +2828,10 @@ txgbe_dev_rx_queue_setup(struct rte_eth_dev *dev,
+@@ -2629,13 +2626,10 @@ txgbe_dev_rx_queue_setup(struct rte_eth_dev *dev,
@@ -63 +64 @@
-@@ -2847,7 +2841,7 @@ txgbe_dev_rx_queue_setup(struct rte_eth_dev *dev,
+@@ -2645,7 +2639,7 @@ txgbe_dev_rx_queue_setup(struct rte_eth_dev *dev,
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/ngbe: reduce memory size of ring descriptors' has been queued to stable release 22.11.11
2025-11-12 16:52 ` patch 'test/hash: check memory allocation' " luca.boccassi
` (15 preceding siblings ...)
2025-11-12 16:52 ` patch 'net/txgbe: reduce memory size of ring descriptors' " luca.boccassi
@ 2025-11-12 16:52 ` luca.boccassi
2025-11-12 16:52 ` patch 'net/txgbe: fix VF Rx buffer size in config register' " luca.boccassi
` (30 subsequent siblings)
47 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-11-12 16:52 UTC (permalink / raw)
To: Jiawen Wu; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
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/14/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/c660b80d3906293812390a644fdcee8363f92c09
Thanks.
Luca Boccassi
---
From c660b80d3906293812390a644fdcee8363f92c09 Mon Sep 17 00:00:00 2001
From: Jiawen Wu <jiawenwu@trustnetic.com>
Date: Mon, 27 Oct 2025 11:15:27 +0800
Subject: [PATCH] net/ngbe: reduce memory size of ring descriptors
[ upstream commit 22d4fffbbc99ef2a229869e717a12b2e33c68a9c ]
The memory of ring descriptors was allocated in size of the maximum ring
size. It seems not friendly to our hardware on some domestic platforms.
Change it to allocate in size of the real ring size.
Fixes: 43b7e5ea60ac ("net/ngbe: support Rx queue setup/release")
Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
---
drivers/net/ngbe/ngbe_rxtx.c | 20 +++++++-------------
1 file changed, 7 insertions(+), 13 deletions(-)
diff --git a/drivers/net/ngbe/ngbe_rxtx.c b/drivers/net/ngbe/ngbe_rxtx.c
index 8490b08318..2aaa3c878a 100644
--- a/drivers/net/ngbe/ngbe_rxtx.c
+++ b/drivers/net/ngbe/ngbe_rxtx.c
@@ -1983,13 +1983,9 @@ ngbe_dev_tx_queue_setup(struct rte_eth_dev *dev,
if (txq == NULL)
return -ENOMEM;
- /*
- * Allocate Tx ring hardware descriptors. A memzone large enough to
- * handle the maximum ring size is allocated in order to allow for
- * resizing in later calls to the queue setup function.
- */
+ /* Allocate Tx ring hardware descriptors. */
tz = rte_eth_dma_zone_reserve(dev, "tx_ring", queue_idx,
- sizeof(struct ngbe_tx_desc) * NGBE_RING_DESC_MAX,
+ sizeof(struct ngbe_tx_desc) * nb_desc,
NGBE_ALIGN, socket_id);
if (tz == NULL) {
ngbe_tx_queue_release(txq);
@@ -2236,6 +2232,7 @@ ngbe_dev_rx_queue_setup(struct rte_eth_dev *dev,
uint16_t len;
struct ngbe_adapter *adapter = ngbe_dev_adapter(dev);
uint64_t offloads;
+ uint32_t size;
PMD_INIT_FUNC_TRACE();
hw = ngbe_dev_hw(dev);
@@ -2269,13 +2266,10 @@ ngbe_dev_rx_queue_setup(struct rte_eth_dev *dev,
rxq->rx_deferred_start = rx_conf->rx_deferred_start;
rxq->offloads = offloads;
- /*
- * Allocate Rx ring hardware descriptors. A memzone large enough to
- * handle the maximum ring size is allocated in order to allow for
- * resizing in later calls to the queue setup function.
- */
+ /* Allocate Rx ring hardware descriptors. */
+ size = (nb_desc + RTE_PMD_NGBE_RX_MAX_BURST) * sizeof(struct ngbe_rx_desc);
rz = rte_eth_dma_zone_reserve(dev, "rx_ring", queue_idx,
- RX_RING_SZ, NGBE_ALIGN, socket_id);
+ size, NGBE_ALIGN, socket_id);
if (rz == NULL) {
ngbe_rx_queue_release(rxq);
return -ENOMEM;
@@ -2285,7 +2279,7 @@ ngbe_dev_rx_queue_setup(struct rte_eth_dev *dev,
/*
* Zero init all the descriptors in the ring.
*/
- memset(rz->addr, 0, RX_RING_SZ);
+ memset(rz->addr, 0, size);
rxq->rdt_reg_addr = NGBE_REG_ADDR(hw, NGBE_RXWP(rxq->reg_idx));
rxq->rdh_reg_addr = NGBE_REG_ADDR(hw, NGBE_RXRP(rxq->reg_idx));
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-11-12 16:20:41.645754471 +0000
+++ 0018-net-ngbe-reduce-memory-size-of-ring-descriptors.patch 2025-11-12 16:20:40.903716354 +0000
@@ -1 +1 @@
-From 22d4fffbbc99ef2a229869e717a12b2e33c68a9c Mon Sep 17 00:00:00 2001
+From c660b80d3906293812390a644fdcee8363f92c09 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 22d4fffbbc99ef2a229869e717a12b2e33c68a9c ]
+
@@ -11 +12,0 @@
-Cc: stable@dpdk.org
@@ -19 +20 @@
-index a60421293b..03ada844bf 100644
+index 8490b08318..2aaa3c878a 100644
@@ -22 +23 @@
-@@ -2058,13 +2058,9 @@ ngbe_dev_tx_queue_setup(struct rte_eth_dev *dev,
+@@ -1983,13 +1983,9 @@ ngbe_dev_tx_queue_setup(struct rte_eth_dev *dev,
@@ -38 +39 @@
-@@ -2324,6 +2320,7 @@ ngbe_dev_rx_queue_setup(struct rte_eth_dev *dev,
+@@ -2236,6 +2232,7 @@ ngbe_dev_rx_queue_setup(struct rte_eth_dev *dev,
@@ -46 +47 @@
-@@ -2357,13 +2354,10 @@ ngbe_dev_rx_queue_setup(struct rte_eth_dev *dev,
+@@ -2269,13 +2266,10 @@ ngbe_dev_rx_queue_setup(struct rte_eth_dev *dev,
@@ -63 +64 @@
-@@ -2373,7 +2367,7 @@ ngbe_dev_rx_queue_setup(struct rte_eth_dev *dev,
+@@ -2285,7 +2279,7 @@ ngbe_dev_rx_queue_setup(struct rte_eth_dev *dev,
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/txgbe: fix VF Rx buffer size in config register' has been queued to stable release 22.11.11
2025-11-12 16:52 ` patch 'test/hash: check memory allocation' " luca.boccassi
` (16 preceding siblings ...)
2025-11-12 16:52 ` patch 'net/ngbe: " luca.boccassi
@ 2025-11-12 16:52 ` luca.boccassi
2025-11-12 16:52 ` patch 'net/txgbe: add device arguments for FDIR' " luca.boccassi
` (29 subsequent siblings)
47 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-11-12 16:52 UTC (permalink / raw)
To: Jiawen Wu; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
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/14/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/454181cdc418b0df140c966daf12fd0b3d4a02f9
Thanks.
Luca Boccassi
---
From 454181cdc418b0df140c966daf12fd0b3d4a02f9 Mon Sep 17 00:00:00 2001
From: Jiawen Wu <jiawenwu@trustnetic.com>
Date: Mon, 27 Oct 2025 11:15:28 +0800
Subject: [PATCH] net/txgbe: fix VF Rx buffer size in config register
[ upstream commit ee2bc2d16c6d1c59d8f5eae16a874866e3a60de7 ]
Refer to commit 8a3ef4b89e6d ("net/txgbe: fix Rx buffer size in
config register").
When round up buffer size to 1K, to configure the register, hardware
will receive packets exceeding the buffer size in LRO mode. It will
cause a segment fault in the receive function.
Fixes: 92144bb36c6f ("net/txgbe: support VF Rx/Tx")
Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
---
drivers/net/txgbe/txgbe_rxtx.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/txgbe/txgbe_rxtx.c b/drivers/net/txgbe/txgbe_rxtx.c
index f2a7fcf313..a7ab70b4cf 100644
--- a/drivers/net/txgbe/txgbe_rxtx.c
+++ b/drivers/net/txgbe/txgbe_rxtx.c
@@ -4910,7 +4910,7 @@ txgbevf_dev_rx_init(struct rte_eth_dev *dev)
*/
buf_size = (uint16_t)(rte_pktmbuf_data_room_size(rxq->mb_pool) -
RTE_PKTMBUF_HEADROOM);
- buf_size = ROUND_UP(buf_size, 1 << 10);
+ buf_size = ROUND_DOWN(buf_size, 1 << 10);
srrctl |= TXGBE_RXCFG_PKTLEN(buf_size);
/*
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-11-12 16:20:41.680841126 +0000
+++ 0019-net-txgbe-fix-VF-Rx-buffer-size-in-config-register.patch 2025-11-12 16:20:40.907716452 +0000
@@ -1 +1 @@
-From ee2bc2d16c6d1c59d8f5eae16a874866e3a60de7 Mon Sep 17 00:00:00 2001
+From 454181cdc418b0df140c966daf12fd0b3d4a02f9 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit ee2bc2d16c6d1c59d8f5eae16a874866e3a60de7 ]
+
@@ -14 +15,0 @@
-Cc: stable@dpdk.org
@@ -22 +23 @@
-index d77db1efa2..a3472bcf34 100644
+index f2a7fcf313..a7ab70b4cf 100644
@@ -25 +26 @@
-@@ -5256,7 +5256,7 @@ txgbevf_dev_rx_init(struct rte_eth_dev *dev)
+@@ -4910,7 +4910,7 @@ txgbevf_dev_rx_init(struct rte_eth_dev *dev)
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/txgbe: add device arguments for FDIR' has been queued to stable release 22.11.11
2025-11-12 16:52 ` patch 'test/hash: check memory allocation' " luca.boccassi
` (17 preceding siblings ...)
2025-11-12 16:52 ` patch 'net/txgbe: fix VF Rx buffer size in config register' " luca.boccassi
@ 2025-11-12 16:52 ` luca.boccassi
2025-11-12 16:52 ` patch 'net/txgbe: fix maximum number of FDIR filters' " luca.boccassi
` (28 subsequent siblings)
47 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-11-12 16:52 UTC (permalink / raw)
To: Jiawen Wu; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
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/14/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/207a4daea36aacb0be5a2c770393d12e490253c5
Thanks.
Luca Boccassi
---
From 207a4daea36aacb0be5a2c770393d12e490253c5 Mon Sep 17 00:00:00 2001
From: Jiawen Wu <jiawenwu@trustnetic.com>
Date: Mon, 27 Oct 2025 11:15:31 +0800
Subject: [PATCH] net/txgbe: add device arguments for FDIR
[ upstream commit 7e18be9beef25ee60f9c04f757cb4361706ff818 ]
Since FDIR configuration is deprecated in generic ethdev device
configuration and move it into the device private data, there is no way
to configure the FDIR parameters.
Two device arguments "pkt-filter-size" and "pkt-filter-drop-queue" are
added, they just continue to use the previous naming convention.
Fixes: 5007ac13189d ("ethdev: remove deprecated Flow Director configuration")
Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
---
drivers/net/txgbe/base/txgbe_type.h | 4 ++++
drivers/net/txgbe/txgbe_ethdev.c | 22 +++++++++++++++++++---
2 files changed, 23 insertions(+), 3 deletions(-)
diff --git a/drivers/net/txgbe/base/txgbe_type.h b/drivers/net/txgbe/base/txgbe_type.h
index 3479639ec4..d39894c953 100644
--- a/drivers/net/txgbe/base/txgbe_type.h
+++ b/drivers/net/txgbe/base/txgbe_type.h
@@ -699,6 +699,8 @@ struct txgbe_phy_info {
#define TXGBE_DEVARG_FFE_MAIN "ffe_main"
#define TXGBE_DEVARG_FFE_PRE "ffe_pre"
#define TXGBE_DEVARG_FFE_POST "ffe_post"
+#define TXGBE_DEVARG_FDIR_PBALLOC "pkt-filter-size"
+#define TXGBE_DEVARG_FDIR_DROP_QUEUE "pkt-filter-drop-queue"
static const char * const txgbe_valid_arguments[] = {
TXGBE_DEVARG_BP_AUTO,
@@ -709,6 +711,8 @@ static const char * const txgbe_valid_arguments[] = {
TXGBE_DEVARG_FFE_MAIN,
TXGBE_DEVARG_FFE_PRE,
TXGBE_DEVARG_FFE_POST,
+ TXGBE_DEVARG_FDIR_PBALLOC,
+ TXGBE_DEVARG_FDIR_DROP_QUEUE,
NULL
};
diff --git a/drivers/net/txgbe/txgbe_ethdev.c b/drivers/net/txgbe/txgbe_ethdev.c
index 3dfb510619..0213159954 100644
--- a/drivers/net/txgbe/txgbe_ethdev.c
+++ b/drivers/net/txgbe/txgbe_ethdev.c
@@ -496,8 +496,12 @@ txgbe_handle_devarg(__rte_unused const char *key, const char *value,
}
static void
-txgbe_parse_devargs(struct txgbe_hw *hw, struct rte_devargs *devargs)
+txgbe_parse_devargs(struct rte_eth_dev *dev)
{
+ struct rte_eth_fdir_conf *fdir_conf = TXGBE_DEV_FDIR_CONF(dev);
+ struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(dev);
+ struct rte_devargs *devargs = pci_dev->device.devargs;
+ struct txgbe_hw *hw = TXGBE_DEV_HW(dev);
struct rte_kvargs *kvlist;
u16 auto_neg = 1;
u16 poll = 0;
@@ -507,6 +511,9 @@ txgbe_parse_devargs(struct txgbe_hw *hw, struct rte_devargs *devargs)
u16 ffe_main = 27;
u16 ffe_pre = 8;
u16 ffe_post = 44;
+ /* FDIR args */
+ u8 pballoc = 0;
+ u8 drop_queue = 127;
if (devargs == NULL)
goto null;
@@ -531,6 +538,10 @@ txgbe_parse_devargs(struct txgbe_hw *hw, struct rte_devargs *devargs)
&txgbe_handle_devarg, &ffe_pre);
rte_kvargs_process(kvlist, TXGBE_DEVARG_FFE_POST,
&txgbe_handle_devarg, &ffe_post);
+ rte_kvargs_process(kvlist, TXGBE_DEVARG_FDIR_PBALLOC,
+ &txgbe_handle_devarg, &pballoc);
+ rte_kvargs_process(kvlist, TXGBE_DEVARG_FDIR_DROP_QUEUE,
+ &txgbe_handle_devarg, &drop_queue);
rte_kvargs_free(kvlist);
null:
@@ -542,6 +553,9 @@ null:
hw->phy.ffe_main = ffe_main;
hw->phy.ffe_pre = ffe_pre;
hw->phy.ffe_post = ffe_post;
+
+ fdir_conf->pballoc = pballoc;
+ fdir_conf->drop_queue = drop_queue;
}
static int
@@ -629,7 +643,7 @@ eth_txgbe_dev_init(struct rte_eth_dev *eth_dev, void *init_params __rte_unused)
hw->isb_dma = TMZ_PADDR(mz);
hw->isb_mem = TMZ_VADDR(mz);
- txgbe_parse_devargs(hw, pci_dev->device.devargs);
+ txgbe_parse_devargs(eth_dev);
/* Initialize the shared code (base driver) */
err = txgbe_init_shared_code(hw);
if (err != 0) {
@@ -5498,7 +5512,9 @@ RTE_PMD_REGISTER_PARAM_STRING(net_txgbe,
TXGBE_DEVARG_FFE_SET "=<0-4>"
TXGBE_DEVARG_FFE_MAIN "=<uint16>"
TXGBE_DEVARG_FFE_PRE "=<uint16>"
- TXGBE_DEVARG_FFE_POST "=<uint16>");
+ TXGBE_DEVARG_FFE_POST "=<uint16>"
+ TXGBE_DEVARG_FDIR_PBALLOC "=<0|1|2>"
+ TXGBE_DEVARG_FDIR_DROP_QUEUE "=<uint8>");
RTE_LOG_REGISTER_SUFFIX(txgbe_logtype_init, init, NOTICE);
RTE_LOG_REGISTER_SUFFIX(txgbe_logtype_driver, driver, NOTICE);
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-11-12 16:20:41.716817059 +0000
+++ 0020-net-txgbe-add-device-arguments-for-FDIR.patch 2025-11-12 16:20:40.907716452 +0000
@@ -1 +1 @@
-From 7e18be9beef25ee60f9c04f757cb4361706ff818 Mon Sep 17 00:00:00 2001
+From 207a4daea36aacb0be5a2c770393d12e490253c5 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 7e18be9beef25ee60f9c04f757cb4361706ff818 ]
+
@@ -14 +15,0 @@
-Cc: stable@dpdk.org
@@ -19,2 +20,2 @@
- drivers/net/txgbe/txgbe_ethdev.c | 20 ++++++++++++++++++--
- 2 files changed, 22 insertions(+), 2 deletions(-)
+ drivers/net/txgbe/txgbe_ethdev.c | 22 +++++++++++++++++++---
+ 2 files changed, 23 insertions(+), 3 deletions(-)
@@ -23 +24 @@
-index 07b443c2e0..b5dbc9b755 100644
+index 3479639ec4..d39894c953 100644
@@ -26 +27 @@
-@@ -743,6 +743,8 @@ struct txgbe_phy_info {
+@@ -699,6 +699,8 @@ struct txgbe_phy_info {
@@ -32,4 +33,4 @@
- #define TXGBE_DEVARG_TX_HEAD_WB "tx_headwb"
- #define TXGBE_DEVARG_TX_HEAD_WB_SIZE "tx_headwb_size"
- #define TXGBE_DEVARG_RX_DESC_MERGE "rx_desc_merge"
-@@ -756,6 +758,8 @@ static const char * const txgbe_valid_arguments[] = {
+
+ static const char * const txgbe_valid_arguments[] = {
+ TXGBE_DEVARG_BP_AUTO,
+@@ -709,6 +711,8 @@ static const char * const txgbe_valid_arguments[] = {
@@ -41,3 +42,3 @@
- TXGBE_DEVARG_TX_HEAD_WB,
- TXGBE_DEVARG_TX_HEAD_WB_SIZE,
- TXGBE_DEVARG_RX_DESC_MERGE,
+ NULL
+ };
+
@@ -45 +46 @@
-index cbb2ea815f..e9bbf8ea72 100644
+index 3dfb510619..0213159954 100644
@@ -48 +49 @@
-@@ -524,8 +524,12 @@ txgbe_handle_devarg(__rte_unused const char *key, const char *value,
+@@ -496,8 +496,12 @@ txgbe_handle_devarg(__rte_unused const char *key, const char *value,
@@ -62 +63 @@
-@@ -535,6 +539,9 @@ txgbe_parse_devargs(struct txgbe_hw *hw, struct rte_devargs *devargs)
+@@ -507,6 +511,9 @@ txgbe_parse_devargs(struct txgbe_hw *hw, struct rte_devargs *devargs)
@@ -69,4 +70,4 @@
- /* New devargs for amberlite config */
- u16 tx_headwb = 1;
- u16 tx_headwb_size = 16;
-@@ -563,6 +570,10 @@ txgbe_parse_devargs(struct txgbe_hw *hw, struct rte_devargs *devargs)
+
+ if (devargs == NULL)
+ goto null;
+@@ -531,6 +538,10 @@ txgbe_parse_devargs(struct txgbe_hw *hw, struct rte_devargs *devargs)
@@ -80,4 +81,4 @@
- rte_kvargs_process(kvlist, TXGBE_DEVARG_TX_HEAD_WB,
- &txgbe_handle_devarg, &tx_headwb);
- rte_kvargs_process(kvlist, TXGBE_DEVARG_TX_HEAD_WB_SIZE,
-@@ -583,6 +594,9 @@ null:
+ rte_kvargs_free(kvlist);
+
+ null:
+@@ -542,6 +553,9 @@ null:
@@ -93 +94 @@
-@@ -671,7 +685,7 @@ eth_txgbe_dev_init(struct rte_eth_dev *eth_dev, void *init_params __rte_unused)
+@@ -629,7 +643,7 @@ eth_txgbe_dev_init(struct rte_eth_dev *eth_dev, void *init_params __rte_unused)
@@ -102 +103,2 @@
-@@ -6034,6 +6048,8 @@ RTE_PMD_REGISTER_PARAM_STRING(net_txgbe,
+@@ -5498,7 +5512,9 @@ RTE_PMD_REGISTER_PARAM_STRING(net_txgbe,
+ TXGBE_DEVARG_FFE_SET "=<0-4>"
@@ -105 +107,2 @@
- TXGBE_DEVARG_FFE_POST "=<uint16>"
+- TXGBE_DEVARG_FFE_POST "=<uint16>");
++ TXGBE_DEVARG_FFE_POST "=<uint16>"
@@ -107,4 +110,4 @@
-+ TXGBE_DEVARG_FDIR_DROP_QUEUE "=<uint8>"
- TXGBE_DEVARG_TX_HEAD_WB "=<0|1>"
- TXGBE_DEVARG_TX_HEAD_WB_SIZE "=<1|16>"
- TXGBE_DEVARG_RX_DESC_MERGE "=<0|1>");
++ TXGBE_DEVARG_FDIR_DROP_QUEUE "=<uint8>");
+
+ RTE_LOG_REGISTER_SUFFIX(txgbe_logtype_init, init, NOTICE);
+ RTE_LOG_REGISTER_SUFFIX(txgbe_logtype_driver, driver, NOTICE);
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/txgbe: fix maximum number of FDIR filters' has been queued to stable release 22.11.11
2025-11-12 16:52 ` patch 'test/hash: check memory allocation' " luca.boccassi
` (18 preceding siblings ...)
2025-11-12 16:52 ` patch 'net/txgbe: add device arguments for FDIR' " luca.boccassi
@ 2025-11-12 16:52 ` luca.boccassi
2025-11-12 16:52 ` patch 'net/txgbe: fix FDIR mode clearing' " luca.boccassi
` (27 subsequent siblings)
47 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-11-12 16:52 UTC (permalink / raw)
To: Jiawen Wu; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
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/14/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/1e189319a19d2c048873177a0e4d5a7cdc0a8a9d
Thanks.
Luca Boccassi
---
From 1e189319a19d2c048873177a0e4d5a7cdc0a8a9d Mon Sep 17 00:00:00 2001
From: Jiawen Wu <jiawenwu@trustnetic.com>
Date: Mon, 27 Oct 2025 11:15:32 +0800
Subject: [PATCH] net/txgbe: fix maximum number of FDIR filters
[ upstream commit 5b1429fe2674e331d21a8c343d4129e6b7fbcce5 ]
FDIR is determined the maximum value on the hardware based on the
memory space allocated (i.e. fdir_conf.pballoc). But the hash map of
FDIR is created based on TXGBE_MAX_FDIR_FILTER_NUM. These two do not
match. It resulted in the absence of error when creating more FDIR rules
than the maximum allowed by the hardware.
Fixes: 635c21354f9a ("net/txgbe: add flow director filter init and uninit")
Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
---
drivers/net/txgbe/txgbe_ethdev.c | 6 ++++--
drivers/net/txgbe/txgbe_fdir.c | 4 +++-
2 files changed, 7 insertions(+), 3 deletions(-)
diff --git a/drivers/net/txgbe/txgbe_ethdev.c b/drivers/net/txgbe/txgbe_ethdev.c
index 0213159954..8b4a134b08 100644
--- a/drivers/net/txgbe/txgbe_ethdev.c
+++ b/drivers/net/txgbe/txgbe_ethdev.c
@@ -893,11 +893,13 @@ static int txgbe_l2_tn_filter_uninit(struct rte_eth_dev *eth_dev)
static int txgbe_fdir_filter_init(struct rte_eth_dev *eth_dev)
{
+ struct rte_eth_fdir_conf *fdir_conf = TXGBE_DEV_FDIR_CONF(eth_dev);
struct txgbe_hw_fdir_info *fdir_info = TXGBE_DEV_FDIR(eth_dev);
char fdir_hash_name[RTE_HASH_NAMESIZE];
+ u16 max_fdir_num = (1024 << (fdir_conf->pballoc + 1)) - 2;
struct rte_hash_parameters fdir_hash_params = {
.name = fdir_hash_name,
- .entries = TXGBE_MAX_FDIR_FILTER_NUM,
+ .entries = max_fdir_num,
.key_len = sizeof(struct txgbe_atr_input),
.hash_func = rte_hash_crc,
.hash_func_init_val = 0,
@@ -914,7 +916,7 @@ static int txgbe_fdir_filter_init(struct rte_eth_dev *eth_dev)
}
fdir_info->hash_map = rte_zmalloc("txgbe",
sizeof(struct txgbe_fdir_filter *) *
- TXGBE_MAX_FDIR_FILTER_NUM,
+ max_fdir_num,
0);
if (!fdir_info->hash_map) {
PMD_INIT_LOG(ERR,
diff --git a/drivers/net/txgbe/txgbe_fdir.c b/drivers/net/txgbe/txgbe_fdir.c
index 0efd43b59a..631dec69e8 100644
--- a/drivers/net/txgbe/txgbe_fdir.c
+++ b/drivers/net/txgbe/txgbe_fdir.c
@@ -959,6 +959,7 @@ txgbe_fdir_filter_restore(struct rte_eth_dev *dev)
int
txgbe_clear_all_fdir_filter(struct rte_eth_dev *dev)
{
+ struct rte_eth_fdir_conf *fdir_conf = TXGBE_DEV_FDIR_CONF(dev);
struct txgbe_hw_fdir_info *fdir_info = TXGBE_DEV_FDIR(dev);
struct txgbe_fdir_filter *fdir_filter;
struct txgbe_fdir_filter *filter_flag;
@@ -967,7 +968,8 @@ txgbe_clear_all_fdir_filter(struct rte_eth_dev *dev)
/* flush flow director */
rte_hash_reset(fdir_info->hash_handle);
memset(fdir_info->hash_map, 0,
- sizeof(struct txgbe_fdir_filter *) * TXGBE_MAX_FDIR_FILTER_NUM);
+ sizeof(struct txgbe_fdir_filter *) *
+ ((1024 << (fdir_conf->pballoc + 1)) - 2));
filter_flag = TAILQ_FIRST(&fdir_info->fdir_list);
while ((fdir_filter = TAILQ_FIRST(&fdir_info->fdir_list))) {
TAILQ_REMOVE(&fdir_info->fdir_list,
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-11-12 16:20:41.755377381 +0000
+++ 0021-net-txgbe-fix-maximum-number-of-FDIR-filters.patch 2025-11-12 16:20:40.911716551 +0000
@@ -1 +1 @@
-From 5b1429fe2674e331d21a8c343d4129e6b7fbcce5 Mon Sep 17 00:00:00 2001
+From 1e189319a19d2c048873177a0e4d5a7cdc0a8a9d Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 5b1429fe2674e331d21a8c343d4129e6b7fbcce5 ]
+
@@ -13 +14,0 @@
-Cc: stable@dpdk.org
@@ -22 +23 @@
-index e9bbf8ea72..f650c5b7a4 100644
+index 0213159954..8b4a134b08 100644
@@ -25 +26 @@
-@@ -935,11 +935,13 @@ static int txgbe_l2_tn_filter_uninit(struct rte_eth_dev *eth_dev)
+@@ -893,11 +893,13 @@ static int txgbe_l2_tn_filter_uninit(struct rte_eth_dev *eth_dev)
@@ -40 +41 @@
-@@ -956,7 +958,7 @@ static int txgbe_fdir_filter_init(struct rte_eth_dev *eth_dev)
+@@ -914,7 +916,7 @@ static int txgbe_fdir_filter_init(struct rte_eth_dev *eth_dev)
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/txgbe: fix FDIR mode clearing' has been queued to stable release 22.11.11
2025-11-12 16:52 ` patch 'test/hash: check memory allocation' " luca.boccassi
` (19 preceding siblings ...)
2025-11-12 16:52 ` patch 'net/txgbe: fix maximum number of FDIR filters' " luca.boccassi
@ 2025-11-12 16:52 ` luca.boccassi
2025-11-12 16:52 ` patch 'net/txgbe: fix FDIR drop action for L4 match packets' " luca.boccassi
` (26 subsequent siblings)
47 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-11-12 16:52 UTC (permalink / raw)
To: Jiawen Wu; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
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/14/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/e65afc51117d52947ae1b02039b9ac4194079613
Thanks.
Luca Boccassi
---
From e65afc51117d52947ae1b02039b9ac4194079613 Mon Sep 17 00:00:00 2001
From: Jiawen Wu <jiawenwu@trustnetic.com>
Date: Mon, 27 Oct 2025 11:15:33 +0800
Subject: [PATCH] net/txgbe: fix FDIR mode clearing
[ upstream commit 26048c25942f2579a821a99b78db48fdb2c90c77 ]
When FDIR flow rules are all cleared, FDIR mode is not cleared. This will
cause that creating new FDIR flow rules failed, for their mode are
different from the previously deleted ones.
Fixes: 6bde42fe7fa5 ("net/txgbe: flush all filters")
Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
---
drivers/net/txgbe/txgbe_fdir.c | 1 +
drivers/net/txgbe/txgbe_flow.c | 2 ++
2 files changed, 3 insertions(+)
diff --git a/drivers/net/txgbe/txgbe_fdir.c b/drivers/net/txgbe/txgbe_fdir.c
index 631dec69e8..77d0cc4c30 100644
--- a/drivers/net/txgbe/txgbe_fdir.c
+++ b/drivers/net/txgbe/txgbe_fdir.c
@@ -970,6 +970,7 @@ txgbe_clear_all_fdir_filter(struct rte_eth_dev *dev)
memset(fdir_info->hash_map, 0,
sizeof(struct txgbe_fdir_filter *) *
((1024 << (fdir_conf->pballoc + 1)) - 2));
+ fdir_conf->mode = RTE_FDIR_MODE_NONE;
filter_flag = TAILQ_FIRST(&fdir_info->fdir_list);
while ((fdir_filter = TAILQ_FIRST(&fdir_info->fdir_list))) {
TAILQ_REMOVE(&fdir_info->fdir_list,
diff --git a/drivers/net/txgbe/txgbe_flow.c b/drivers/net/txgbe/txgbe_flow.c
index e3942d449d..0bea8ef441 100644
--- a/drivers/net/txgbe/txgbe_flow.c
+++ b/drivers/net/txgbe/txgbe_flow.c
@@ -3426,6 +3426,7 @@ txgbe_flow_destroy(struct rte_eth_dev *dev,
struct txgbe_fdir_rule_ele *fdir_rule_ptr;
struct txgbe_flow_mem *txgbe_flow_mem_ptr;
struct txgbe_hw_fdir_info *fdir_info = TXGBE_DEV_FDIR(dev);
+ struct rte_eth_fdir_conf *fdir_conf = TXGBE_DEV_FDIR_CONF(dev);
struct txgbe_rss_conf_ele *rss_filter_ptr;
switch (filter_type) {
@@ -3485,6 +3486,7 @@ txgbe_flow_destroy(struct rte_eth_dev *dev,
fdir_info->mask_added = false;
fdir_info->flex_relative = false;
fdir_info->flex_bytes_offset = 0;
+ fdir_conf->mode = RTE_FDIR_MODE_NONE;
}
}
break;
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-11-12 16:20:41.795305329 +0000
+++ 0022-net-txgbe-fix-FDIR-mode-clearing.patch 2025-11-12 16:20:40.915716649 +0000
@@ -1 +1 @@
-From 26048c25942f2579a821a99b78db48fdb2c90c77 Mon Sep 17 00:00:00 2001
+From e65afc51117d52947ae1b02039b9ac4194079613 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 26048c25942f2579a821a99b78db48fdb2c90c77 ]
+
@@ -11 +12,0 @@
-Cc: stable@dpdk.org
@@ -32 +33 @@
-index 31af3593ed..25cf0db316 100644
+index e3942d449d..0bea8ef441 100644
@@ -35 +36 @@
-@@ -3429,6 +3429,7 @@ txgbe_flow_destroy(struct rte_eth_dev *dev,
+@@ -3426,6 +3426,7 @@ txgbe_flow_destroy(struct rte_eth_dev *dev,
@@ -43 +44 @@
-@@ -3488,6 +3489,7 @@ txgbe_flow_destroy(struct rte_eth_dev *dev,
+@@ -3485,6 +3486,7 @@ txgbe_flow_destroy(struct rte_eth_dev *dev,
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/txgbe: fix FDIR drop action for L4 match packets' has been queued to stable release 22.11.11
2025-11-12 16:52 ` patch 'test/hash: check memory allocation' " luca.boccassi
` (20 preceding siblings ...)
2025-11-12 16:52 ` patch 'net/txgbe: fix FDIR mode clearing' " luca.boccassi
@ 2025-11-12 16:52 ` luca.boccassi
2025-11-12 16:52 ` patch 'net/txgbe: fix FDIR filter for SCTP tunnel' " luca.boccassi
` (25 subsequent siblings)
47 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-11-12 16:52 UTC (permalink / raw)
To: Jiawen Wu; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
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/14/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/fe49aa6bbdf07114eea5a3d9cb41d561e61c9a8d
Thanks.
Luca Boccassi
---
From fe49aa6bbdf07114eea5a3d9cb41d561e61c9a8d Mon Sep 17 00:00:00 2001
From: Jiawen Wu <jiawenwu@trustnetic.com>
Date: Mon, 27 Oct 2025 11:15:34 +0800
Subject: [PATCH] net/txgbe: fix FDIR drop action for L4 match packets
[ upstream commit 3c858be4997d779a05dd32630ad57c740a2729bc ]
FDIR flow rules support to drop packets without being limited to L3
packets. Remove the redundant limitation.
Fixes: b973ee26747a ("net/txgbe: parse flow director filter")
Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
---
drivers/net/txgbe/txgbe_flow.c | 7 -------
1 file changed, 7 deletions(-)
diff --git a/drivers/net/txgbe/txgbe_flow.c b/drivers/net/txgbe/txgbe_flow.c
index 0bea8ef441..edb72e2f26 100644
--- a/drivers/net/txgbe/txgbe_flow.c
+++ b/drivers/net/txgbe/txgbe_flow.c
@@ -2839,7 +2839,6 @@ txgbe_parse_fdir_filter(struct rte_eth_dev *dev,
struct rte_flow_error *error)
{
int ret;
- struct txgbe_hw *hw = TXGBE_DEV_HW(dev);
struct rte_eth_fdir_conf *fdir_conf = TXGBE_DEV_FDIR_CONF(dev);
ret = txgbe_parse_fdir_filter_normal(dev, attr, pattern,
@@ -2853,12 +2852,6 @@ txgbe_parse_fdir_filter(struct rte_eth_dev *dev,
return ret;
step_next:
-
- if (hw->mac.type == txgbe_mac_raptor &&
- rule->fdirflags == TXGBE_FDIRPICMD_DROP &&
- (rule->input.src_port != 0 || rule->input.dst_port != 0))
- return -ENOTSUP;
-
if (fdir_conf->mode == RTE_FDIR_MODE_NONE) {
fdir_conf->mode = rule->mode;
ret = txgbe_fdir_configure(dev);
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-11-12 16:20:41.831799197 +0000
+++ 0023-net-txgbe-fix-FDIR-drop-action-for-L4-match-packets.patch 2025-11-12 16:20:40.915716649 +0000
@@ -1 +1 @@
-From 3c858be4997d779a05dd32630ad57c740a2729bc Mon Sep 17 00:00:00 2001
+From fe49aa6bbdf07114eea5a3d9cb41d561e61c9a8d Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 3c858be4997d779a05dd32630ad57c740a2729bc ]
+
@@ -10 +11,0 @@
-Cc: stable@dpdk.org
@@ -18 +19 @@
-index 25cf0db316..7cf079a1cf 100644
+index 0bea8ef441..edb72e2f26 100644
@@ -34 +35 @@
-- if (hw->mac.type == txgbe_mac_sp &&
+- if (hw->mac.type == txgbe_mac_raptor &&
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/txgbe: fix FDIR filter for SCTP tunnel' has been queued to stable release 22.11.11
2025-11-12 16:52 ` patch 'test/hash: check memory allocation' " luca.boccassi
` (21 preceding siblings ...)
2025-11-12 16:52 ` patch 'net/txgbe: fix FDIR drop action for L4 match packets' " luca.boccassi
@ 2025-11-12 16:52 ` luca.boccassi
2025-11-12 16:52 ` patch 'net/txgbe: filter FDIR match flex bytes for " luca.boccassi
` (24 subsequent siblings)
47 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-11-12 16:52 UTC (permalink / raw)
To: Jiawen Wu; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
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/14/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/53e73d758806314e63c3653a409363ebf3470ae6
Thanks.
Luca Boccassi
---
From 53e73d758806314e63c3653a409363ebf3470ae6 Mon Sep 17 00:00:00 2001
From: Jiawen Wu <jiawenwu@trustnetic.com>
Date: Mon, 27 Oct 2025 11:15:35 +0800
Subject: [PATCH] net/txgbe: fix FDIR filter for SCTP tunnel
[ upstream commit c9a341034a29bc5245dd9fc21678be0b30313394 ]
This commit is the same as commit
0db38d54b57a ("net/txgbe: fix to create FDIR filter for SCTP packet").
The check for the mask of SCTP item is repeated and wrong, fix it to
make it work.
Fixes: a1851465f825 ("net/txgbe: fix to create FDIR filter for tunnel packet")
Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
---
drivers/net/txgbe/txgbe_flow.c | 13 -------------
1 file changed, 13 deletions(-)
diff --git a/drivers/net/txgbe/txgbe_flow.c b/drivers/net/txgbe/txgbe_flow.c
index edb72e2f26..8472360103 100644
--- a/drivers/net/txgbe/txgbe_flow.c
+++ b/drivers/net/txgbe/txgbe_flow.c
@@ -2798,19 +2798,6 @@ txgbe_parse_fdir_filter_tunnel(const struct rte_flow_attr *attr,
rule->input.dst_port =
sctp_spec->hdr.dst_port;
}
- /* others even sctp port is not supported */
- sctp_mask = item->mask;
- if (sctp_mask &&
- (sctp_mask->hdr.src_port ||
- sctp_mask->hdr.dst_port ||
- sctp_mask->hdr.tag ||
- sctp_mask->hdr.cksum)) {
- memset(rule, 0, sizeof(struct txgbe_fdir_rule));
- rte_flow_error_set(error, EINVAL,
- RTE_FLOW_ERROR_TYPE_ITEM,
- item, "Not supported by fdir filter");
- return -rte_errno;
- }
}
if (item->type != RTE_FLOW_ITEM_TYPE_END) {
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-11-12 16:20:41.868025445 +0000
+++ 0024-net-txgbe-fix-FDIR-filter-for-SCTP-tunnel.patch 2025-11-12 16:20:40.915716649 +0000
@@ -1 +1 @@
-From c9a341034a29bc5245dd9fc21678be0b30313394 Mon Sep 17 00:00:00 2001
+From 53e73d758806314e63c3653a409363ebf3470ae6 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit c9a341034a29bc5245dd9fc21678be0b30313394 ]
+
@@ -13 +14,0 @@
-Cc: stable@dpdk.org
@@ -21 +22 @@
-index 7cf079a1cf..5b03a35949 100644
+index edb72e2f26..8472360103 100644
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/txgbe: filter FDIR match flex bytes for tunnel' has been queued to stable release 22.11.11
2025-11-12 16:52 ` patch 'test/hash: check memory allocation' " luca.boccassi
` (22 preceding siblings ...)
2025-11-12 16:52 ` patch 'net/txgbe: fix FDIR filter for SCTP tunnel' " luca.boccassi
@ 2025-11-12 16:52 ` luca.boccassi
2025-11-12 16:52 ` patch 'net/txgbe: fix FDIR rule raw relative for L3 packets' " luca.boccassi
` (23 subsequent siblings)
47 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-11-12 16:52 UTC (permalink / raw)
To: Jiawen Wu; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
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/14/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/f85c7c529548fa29017c3b46d93ce4820c634822
Thanks.
Luca Boccassi
---
From f85c7c529548fa29017c3b46d93ce4820c634822 Mon Sep 17 00:00:00 2001
From: Jiawen Wu <jiawenwu@trustnetic.com>
Date: Mon, 27 Oct 2025 11:15:36 +0800
Subject: [PATCH] net/txgbe: filter FDIR match flex bytes for tunnel
[ upstream commit 02c9cc101281ebf75148de8324455cdc8cbc3baa ]
For tunnel packets, pattern RAW is also supported to match in FDIR
rules. Fix to process this field.
Fixes: a1851465f825 ("net/txgbe: fix to create FDIR filter for tunnel packet")
Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
---
drivers/net/txgbe/txgbe_flow.c | 125 ++++++++++++++++++++++++++++++++-
1 file changed, 123 insertions(+), 2 deletions(-)
diff --git a/drivers/net/txgbe/txgbe_flow.c b/drivers/net/txgbe/txgbe_flow.c
index 8472360103..81eb8f111c 100644
--- a/drivers/net/txgbe/txgbe_flow.c
+++ b/drivers/net/txgbe/txgbe_flow.c
@@ -2222,6 +2222,8 @@ txgbe_parse_fdir_filter_tunnel(const struct rte_flow_attr *attr,
const struct rte_flow_item_udp *udp_mask;
const struct rte_flow_item_sctp *sctp_spec;
const struct rte_flow_item_sctp *sctp_mask;
+ const struct rte_flow_item_raw *raw_mask;
+ const struct rte_flow_item_raw *raw_spec;
u8 ptid = 0;
uint32_t j;
@@ -2548,7 +2550,8 @@ txgbe_parse_fdir_filter_tunnel(const struct rte_flow_attr *attr,
if (item->type != RTE_FLOW_ITEM_TYPE_TCP &&
item->type != RTE_FLOW_ITEM_TYPE_UDP &&
item->type != RTE_FLOW_ITEM_TYPE_SCTP &&
- item->type != RTE_FLOW_ITEM_TYPE_END) {
+ item->type != RTE_FLOW_ITEM_TYPE_END &&
+ item->type != RTE_FLOW_ITEM_TYPE_RAW) {
memset(rule, 0, sizeof(struct txgbe_fdir_rule));
rte_flow_error_set(error, EINVAL,
RTE_FLOW_ERROR_TYPE_ITEM,
@@ -2637,7 +2640,8 @@ txgbe_parse_fdir_filter_tunnel(const struct rte_flow_attr *attr,
if (item->type != RTE_FLOW_ITEM_TYPE_TCP &&
item->type != RTE_FLOW_ITEM_TYPE_UDP &&
item->type != RTE_FLOW_ITEM_TYPE_SCTP &&
- item->type != RTE_FLOW_ITEM_TYPE_END) {
+ item->type != RTE_FLOW_ITEM_TYPE_END &&
+ item->type != RTE_FLOW_ITEM_TYPE_RAW) {
memset(rule, 0, sizeof(struct txgbe_fdir_rule));
rte_flow_error_set(error, EINVAL,
RTE_FLOW_ERROR_TYPE_ITEM,
@@ -2699,6 +2703,16 @@ txgbe_parse_fdir_filter_tunnel(const struct rte_flow_attr *attr,
rule->input.dst_port =
tcp_spec->hdr.dst_port;
}
+
+ item = next_no_fuzzy_pattern(pattern, item);
+ if (item->type != RTE_FLOW_ITEM_TYPE_RAW &&
+ item->type != RTE_FLOW_ITEM_TYPE_END) {
+ memset(rule, 0, sizeof(struct txgbe_fdir_rule));
+ rte_flow_error_set(error, EINVAL,
+ RTE_FLOW_ERROR_TYPE_ITEM,
+ item, "Not supported by fdir filter");
+ return -rte_errno;
+ }
}
/* Get the UDP info */
@@ -2748,6 +2762,16 @@ txgbe_parse_fdir_filter_tunnel(const struct rte_flow_attr *attr,
rule->input.dst_port =
udp_spec->hdr.dst_port;
}
+
+ item = next_no_fuzzy_pattern(pattern, item);
+ if (item->type != RTE_FLOW_ITEM_TYPE_RAW &&
+ item->type != RTE_FLOW_ITEM_TYPE_END) {
+ memset(rule, 0, sizeof(struct txgbe_fdir_rule));
+ rte_flow_error_set(error, EINVAL,
+ RTE_FLOW_ERROR_TYPE_ITEM,
+ item, "Not supported by fdir filter");
+ return -rte_errno;
+ }
}
/* Get the SCTP info */
@@ -2798,6 +2822,103 @@ txgbe_parse_fdir_filter_tunnel(const struct rte_flow_attr *attr,
rule->input.dst_port =
sctp_spec->hdr.dst_port;
}
+
+ item = next_no_fuzzy_pattern(pattern, item);
+ if (item->type != RTE_FLOW_ITEM_TYPE_RAW &&
+ item->type != RTE_FLOW_ITEM_TYPE_END) {
+ memset(rule, 0, sizeof(struct txgbe_fdir_rule));
+ rte_flow_error_set(error, EINVAL,
+ RTE_FLOW_ERROR_TYPE_ITEM,
+ item, "Not supported by fdir filter");
+ return -rte_errno;
+ }
+ }
+
+ /* Get the flex byte info */
+ if (item->type == RTE_FLOW_ITEM_TYPE_RAW) {
+ uint16_t pattern = 0;
+
+ /* Not supported last point for range*/
+ if (item->last) {
+ rte_flow_error_set(error, EINVAL,
+ RTE_FLOW_ERROR_TYPE_UNSPECIFIED,
+ item, "Not supported last point for range");
+ return -rte_errno;
+ }
+ /* mask should not be null */
+ if (!item->mask || !item->spec) {
+ memset(rule, 0, sizeof(struct txgbe_fdir_rule));
+ rte_flow_error_set(error, EINVAL,
+ RTE_FLOW_ERROR_TYPE_ITEM,
+ item, "Not supported by fdir filter");
+ return -rte_errno;
+ }
+
+ rule->b_mask = TRUE;
+ raw_mask = item->mask;
+
+ /* check mask */
+ if (raw_mask->relative != 0x1 ||
+ raw_mask->search != 0x1 ||
+ raw_mask->reserved != 0x0 ||
+ (uint32_t)raw_mask->offset != 0xffffffff ||
+ raw_mask->limit != 0xffff ||
+ raw_mask->length != 0xffff) {
+ memset(rule, 0, sizeof(struct txgbe_fdir_rule));
+ rte_flow_error_set(error, EINVAL,
+ RTE_FLOW_ERROR_TYPE_ITEM,
+ item, "Not supported by fdir filter");
+ return -rte_errno;
+ }
+
+ rule->b_spec = TRUE;
+ raw_spec = item->spec;
+
+ /* check spec */
+ if (raw_spec->search != 0 ||
+ raw_spec->reserved != 0 ||
+ raw_spec->offset > TXGBE_MAX_FLX_SOURCE_OFF ||
+ raw_spec->offset % 2 ||
+ raw_spec->limit != 0 ||
+ raw_spec->length != 4 ||
+ /* pattern can't be 0xffff */
+ (raw_spec->pattern[0] == 0xff &&
+ raw_spec->pattern[1] == 0xff &&
+ raw_spec->pattern[2] == 0xff &&
+ raw_spec->pattern[3] == 0xff)) {
+ memset(rule, 0, sizeof(struct txgbe_fdir_rule));
+ rte_flow_error_set(error, EINVAL,
+ RTE_FLOW_ERROR_TYPE_ITEM,
+ item, "Not supported by fdir filter");
+ return -rte_errno;
+ }
+
+ /* check pattern mask */
+ if (raw_mask->pattern[0] != 0xff ||
+ raw_mask->pattern[1] != 0xff ||
+ raw_mask->pattern[2] != 0xff ||
+ raw_mask->pattern[3] != 0xff) {
+ memset(rule, 0, sizeof(struct txgbe_fdir_rule));
+ rte_flow_error_set(error, EINVAL,
+ RTE_FLOW_ERROR_TYPE_ITEM,
+ item, "Not supported by fdir filter");
+ return -rte_errno;
+ }
+
+ rule->mask.flex_bytes_mask = 0xffff;
+ /* Convert pattern string to hex bytes */
+ if (sscanf((const char *)raw_spec->pattern, "%hx", &pattern) != 1) {
+ memset(rule, 0, sizeof(struct txgbe_fdir_rule));
+ rte_flow_error_set(error, EINVAL,
+ RTE_FLOW_ERROR_TYPE_ITEM,
+ item, "Failed to parse raw pattern");
+ return -rte_errno;
+ }
+ rule->input.flex_bytes = (pattern & 0x00FF) << 8;
+ rule->input.flex_bytes |= (pattern & 0xFF00) >> 8;
+
+ rule->flex_bytes_offset = raw_spec->offset;
+ rule->flex_relative = raw_spec->relative;
}
if (item->type != RTE_FLOW_ITEM_TYPE_END) {
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-11-12 16:20:41.904906177 +0000
+++ 0025-net-txgbe-filter-FDIR-match-flex-bytes-for-tunnel.patch 2025-11-12 16:20:40.919716748 +0000
@@ -1 +1 @@
-From 02c9cc101281ebf75148de8324455cdc8cbc3baa Mon Sep 17 00:00:00 2001
+From f85c7c529548fa29017c3b46d93ce4820c634822 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 02c9cc101281ebf75148de8324455cdc8cbc3baa ]
+
@@ -10 +11,0 @@
-Cc: stable@dpdk.org
@@ -18 +19 @@
-index 5b03a35949..095c84823f 100644
+index 8472360103..81eb8f111c 100644
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/txgbe: fix FDIR rule raw relative for L3 packets' has been queued to stable release 22.11.11
2025-11-12 16:52 ` patch 'test/hash: check memory allocation' " luca.boccassi
` (23 preceding siblings ...)
2025-11-12 16:52 ` patch 'net/txgbe: filter FDIR match flex bytes for " luca.boccassi
@ 2025-11-12 16:52 ` luca.boccassi
2025-11-12 16:52 ` patch 'net/txgbe: fix FDIR input mask' " luca.boccassi
` (22 subsequent siblings)
47 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-11-12 16:52 UTC (permalink / raw)
To: Jiawen Wu; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
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/14/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/5df5b7ed5bd3b8f472e254e37732d74b036003d2
Thanks.
Luca Boccassi
---
From 5df5b7ed5bd3b8f472e254e37732d74b036003d2 Mon Sep 17 00:00:00 2001
From: Jiawen Wu <jiawenwu@trustnetic.com>
Date: Mon, 27 Oct 2025 11:15:37 +0800
Subject: [PATCH] net/txgbe: fix FDIR rule raw relative for L3 packets
[ upstream commit f1cd458035da9066379c457d27488eeb7741af46 ]
Hardware supports FDIR flex field base setting from start of MAC header,
IP header, L4 header, L4 payload. So for IP packet which has no L4 header,
it cannot match the raw bytes with relative offset start from L3 payload.
And FDIR flex bytes rule cannot match L2 packets.
Therefore, we will declare that the relative offset is only used for
matching the L4 packets.
Fixes: aa4974765499 ("net/txgbe: fix raw pattern match for FDIR rule")
Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
---
drivers/net/txgbe/txgbe_fdir.c | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/drivers/net/txgbe/txgbe_fdir.c b/drivers/net/txgbe/txgbe_fdir.c
index 77d0cc4c30..8d181db33f 100644
--- a/drivers/net/txgbe/txgbe_fdir.c
+++ b/drivers/net/txgbe/txgbe_fdir.c
@@ -258,10 +258,7 @@ txgbe_fdir_get_flex_base(struct txgbe_fdir_rule *rule)
if (rule->input.flow_type & TXGBE_ATR_L4TYPE_MASK)
return TXGBE_FDIRFLEXCFG_BASE_PAY;
- if (rule->input.flow_type & TXGBE_ATR_L3TYPE_MASK)
- return TXGBE_FDIRFLEXCFG_BASE_L3;
-
- return TXGBE_FDIRFLEXCFG_BASE_L2;
+ return TXGBE_FDIRFLEXCFG_BASE_L3;
}
int
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-11-12 16:20:41.940496588 +0000
+++ 0026-net-txgbe-fix-FDIR-rule-raw-relative-for-L3-packets.patch 2025-11-12 16:20:40.919716748 +0000
@@ -1 +1 @@
-From f1cd458035da9066379c457d27488eeb7741af46 Mon Sep 17 00:00:00 2001
+From 5df5b7ed5bd3b8f472e254e37732d74b036003d2 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit f1cd458035da9066379c457d27488eeb7741af46 ]
+
@@ -15 +16,0 @@
-Cc: stable@dpdk.org
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/txgbe: fix FDIR input mask' has been queued to stable release 22.11.11
2025-11-12 16:52 ` patch 'test/hash: check memory allocation' " luca.boccassi
` (24 preceding siblings ...)
2025-11-12 16:52 ` patch 'net/txgbe: fix FDIR rule raw relative for L3 packets' " luca.boccassi
@ 2025-11-12 16:52 ` luca.boccassi
2025-11-12 16:52 ` patch 'net/txgbe: switch to FDIR when ntuple filter is full' " luca.boccassi
` (21 subsequent siblings)
47 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-11-12 16:52 UTC (permalink / raw)
To: Jiawen Wu; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
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/14/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/9c31a51f442859a96a7e0db0b51b360c8ea04e1f
Thanks.
Luca Boccassi
---
From 9c31a51f442859a96a7e0db0b51b360c8ea04e1f Mon Sep 17 00:00:00 2001
From: Jiawen Wu <jiawenwu@trustnetic.com>
Date: Mon, 27 Oct 2025 11:15:38 +0800
Subject: [PATCH] net/txgbe: fix FDIR input mask
[ upstream commit a2d4de27109033d5061da44aed919bf46cfd7ca9 ]
Fix FDIR mask settings to comply with the hardware configuration. And
mask out the spec field instead of manually setting it to 0.
There are some requirements of mask in hardware:
1) IPv4 mask should be little-endian.
2) Ipv6 source address mask has only 16 bits, one bit of mask
corresponds to one byte of spec.
3) IPv6 dest address is only supported to perfect match the low 8 bits,
so it is not taken into account for support in the driver.
Fixes: ea230dda16ad ("net/txgbe: configure flow director filter")
Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
---
drivers/net/txgbe/txgbe_fdir.c | 49 +++++++++++++++++++++++++++++-----
drivers/net/txgbe/txgbe_flow.c | 8 ++----
2 files changed, 45 insertions(+), 12 deletions(-)
diff --git a/drivers/net/txgbe/txgbe_fdir.c b/drivers/net/txgbe/txgbe_fdir.c
index 8d181db33f..6b83a7379d 100644
--- a/drivers/net/txgbe/txgbe_fdir.c
+++ b/drivers/net/txgbe/txgbe_fdir.c
@@ -165,6 +165,15 @@ configure_fdir_flags(const struct rte_eth_fdir_conf *conf,
return 0;
}
+static inline uint16_t
+txgbe_reverse_fdir_bitmasks(uint16_t mask)
+{
+ mask = ((mask & 0x5555) << 1) | ((mask & 0xAAAA) >> 1);
+ mask = ((mask & 0x3333) << 2) | ((mask & 0xCCCC) >> 2);
+ mask = ((mask & 0x0F0F) << 4) | ((mask & 0xF0F0) >> 4);
+ return ((mask & 0x00FF) << 8) | ((mask & 0xFF00) >> 8);
+}
+
int
txgbe_fdir_set_input_mask(struct rte_eth_dev *dev)
{
@@ -206,15 +215,15 @@ txgbe_fdir_set_input_mask(struct rte_eth_dev *dev)
wr32(hw, TXGBE_FDIRUDPMSK, ~fdirtcpm);
wr32(hw, TXGBE_FDIRSCTPMSK, ~fdirtcpm);
- /* Store source and destination IPv4 masks (big-endian) */
- wr32(hw, TXGBE_FDIRSIP4MSK, ~info->mask.src_ipv4_mask);
- wr32(hw, TXGBE_FDIRDIP4MSK, ~info->mask.dst_ipv4_mask);
+ /* Store source and destination IPv4 masks (little-endian) */
+ wr32(hw, TXGBE_FDIRSIP4MSK, rte_be_to_cpu_32(~info->mask.src_ipv4_mask));
+ wr32(hw, TXGBE_FDIRDIP4MSK, rte_be_to_cpu_32(~info->mask.dst_ipv4_mask));
/*
* Store source and destination IPv6 masks (bit reversed)
*/
- fdiripv6m = TXGBE_FDIRIP6MSK_DST(info->mask.dst_ipv6_mask) |
- TXGBE_FDIRIP6MSK_SRC(info->mask.src_ipv6_mask);
+ fdiripv6m = txgbe_reverse_fdir_bitmasks(info->mask.dst_ipv6_mask) << 16;
+ fdiripv6m |= txgbe_reverse_fdir_bitmasks(info->mask.src_ipv6_mask);
wr32(hw, TXGBE_FDIRIP6MSK, ~fdiripv6m);
return 0;
@@ -636,8 +645,14 @@ fdir_write_perfect_filter(struct txgbe_hw *hw,
fdircmd |= TXGBE_FDIRPICMD_QP(queue);
fdircmd |= TXGBE_FDIRPICMD_POOL(input->vm_pool);
- if (input->flow_type & TXGBE_ATR_L3TYPE_IPV6)
+ if (input->flow_type & TXGBE_ATR_L3TYPE_IPV6) {
+ /* use SIP4 to store LS Dword of the Source iPv6 address */
+ wr32(hw, TXGBE_FDIRPISIP4, be_to_le32(input->src_ip[3]));
+ wr32(hw, TXGBE_FDIRPISIP6(0), be_to_le32(input->src_ip[2]));
+ wr32(hw, TXGBE_FDIRPISIP6(1), be_to_le32(input->src_ip[1]));
+ wr32(hw, TXGBE_FDIRPISIP6(2), be_to_le32(input->src_ip[0]));
fdircmd |= TXGBE_FDIRPICMD_IP6;
+ }
wr32(hw, TXGBE_FDIRPICMD, fdircmd);
PMD_DRV_LOG(DEBUG, "Rx Queue=%x hash=%x", queue, fdirhash);
@@ -783,6 +798,26 @@ txgbe_remove_fdir_filter(struct txgbe_hw_fdir_info *fdir_info,
return 0;
}
+static void
+txgbe_fdir_mask_input(struct txgbe_hw_fdir_mask *mask,
+ struct txgbe_atr_input *input)
+{
+ int i;
+
+ if (input->flow_type & TXGBE_ATR_L3TYPE_IPV6) {
+ for (i = 0; i < 16; i++) {
+ if (!(mask->src_ipv6_mask & (1 << i)))
+ input->src_ip[i / 4] &= ~(0xFF << ((i % 4) * 8));
+ }
+ } else {
+ input->src_ip[0] &= mask->src_ipv4_mask;
+ input->dst_ip[0] &= mask->dst_ipv4_mask;
+ }
+
+ input->src_port &= mask->src_port_mask;
+ input->dst_port &= mask->dst_port_mask;
+}
+
int
txgbe_fdir_filter_program(struct rte_eth_dev *dev,
struct txgbe_fdir_rule *rule,
@@ -805,6 +840,8 @@ txgbe_fdir_filter_program(struct rte_eth_dev *dev,
if (fdir_mode >= RTE_FDIR_MODE_PERFECT)
is_perfect = TRUE;
+ txgbe_fdir_mask_input(&info->mask, &rule->input);
+
if (is_perfect) {
fdirhash = atr_compute_perfect_hash(&rule->input,
TXGBE_DEV_FDIR_CONF(dev)->pballoc);
diff --git a/drivers/net/txgbe/txgbe_flow.c b/drivers/net/txgbe/txgbe_flow.c
index 81eb8f111c..f947093014 100644
--- a/drivers/net/txgbe/txgbe_flow.c
+++ b/drivers/net/txgbe/txgbe_flow.c
@@ -1849,9 +1849,7 @@ txgbe_parse_fdir_filter_normal(struct rte_eth_dev *dev __rte_unused,
/* check dst addr mask */
for (j = 0; j < 16; j++) {
- if (ipv6_mask->hdr.dst_addr[j] == UINT8_MAX) {
- rule->mask.dst_ipv6_mask |= 1 << j;
- } else if (ipv6_mask->hdr.dst_addr[j] != 0) {
+ if (ipv6_mask->hdr.dst_addr[j] != 0) {
memset(rule, 0, sizeof(struct txgbe_fdir_rule));
rte_flow_error_set(error, EINVAL,
RTE_FLOW_ERROR_TYPE_ITEM,
@@ -2612,9 +2610,7 @@ txgbe_parse_fdir_filter_tunnel(const struct rte_flow_attr *attr,
/* check dst addr mask */
for (j = 0; j < 16; j++) {
- if (ipv6_mask->hdr.dst_addr[j] == UINT8_MAX) {
- rule->mask.dst_ipv6_mask |= 1 << j;
- } else if (ipv6_mask->hdr.dst_addr[j] != 0) {
+ if (ipv6_mask->hdr.dst_addr[j] != 0) {
memset(rule, 0, sizeof(struct txgbe_fdir_rule));
rte_flow_error_set(error, EINVAL,
RTE_FLOW_ERROR_TYPE_ITEM,
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-11-12 16:20:41.972956684 +0000
+++ 0027-net-txgbe-fix-FDIR-input-mask.patch 2025-11-12 16:20:40.919716748 +0000
@@ -1 +1 @@
-From a2d4de27109033d5061da44aed919bf46cfd7ca9 Mon Sep 17 00:00:00 2001
+From 9c31a51f442859a96a7e0db0b51b360c8ea04e1f Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit a2d4de27109033d5061da44aed919bf46cfd7ca9 ]
+
@@ -17 +18,0 @@
-Cc: stable@dpdk.org
@@ -119 +120 @@
-index 095c84823f..d3113b6fc8 100644
+index 81eb8f111c..f947093014 100644
@@ -126 +127 @@
-- if (ipv6_mask->hdr.dst_addr.a[j] == UINT8_MAX) {
+- if (ipv6_mask->hdr.dst_addr[j] == UINT8_MAX) {
@@ -128,2 +129,2 @@
-- } else if (ipv6_mask->hdr.dst_addr.a[j] != 0) {
-+ if (ipv6_mask->hdr.dst_addr.a[j] != 0) {
+- } else if (ipv6_mask->hdr.dst_addr[j] != 0) {
++ if (ipv6_mask->hdr.dst_addr[j] != 0) {
@@ -137 +138 @@
-- if (ipv6_mask->hdr.dst_addr.a[j] == UINT8_MAX) {
+- if (ipv6_mask->hdr.dst_addr[j] == UINT8_MAX) {
@@ -139,2 +140,2 @@
-- } else if (ipv6_mask->hdr.dst_addr.a[j] != 0) {
-+ if (ipv6_mask->hdr.dst_addr.a[j] != 0) {
+- } else if (ipv6_mask->hdr.dst_addr[j] != 0) {
++ if (ipv6_mask->hdr.dst_addr[j] != 0) {
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/txgbe: switch to FDIR when ntuple filter is full' has been queued to stable release 22.11.11
2025-11-12 16:52 ` patch 'test/hash: check memory allocation' " luca.boccassi
` (25 preceding siblings ...)
2025-11-12 16:52 ` patch 'net/txgbe: fix FDIR input mask' " luca.boccassi
@ 2025-11-12 16:52 ` luca.boccassi
2025-11-12 16:52 ` patch 'net/txgbe: remove unsupported flow action mark' " luca.boccassi
` (20 subsequent siblings)
47 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-11-12 16:52 UTC (permalink / raw)
To: Jiawen Wu; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
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/14/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/2764f319bbcfe01f961023b2a856bedd30dd3d49
Thanks.
Luca Boccassi
---
From 2764f319bbcfe01f961023b2a856bedd30dd3d49 Mon Sep 17 00:00:00 2001
From: Jiawen Wu <jiawenwu@trustnetic.com>
Date: Mon, 27 Oct 2025 11:15:39 +0800
Subject: [PATCH] net/txgbe: switch to FDIR when ntuple filter is full
[ upstream commit ccac5e093041f255f38a59ea472c6dee493ccc7c ]
Using ntuple filter has less performance loss on the hardware compared
to FDIR filter. So when the flow rule both match ntuple filter and FDIR
filter, ntuple filter will be created first. But there are only maximum
128 flow rules can be created on ntuple filter, it is far less than the
requirements of many users. So switch to use FDIR when ntuple filters
are full.
Fixes: 77a72b4d9dc0 ("net/txgbe: support ntuple filter add and delete")
Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
---
drivers/net/txgbe/txgbe_ethdev.c | 5 ++++-
drivers/net/txgbe/txgbe_ethdev.h | 1 +
drivers/net/txgbe/txgbe_flow.c | 8 ++++++++
3 files changed, 13 insertions(+), 1 deletion(-)
diff --git a/drivers/net/txgbe/txgbe_ethdev.c b/drivers/net/txgbe/txgbe_ethdev.c
index 8b4a134b08..004738f5ae 100644
--- a/drivers/net/txgbe/txgbe_ethdev.c
+++ b/drivers/net/txgbe/txgbe_ethdev.c
@@ -851,6 +851,7 @@ static int txgbe_ntuple_filter_uninit(struct rte_eth_dev *eth_dev)
}
memset(filter_info->fivetuple_mask, 0,
sizeof(uint32_t) * TXGBE_5TUPLE_ARRAY_SIZE);
+ filter_info->ntuple_is_full = false;
return 0;
}
@@ -4070,7 +4071,8 @@ txgbe_add_5tuple_filter(struct rte_eth_dev *dev,
}
}
if (i >= TXGBE_MAX_FTQF_FILTERS) {
- PMD_DRV_LOG(ERR, "5tuple filters are full.");
+ PMD_DRV_LOG(INFO, "5tuple filters are full, switch to FDIR");
+ filter_info->ntuple_is_full = true;
return -ENOSYS;
}
@@ -4098,6 +4100,7 @@ txgbe_remove_5tuple_filter(struct rte_eth_dev *dev,
~(1 << (index % (sizeof(uint32_t) * NBBY)));
TAILQ_REMOVE(&filter_info->fivetuple_list, filter, entries);
rte_free(filter);
+ filter_info->ntuple_is_full = false;
wr32(hw, TXGBE_5TFDADDR(index), 0);
wr32(hw, TXGBE_5TFSADDR(index), 0);
diff --git a/drivers/net/txgbe/txgbe_ethdev.h b/drivers/net/txgbe/txgbe_ethdev.h
index 7b278da096..e02df98c41 100644
--- a/drivers/net/txgbe/txgbe_ethdev.h
+++ b/drivers/net/txgbe/txgbe_ethdev.h
@@ -241,6 +241,7 @@ struct txgbe_filter_info {
/* Bit mask for every used 5tuple filter */
uint32_t fivetuple_mask[TXGBE_5TUPLE_ARRAY_SIZE];
struct txgbe_5tuple_filter_list fivetuple_list;
+ bool ntuple_is_full;
/* store the SYN filter info */
uint32_t syn_info;
/* store the rss filter info */
diff --git a/drivers/net/txgbe/txgbe_flow.c b/drivers/net/txgbe/txgbe_flow.c
index f947093014..074bbe6aab 100644
--- a/drivers/net/txgbe/txgbe_flow.c
+++ b/drivers/net/txgbe/txgbe_flow.c
@@ -580,8 +580,12 @@ txgbe_parse_ntuple_filter(struct rte_eth_dev *dev,
struct rte_eth_ntuple_filter *filter,
struct rte_flow_error *error)
{
+ struct txgbe_filter_info *filter_info = TXGBE_DEV_FILTER(dev);
int ret;
+ if (filter_info->ntuple_is_full)
+ return -ENOSYS;
+
ret = cons_parse_ntuple_filter(attr, pattern, actions, filter, error);
if (ret)
@@ -3200,6 +3204,7 @@ txgbe_flow_create(struct rte_eth_dev *dev,
struct txgbe_fdir_rule_ele *fdir_rule_ptr;
struct txgbe_rss_conf_ele *rss_filter_ptr;
struct txgbe_flow_mem *txgbe_flow_mem_ptr;
+ struct txgbe_filter_info *filter_info = TXGBE_DEV_FILTER(dev);
uint8_t first_mask = FALSE;
flow = rte_zmalloc("txgbe_rte_flow", sizeof(struct rte_flow), 0);
@@ -3245,10 +3250,13 @@ txgbe_flow_create(struct rte_eth_dev *dev,
flow->rule = ntuple_filter_ptr;
flow->filter_type = RTE_ETH_FILTER_NTUPLE;
return flow;
+ } else if (filter_info->ntuple_is_full) {
+ goto next;
}
goto out;
}
+next:
memset(ðertype_filter, 0, sizeof(struct rte_eth_ethertype_filter));
ret = txgbe_parse_ethertype_filter(dev, attr, pattern,
actions, ðertype_filter, error);
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-11-12 16:20:42.011288021 +0000
+++ 0028-net-txgbe-switch-to-FDIR-when-ntuple-filter-is-full.patch 2025-11-12 16:20:40.927716946 +0000
@@ -1 +1 @@
-From ccac5e093041f255f38a59ea472c6dee493ccc7c Mon Sep 17 00:00:00 2001
+From 2764f319bbcfe01f961023b2a856bedd30dd3d49 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit ccac5e093041f255f38a59ea472c6dee493ccc7c ]
+
@@ -14 +15,0 @@
-Cc: stable@dpdk.org
@@ -24 +25 @@
-index f650c5b7a4..21f0711762 100644
+index 8b4a134b08..004738f5ae 100644
@@ -27 +28 @@
-@@ -893,6 +893,7 @@ int txgbe_ntuple_filter_uninit(struct rte_eth_dev *eth_dev)
+@@ -851,6 +851,7 @@ static int txgbe_ntuple_filter_uninit(struct rte_eth_dev *eth_dev)
@@ -35 +36 @@
-@@ -4495,7 +4496,8 @@ txgbe_add_5tuple_filter(struct rte_eth_dev *dev,
+@@ -4070,7 +4071,8 @@ txgbe_add_5tuple_filter(struct rte_eth_dev *dev,
@@ -45 +46 @@
-@@ -4526,6 +4528,7 @@ txgbe_remove_5tuple_filter(struct rte_eth_dev *dev,
+@@ -4098,6 +4100,7 @@ txgbe_remove_5tuple_filter(struct rte_eth_dev *dev,
@@ -51,2 +52,2 @@
- if (!txgbe_is_pf(TXGBE_DEV_HW(dev))) {
- txgbevf_remove_5tuple_filter(dev, index);
+ wr32(hw, TXGBE_5TFDADDR(index), 0);
+ wr32(hw, TXGBE_5TFSADDR(index), 0);
@@ -54 +55 @@
-index 053aa1645f..1e7cc5ea80 100644
+index 7b278da096..e02df98c41 100644
@@ -57 +58 @@
-@@ -245,6 +245,7 @@ struct txgbe_filter_info {
+@@ -241,6 +241,7 @@ struct txgbe_filter_info {
@@ -66 +67 @@
-index d3113b6fc8..cd05ceffed 100644
+index f947093014..074bbe6aab 100644
@@ -90 +91 @@
-@@ -3245,6 +3250,8 @@ txgbe_flow_create(struct rte_eth_dev *dev,
+@@ -3245,10 +3250,13 @@ txgbe_flow_create(struct rte_eth_dev *dev,
@@ -97,3 +97,0 @@
- goto out;
- }
-@@ -3254,6 +3261,7 @@ txgbe_flow_create(struct rte_eth_dev *dev,
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/txgbe: remove unsupported flow action mark' has been queued to stable release 22.11.11
2025-11-12 16:52 ` patch 'test/hash: check memory allocation' " luca.boccassi
` (26 preceding siblings ...)
2025-11-12 16:52 ` patch 'net/txgbe: switch to FDIR when ntuple filter is full' " luca.boccassi
@ 2025-11-12 16:52 ` luca.boccassi
2025-11-12 16:52 ` patch 'net/bonding: fix MAC address propagation in 802.3ad mode' " luca.boccassi
` (19 subsequent siblings)
47 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-11-12 16:52 UTC (permalink / raw)
To: Jiawen Wu; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
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/14/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/de2218fdbe114ab09dd4003e2ad2da2c64147fc8
Thanks.
Luca Boccassi
---
From de2218fdbe114ab09dd4003e2ad2da2c64147fc8 Mon Sep 17 00:00:00 2001
From: Jiawen Wu <jiawenwu@trustnetic.com>
Date: Mon, 27 Oct 2025 11:15:42 +0800
Subject: [PATCH] net/txgbe: remove unsupported flow action mark
[ upstream commit 7224536b051457ce2a9cfd6e433da9d4a7bc97ac ]
Flow action "mark" is not supported, just remove it.
Fixes: b973ee26747a ("net/txgbe: parse flow director filter")
Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
---
doc/guides/nics/features/txgbe.ini | 1 -
drivers/net/txgbe/txgbe_flow.c | 23 ++---------------------
2 files changed, 2 insertions(+), 22 deletions(-)
diff --git a/doc/guides/nics/features/txgbe.ini b/doc/guides/nics/features/txgbe.ini
index ef9f0cfa0a..a9f043a04f 100644
--- a/doc/guides/nics/features/txgbe.ini
+++ b/doc/guides/nics/features/txgbe.ini
@@ -72,7 +72,6 @@ vxlan = Y
[rte_flow actions]
drop = Y
-mark = Y
pf = Y
queue = Y
rss = Y
diff --git a/drivers/net/txgbe/txgbe_flow.c b/drivers/net/txgbe/txgbe_flow.c
index 074bbe6aab..a227944458 100644
--- a/drivers/net/txgbe/txgbe_flow.c
+++ b/drivers/net/txgbe/txgbe_flow.c
@@ -1337,7 +1337,6 @@ txgbe_parse_fdir_act_attr(const struct rte_flow_attr *attr,
{
const struct rte_flow_action *act;
const struct rte_flow_action_queue *act_q;
- const struct rte_flow_action_mark *mark;
/* parse attr */
/* must be input direction */
@@ -1402,10 +1401,9 @@ txgbe_parse_fdir_act_attr(const struct rte_flow_attr *attr,
rule->fdirflags = TXGBE_FDIRPICMD_DROP;
}
- /* check if the next not void item is MARK */
+ /* nothing else supported */
act = next_no_void_action(actions, act);
- if (act->type != RTE_FLOW_ACTION_TYPE_MARK &&
- act->type != RTE_FLOW_ACTION_TYPE_END) {
+ if (act->type != RTE_FLOW_ACTION_TYPE_END) {
memset(rule, 0, sizeof(struct txgbe_fdir_rule));
rte_flow_error_set(error, EINVAL,
RTE_FLOW_ERROR_TYPE_ACTION,
@@ -1415,21 +1413,6 @@ txgbe_parse_fdir_act_attr(const struct rte_flow_attr *attr,
rule->soft_id = 0;
- if (act->type == RTE_FLOW_ACTION_TYPE_MARK) {
- mark = (const struct rte_flow_action_mark *)act->conf;
- rule->soft_id = mark->id;
- act = next_no_void_action(actions, act);
- }
-
- /* check if the next not void item is END */
- if (act->type != RTE_FLOW_ACTION_TYPE_END) {
- memset(rule, 0, sizeof(struct txgbe_fdir_rule));
- rte_flow_error_set(error, EINVAL,
- RTE_FLOW_ERROR_TYPE_ACTION,
- act, "Not supported action.");
- return -rte_errno;
- }
-
return 0;
}
@@ -1541,8 +1524,6 @@ txgbe_fdir_parse_flow_type(struct txgbe_atr_input *input, u8 ptid, bool tun)
* The next not void item must be END.
* ACTION:
* The first not void action should be QUEUE or DROP.
- * The second not void optional action should be MARK,
- * mark_id is a uint32_t number.
* The next not void action should be END.
* UDP/TCP/SCTP pattern example:
* ITEM Spec Mask
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-11-12 16:20:42.051101522 +0000
+++ 0029-net-txgbe-remove-unsupported-flow-action-mark.patch 2025-11-12 16:20:40.927716946 +0000
@@ -1 +1 @@
-From 7224536b051457ce2a9cfd6e433da9d4a7bc97ac Mon Sep 17 00:00:00 2001
+From de2218fdbe114ab09dd4003e2ad2da2c64147fc8 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 7224536b051457ce2a9cfd6e433da9d4a7bc97ac ]
+
@@ -9 +10,0 @@
-Cc: stable@dpdk.org
@@ -30 +31 @@
-index 5647165d52..a97588e57a 100644
+index 074bbe6aab..a227944458 100644
@@ -33 +34 @@
-@@ -1358,7 +1358,6 @@ txgbe_parse_fdir_act_attr(const struct rte_flow_attr *attr,
+@@ -1337,7 +1337,6 @@ txgbe_parse_fdir_act_attr(const struct rte_flow_attr *attr,
@@ -41 +42 @@
-@@ -1423,10 +1422,9 @@ txgbe_parse_fdir_act_attr(const struct rte_flow_attr *attr,
+@@ -1402,10 +1401,9 @@ txgbe_parse_fdir_act_attr(const struct rte_flow_attr *attr,
@@ -54 +55 @@
-@@ -1436,21 +1434,6 @@ txgbe_parse_fdir_act_attr(const struct rte_flow_attr *attr,
+@@ -1415,21 +1413,6 @@ txgbe_parse_fdir_act_attr(const struct rte_flow_attr *attr,
@@ -76 +77 @@
-@@ -1562,8 +1545,6 @@ txgbe_fdir_parse_flow_type(struct txgbe_atr_input *input, u8 ptid, bool tun)
+@@ -1541,8 +1524,6 @@ txgbe_fdir_parse_flow_type(struct txgbe_atr_input *input, u8 ptid, bool tun)
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/bonding: fix MAC address propagation in 802.3ad mode' has been queued to stable release 22.11.11
2025-11-12 16:52 ` patch 'test/hash: check memory allocation' " luca.boccassi
` (27 preceding siblings ...)
2025-11-12 16:52 ` patch 'net/txgbe: remove unsupported flow action mark' " luca.boccassi
@ 2025-11-12 16:52 ` luca.boccassi
2025-11-12 16:52 ` patch 'app/testpmd: fix DCB Tx port' " luca.boccassi
` (18 subsequent siblings)
47 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-11-12 16:52 UTC (permalink / raw)
To: Shani Peretz; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
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/14/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/171bfa4f2e8f727a334a54a76386f809a2b97955
Thanks.
Luca Boccassi
---
From 171bfa4f2e8f727a334a54a76386f809a2b97955 Mon Sep 17 00:00:00 2001
From: Shani Peretz <shperetz@nvidia.com>
Date: Wed, 5 Nov 2025 20:01:35 +0200
Subject: [PATCH] net/bonding: fix MAC address propagation in 802.3ad mode
[ upstream commit 8a2f21630658a7f3ff5c7564b9a2bcb0b681fb55 ]
When changing the MAC address of a bonding device in 802.3ad mode,
the new MAC was not propagated to the physical member NIC.
This caused the physical NIC to drop all data packets sent to the
new MAC address, resulting in connectivity loss.
It happens because the MAC update function only updated the
LACP layer (actor.system) but not the physical NIC hardware MAC
addresses.
This fix adds a call to rte_eth_dev_default_mac_addr_set() to update
the hardware MAC on each member port.
Bugzilla ID: 1158
Fixes: 46fb43683679 ("bond: add mode 4")
Signed-off-by: Shani Peretz <shperetz@nvidia.com>
---
drivers/net/bonding/rte_eth_bond_8023ad.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/drivers/net/bonding/rte_eth_bond_8023ad.c b/drivers/net/bonding/rte_eth_bond_8023ad.c
index 2a81ab5bf3..8ac51a3573 100644
--- a/drivers/net/bonding/rte_eth_bond_8023ad.c
+++ b/drivers/net/bonding/rte_eth_bond_8023ad.c
@@ -1183,6 +1183,14 @@ bond_mode_8023ad_mac_address_update(struct rte_eth_dev *bond_dev)
continue;
rte_ether_addr_copy(&internals->mode4.mac_addr, &slave->actor.system);
+
+ /* Update physical NIC hardware MAC address to match bonding device. */
+ if (rte_eth_dev_default_mac_addr_set(slave_id, &internals->mode4.mac_addr) != 0) {
+ RTE_BOND_LOG(ERR,
+ "Failed to update MAC address on member port %u",
+ slave_id);
+ }
+
/* Do nothing if this port is not an aggregator. In other case
* Set NTT flag on every port that use this aggregator. */
if (slave->aggregator_port_id != slave_id)
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-11-12 16:20:42.085206983 +0000
+++ 0030-net-bonding-fix-MAC-address-propagation-in-802.3ad-m.patch 2025-11-12 16:20:40.927716946 +0000
@@ -1 +1 @@
-From 8a2f21630658a7f3ff5c7564b9a2bcb0b681fb55 Mon Sep 17 00:00:00 2001
+From 171bfa4f2e8f727a334a54a76386f809a2b97955 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 8a2f21630658a7f3ff5c7564b9a2bcb0b681fb55 ]
+
@@ -20 +21,0 @@
-Cc: stable@dpdk.org
@@ -28 +29 @@
-index 1677615435..ba88f6d261 100644
+index 2a81ab5bf3..8ac51a3573 100644
@@ -31 +32 @@
-@@ -1186,6 +1186,14 @@ bond_mode_8023ad_mac_address_update(struct rte_eth_dev *bond_dev)
+@@ -1183,6 +1183,14 @@ bond_mode_8023ad_mac_address_update(struct rte_eth_dev *bond_dev)
@@ -34 +35 @@
- rte_ether_addr_copy(&internals->mode4.mac_addr, &member->actor.system);
+ rte_ether_addr_copy(&internals->mode4.mac_addr, &slave->actor.system);
@@ -37 +38 @@
-+ if (rte_eth_dev_default_mac_addr_set(member_id, &internals->mode4.mac_addr) != 0) {
++ if (rte_eth_dev_default_mac_addr_set(slave_id, &internals->mode4.mac_addr) != 0) {
@@ -40 +41 @@
-+ member_id);
++ slave_id);
@@ -45 +46 @@
- if (member->aggregator_port_id != member_id)
+ if (slave->aggregator_port_id != slave_id)
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'app/testpmd: fix DCB Tx port' has been queued to stable release 22.11.11
2025-11-12 16:52 ` patch 'test/hash: check memory allocation' " luca.boccassi
` (28 preceding siblings ...)
2025-11-12 16:52 ` patch 'net/bonding: fix MAC address propagation in 802.3ad mode' " luca.boccassi
@ 2025-11-12 16:52 ` luca.boccassi
2025-11-12 16:52 ` patch 'app/testpmd: fix DCB Rx queues' " luca.boccassi
` (17 subsequent siblings)
47 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-11-12 16:52 UTC (permalink / raw)
To: Chengwen Feng; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
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/14/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/c58af5916ae729827486c86460f471cf3b20aa97
Thanks.
Luca Boccassi
---
From c58af5916ae729827486c86460f471cf3b20aa97 Mon Sep 17 00:00:00 2001
From: Chengwen Feng <fengchengwen@huawei.com>
Date: Thu, 6 Nov 2025 08:29:19 +0800
Subject: [PATCH] app/testpmd: fix DCB Tx port
[ upstream commit 47012b7cbf78531e99b6ab3faa3a69e941ddbaa0 ]
The txp maybe invalid (e.g. start with only one port but set with 1),
this commit fix it by get txp from fwd_topology_tx_port_get() function.
An added benefit is that the DCB test also supports '--port-topology'
parameter.
Fixes: 1a572499beb6 ("app/testpmd: setup DCB forwarding based on traffic class")
Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
---
app/test-pmd/config.c | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)
diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c
index c76a8cb11c..376289232f 100644
--- a/app/test-pmd/config.c
+++ b/app/test-pmd/config.c
@@ -4557,7 +4557,7 @@ dcb_fwd_config_setup(void)
/* reinitialize forwarding streams */
init_fwd_streams();
sm_id = 0;
- txp = 1;
+ txp = fwd_topology_tx_port_get(rxp);
/* get the dcb info on the first RX and TX ports */
(void)rte_eth_dev_get_dcb_info(fwd_ports_ids[rxp], &rxp_dcb_info);
(void)rte_eth_dev_get_dcb_info(fwd_ports_ids[txp], &txp_dcb_info);
@@ -4605,11 +4605,8 @@ dcb_fwd_config_setup(void)
rxp++;
if (rxp >= nb_fwd_ports)
return;
+ txp = fwd_topology_tx_port_get(rxp);
/* get the dcb information on next RX and TX ports */
- if ((rxp & 0x1) == 0)
- txp = (portid_t) (rxp + 1);
- else
- txp = (portid_t) (rxp - 1);
rte_eth_dev_get_dcb_info(fwd_ports_ids[rxp], &rxp_dcb_info);
rte_eth_dev_get_dcb_info(fwd_ports_ids[txp], &txp_dcb_info);
}
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-11-12 16:20:42.120062909 +0000
+++ 0031-app-testpmd-fix-DCB-Tx-port.patch 2025-11-12 16:20:40.931717043 +0000
@@ -1 +1 @@
-From 47012b7cbf78531e99b6ab3faa3a69e941ddbaa0 Mon Sep 17 00:00:00 2001
+From c58af5916ae729827486c86460f471cf3b20aa97 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 47012b7cbf78531e99b6ab3faa3a69e941ddbaa0 ]
+
@@ -13 +14,0 @@
-Cc: stable@dpdk.org
@@ -21 +22 @@
-index 3ce2a14a1b..0f687018c7 100644
+index c76a8cb11c..376289232f 100644
@@ -24 +25 @@
-@@ -5187,7 +5187,7 @@ dcb_fwd_config_setup(void)
+@@ -4557,7 +4557,7 @@ dcb_fwd_config_setup(void)
@@ -33 +34 @@
-@@ -5235,11 +5235,8 @@ dcb_fwd_config_setup(void)
+@@ -4605,11 +4605,8 @@ dcb_fwd_config_setup(void)
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'app/testpmd: fix DCB Rx queues' has been queued to stable release 22.11.11
2025-11-12 16:52 ` patch 'test/hash: check memory allocation' " luca.boccassi
` (29 preceding siblings ...)
2025-11-12 16:52 ` patch 'app/testpmd: fix DCB Tx port' " luca.boccassi
@ 2025-11-12 16:52 ` luca.boccassi
2025-11-12 16:52 ` patch 'net/e1000/base: fix crash on init with GCC 13' " luca.boccassi
` (16 subsequent siblings)
47 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-11-12 16:52 UTC (permalink / raw)
To: Chengwen Feng; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
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/14/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/263e3b665b5d6c30dc3e058363fc1b31283c1cab
Thanks.
Luca Boccassi
---
From 263e3b665b5d6c30dc3e058363fc1b31283c1cab Mon Sep 17 00:00:00 2001
From: Chengwen Feng <fengchengwen@huawei.com>
Date: Thu, 6 Nov 2025 08:29:20 +0800
Subject: [PATCH] app/testpmd: fix DCB Rx queues
[ upstream commit 32387caaa00660ebe35be25f2371edb0069cc80a ]
The nb_rx_queue should get from rxp_dcb_info not txp_dcb_info, this
commit fix it.
Fixes: 1a572499beb6 ("app/testpmd: setup DCB forwarding based on traffic class")
Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
---
app/test-pmd/config.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c
index 376289232f..4dd4f02c1f 100644
--- a/app/test-pmd/config.c
+++ b/app/test-pmd/config.c
@@ -4575,7 +4575,7 @@ dcb_fwd_config_setup(void)
fwd_lcores[lc_id]->stream_idx;
rxq = rxp_dcb_info.tc_queue.tc_rxq[i][tc].base;
txq = txp_dcb_info.tc_queue.tc_txq[i][tc].base;
- nb_rx_queue = txp_dcb_info.tc_queue.tc_rxq[i][tc].nb_queue;
+ nb_rx_queue = rxp_dcb_info.tc_queue.tc_rxq[i][tc].nb_queue;
nb_tx_queue = txp_dcb_info.tc_queue.tc_txq[i][tc].nb_queue;
for (j = 0; j < nb_rx_queue; j++) {
struct fwd_stream *fs;
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-11-12 16:20:42.158178035 +0000
+++ 0032-app-testpmd-fix-DCB-Rx-queues.patch 2025-11-12 16:20:40.935717143 +0000
@@ -1 +1 @@
-From 32387caaa00660ebe35be25f2371edb0069cc80a Mon Sep 17 00:00:00 2001
+From 263e3b665b5d6c30dc3e058363fc1b31283c1cab Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 32387caaa00660ebe35be25f2371edb0069cc80a ]
+
@@ -10 +11,0 @@
-Cc: stable@dpdk.org
@@ -18 +19 @@
-index 0f687018c7..8557371488 100644
+index 376289232f..4dd4f02c1f 100644
@@ -21 +22 @@
-@@ -5205,7 +5205,7 @@ dcb_fwd_config_setup(void)
+@@ -4575,7 +4575,7 @@ dcb_fwd_config_setup(void)
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/e1000/base: fix crash on init with GCC 13' has been queued to stable release 22.11.11
2025-11-12 16:52 ` patch 'test/hash: check memory allocation' " luca.boccassi
` (30 preceding siblings ...)
2025-11-12 16:52 ` patch 'app/testpmd: fix DCB Rx queues' " luca.boccassi
@ 2025-11-12 16:52 ` luca.boccassi
2025-11-12 16:52 ` patch 'net/fm10k: fix build with GCC 16' " luca.boccassi
` (15 subsequent siblings)
47 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-11-12 16:52 UTC (permalink / raw)
To: Ciara Loftus; +Cc: Thierry Herbelot, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
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/14/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/6a53c0dc6d2334297e95c96048cc056c243ae71a
Thanks.
Luca Boccassi
---
From 6a53c0dc6d2334297e95c96048cc056c243ae71a Mon Sep 17 00:00:00 2001
From: Ciara Loftus <ciara.loftus@intel.com>
Date: Fri, 10 Oct 2025 12:58:48 +0000
Subject: [PATCH] net/e1000/base: fix crash on init with GCC 13
[ upstream commit 4d0b1e252a58f9cee89aa08d6e9742fa4a797e91 ]
The e1000 PMD crashes during initialisation in a Ubuntu 24.04 VM when
compiled with gcc-13 with -O3 optimisations. This patch introduces a
compiler barrier after the register read that was causing the issue.
Bugzilla ID: 1691
Fixes: af75078fece3 ("first public release")
Signed-off-by: Ciara Loftus <ciara.loftus@intel.com>
Tested-by: Thierry Herbelot <thierry.herbelot@6wind.com>
---
drivers/net/e1000/base/e1000_mac.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/net/e1000/base/e1000_mac.c b/drivers/net/e1000/base/e1000_mac.c
index 5bb77d9e09..1ab5db98f2 100644
--- a/drivers/net/e1000/base/e1000_mac.c
+++ b/drivers/net/e1000/base/e1000_mac.c
@@ -1826,6 +1826,7 @@ s32 e1000_id_led_init_generic(struct e1000_hw *hw)
return ret_val;
mac->ledctl_default = E1000_READ_REG(hw, E1000_LEDCTL);
+ rte_compiler_barrier();
mac->ledctl_mode1 = mac->ledctl_default;
mac->ledctl_mode2 = mac->ledctl_default;
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-11-12 16:20:42.194331786 +0000
+++ 0033-net-e1000-base-fix-crash-on-init-with-GCC-13.patch 2025-11-12 16:20:40.935717143 +0000
@@ -1 +1 @@
-From 4d0b1e252a58f9cee89aa08d6e9742fa4a797e91 Mon Sep 17 00:00:00 2001
+From 6a53c0dc6d2334297e95c96048cc056c243ae71a Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 4d0b1e252a58f9cee89aa08d6e9742fa4a797e91 ]
+
@@ -12 +13,0 @@
-Cc: stable@dpdk.org
@@ -17 +18 @@
- drivers/net/intel/e1000/base/e1000_mac.c | 1 +
+ drivers/net/e1000/base/e1000_mac.c | 1 +
@@ -20,5 +21,5 @@
-diff --git a/drivers/net/intel/e1000/base/e1000_mac.c b/drivers/net/intel/e1000/base/e1000_mac.c
-index 2fa97d12a9..41aae86ffe 100644
---- a/drivers/net/intel/e1000/base/e1000_mac.c
-+++ b/drivers/net/intel/e1000/base/e1000_mac.c
-@@ -1842,6 +1842,7 @@ s32 e1000_id_led_init_generic(struct e1000_hw *hw)
+diff --git a/drivers/net/e1000/base/e1000_mac.c b/drivers/net/e1000/base/e1000_mac.c
+index 5bb77d9e09..1ab5db98f2 100644
+--- a/drivers/net/e1000/base/e1000_mac.c
++++ b/drivers/net/e1000/base/e1000_mac.c
+@@ -1826,6 +1826,7 @@ s32 e1000_id_led_init_generic(struct e1000_hw *hw)
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/fm10k: fix build with GCC 16' has been queued to stable release 22.11.11
2025-11-12 16:52 ` patch 'test/hash: check memory allocation' " luca.boccassi
` (31 preceding siblings ...)
2025-11-12 16:52 ` patch 'net/e1000/base: fix crash on init with GCC 13' " luca.boccassi
@ 2025-11-12 16:52 ` luca.boccassi
2025-11-12 16:52 ` patch 'net/mlx4: fix unnecessary comma' " luca.boccassi
` (14 subsequent siblings)
47 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-11-12 16:52 UTC (permalink / raw)
To: Bruce Richardson; +Cc: Vladimir Medvedkin, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
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/14/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/7c64d80eb223dc05f31083ddd3b80d814017c80a
Thanks.
Luca Boccassi
---
From 7c64d80eb223dc05f31083ddd3b80d814017c80a Mon Sep 17 00:00:00 2001
From: Bruce Richardson <bruce.richardson@intel.com>
Date: Tue, 4 Nov 2025 11:15:15 +0000
Subject: [PATCH] net/fm10k: fix build with GCC 16
[ upstream commit 967d5fbb7b23700ccffccb9979d4f6acdac412c8 ]
Build error reported with GCC 16, due to a set but unused variable. Fix
the issue by removing the setting of the var and marking it as unused.
../drivers/net/intel/fm10k/base/fm10k_common.c: In function 'fm10k_unbind_hw_stats_q':
../drivers/net/intel/fm10k/base/fm10k_common.c:480:62: warning:
parameter 'idx' set but not used [-Wunused-but-set-parameter=]
480 | void fm10k_unbind_hw_stats_q(struct fm10k_hw_stats_q *q, u32 idx, u32 count)
Bugzilla ID: 1822
Fixes: 7223d200c227 ("fm10k: add base driver")
Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Vladimir Medvedkin <vladimir.medvedkin@intel.com>
---
drivers/net/fm10k/base/fm10k_common.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/net/fm10k/base/fm10k_common.c b/drivers/net/fm10k/base/fm10k_common.c
index b78d4b575b..677ef87608 100644
--- a/drivers/net/fm10k/base/fm10k_common.c
+++ b/drivers/net/fm10k/base/fm10k_common.c
@@ -477,11 +477,11 @@ void fm10k_update_hw_stats_q(struct fm10k_hw *hw, struct fm10k_hw_stats_q *q,
* Function invalidates the index values for the queues so any updates that
* may have happened are ignored and the base for the queue stats is reset.
**/
-void fm10k_unbind_hw_stats_q(struct fm10k_hw_stats_q *q, u32 idx, u32 count)
+void fm10k_unbind_hw_stats_q(struct fm10k_hw_stats_q *q, u32 idx __rte_unused, u32 count)
{
u32 i;
- for (i = 0; i < count; i++, idx++, q++) {
+ for (i = 0; i < count; i++, q++) {
q->rx_stats_idx = 0;
q->tx_stats_idx = 0;
}
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-11-12 16:20:42.230112559 +0000
+++ 0034-net-fm10k-fix-build-with-GCC-16.patch 2025-11-12 16:20:40.935717143 +0000
@@ -1 +1 @@
-From 967d5fbb7b23700ccffccb9979d4f6acdac412c8 Mon Sep 17 00:00:00 2001
+From 7c64d80eb223dc05f31083ddd3b80d814017c80a Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 967d5fbb7b23700ccffccb9979d4f6acdac412c8 ]
+
@@ -16 +17,0 @@
-Cc: stable@dpdk.org
@@ -21 +22 @@
- drivers/net/intel/fm10k/base/fm10k_common.c | 4 ++--
+ drivers/net/fm10k/base/fm10k_common.c | 4 ++--
@@ -24 +25 @@
-diff --git a/drivers/net/intel/fm10k/base/fm10k_common.c b/drivers/net/intel/fm10k/base/fm10k_common.c
+diff --git a/drivers/net/fm10k/base/fm10k_common.c b/drivers/net/fm10k/base/fm10k_common.c
@@ -26,2 +27,2 @@
---- a/drivers/net/intel/fm10k/base/fm10k_common.c
-+++ b/drivers/net/intel/fm10k/base/fm10k_common.c
+--- a/drivers/net/fm10k/base/fm10k_common.c
++++ b/drivers/net/fm10k/base/fm10k_common.c
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/mlx4: fix unnecessary comma' has been queued to stable release 22.11.11
2025-11-12 16:52 ` patch 'test/hash: check memory allocation' " luca.boccassi
` (32 preceding siblings ...)
2025-11-12 16:52 ` patch 'net/fm10k: fix build with GCC 16' " luca.boccassi
@ 2025-11-12 16:52 ` luca.boccassi
2025-11-12 16:52 ` patch 'net/mlx5: fix unnecessary commas' " luca.boccassi
` (13 subsequent siblings)
47 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-11-12 16:52 UTC (permalink / raw)
To: Gregory Etelson; +Cc: Dariusz Sosnowski, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
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/14/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/746c32166e379fcfc50ef3fb320b08673c01536e
Thanks.
Luca Boccassi
---
From 746c32166e379fcfc50ef3fb320b08673c01536e Mon Sep 17 00:00:00 2001
From: Gregory Etelson <getelson@nvidia.com>
Date: Wed, 29 Oct 2025 11:55:03 +0200
Subject: [PATCH] net/mlx4: fix unnecessary comma
[ upstream commit fdffa18268a70857865141cd89066eb6e025c0d2 ]
The patch fixes compilation warnings produced by clang -Wcomma option.
Bugzilla ID: 1810
Fixes: ba576975a89b ("net/mlx4: support hardware TSO")
Signed-off-by: Gregory Etelson <getelson@nvidia.com>
Acked-by: Dariusz Sosnowski <dsosnowski@nvidia.com>
---
drivers/net/mlx4/mlx4_rxtx.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/mlx4/mlx4_rxtx.c b/drivers/net/mlx4/mlx4_rxtx.c
index 059e432a63..7f28ec9944 100644
--- a/drivers/net/mlx4/mlx4_rxtx.c
+++ b/drivers/net/mlx4/mlx4_rxtx.c
@@ -638,7 +638,7 @@ mlx4_tx_burst_fill_tso_hdr(struct rte_mbuf *buf,
thdr.vto = sq->buf;
/* New TXBB, stash the first 32bits for later use. */
pv[*pv_counter].dst = (volatile uint32_t *)thdr.to;
- pv[(*pv_counter)++].val = *(uint32_t *)from,
+ pv[(*pv_counter)++].val = *(uint32_t *)from;
from += sizeof(uint32_t);
thdr.to += sizeof(uint32_t);
remain_size -= txbb_avail_space + sizeof(uint32_t);
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-11-12 16:20:42.263422309 +0000
+++ 0035-net-mlx4-fix-unnecessary-comma.patch 2025-11-12 16:20:40.939717241 +0000
@@ -1 +1 @@
-From fdffa18268a70857865141cd89066eb6e025c0d2 Mon Sep 17 00:00:00 2001
+From 746c32166e379fcfc50ef3fb320b08673c01536e Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit fdffa18268a70857865141cd89066eb6e025c0d2 ]
+
@@ -10 +11,0 @@
-Cc: stable@dpdk.org
@@ -19 +20 @@
-index 947cae491c..a4df6f7bcb 100644
+index 059e432a63..7f28ec9944 100644
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/mlx5: fix unnecessary commas' has been queued to stable release 22.11.11
2025-11-12 16:52 ` patch 'test/hash: check memory allocation' " luca.boccassi
` (33 preceding siblings ...)
2025-11-12 16:52 ` patch 'net/mlx4: fix unnecessary comma' " luca.boccassi
@ 2025-11-12 16:52 ` luca.boccassi
2025-11-12 16:52 ` patch 'net/mlx5: fix multi-process Tx default rules' " luca.boccassi
` (12 subsequent siblings)
47 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-11-12 16:52 UTC (permalink / raw)
To: Gregory Etelson; +Cc: Dariusz Sosnowski, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
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/14/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/c48bc0174fc2cb050a6b3f2f7205b588ecb039b7
Thanks.
Luca Boccassi
---
From c48bc0174fc2cb050a6b3f2f7205b588ecb039b7 Mon Sep 17 00:00:00 2001
From: Gregory Etelson <getelson@nvidia.com>
Date: Wed, 29 Oct 2025 11:55:04 +0200
Subject: [PATCH] net/mlx5: fix unnecessary commas
[ upstream commit 3b769d8389080ef0fd1b34765b9844db8f40729a ]
The patch fixes compilation warnings produced by clang -Wcomma option.
Bugzilla ID: 1810
Fixes: 630a587bfb37 ("net/mlx5: support matching on VXLAN reserved field")
Fixes: 86d259cec852 ("net/mlx5: separate Tx queue object creations")
Fixes: bc1d90a3cf6f ("net/mlx5: fix build with Direct Verbs disabled")
Fixes: 444320186393 ("net/mlx5: support meter creation with policy")
Fixes: 821a6a5cc495 ("net/mlx5: add metadata split for compatibility")
Signed-off-by: Gregory Etelson <getelson@nvidia.com>
Acked-by: Dariusz Sosnowski <dsosnowski@nvidia.com>
---
drivers/net/mlx5/linux/mlx5_os.c | 4 ++--
drivers/net/mlx5/linux/mlx5_verbs.c | 2 +-
drivers/net/mlx5/mlx5_flow.c | 12 ++++++------
drivers/net/mlx5/mlx5_flow_dv.c | 2 +-
4 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/drivers/net/mlx5/linux/mlx5_os.c b/drivers/net/mlx5/linux/mlx5_os.c
index fc7d5f68e7..028b9adece 100644
--- a/drivers/net/mlx5/linux/mlx5_os.c
+++ b/drivers/net/mlx5/linux/mlx5_os.c
@@ -419,8 +419,8 @@ __mlx5_discovery_misc5_cap(struct mlx5_priv *priv)
DRV_LOG(INFO, "No SW steering support");
return;
}
- dv_attr.type = IBV_FLOW_ATTR_NORMAL,
- dv_attr.match_mask = (void *)&matcher_mask,
+ dv_attr.type = IBV_FLOW_ATTR_NORMAL;
+ dv_attr.match_mask = (void *)&matcher_mask;
dv_attr.match_criteria_enable =
(1 << MLX5_MATCH_CRITERIA_ENABLE_OUTER_BIT) |
(1 << MLX5_MATCH_CRITERIA_ENABLE_MISC5_BIT);
diff --git a/drivers/net/mlx5/linux/mlx5_verbs.c b/drivers/net/mlx5/linux/mlx5_verbs.c
index 70761d2299..befe9e38b5 100644
--- a/drivers/net/mlx5/linux/mlx5_verbs.c
+++ b/drivers/net/mlx5/linux/mlx5_verbs.c
@@ -883,7 +883,7 @@ mlx5_txq_ibv_qp_create(struct rte_eth_dev *dev, uint16_t idx)
* dev_cap.max_sge limit and will still work properly.
*/
qp_attr.cap.max_send_sge = 1;
- qp_attr.qp_type = IBV_QPT_RAW_PACKET,
+ qp_attr.qp_type = IBV_QPT_RAW_PACKET;
/* Do *NOT* enable this, completions events are managed per Tx burst. */
qp_attr.sq_sig_all = 0;
qp_attr.pd = priv->sh->cdev->pd;
diff --git a/drivers/net/mlx5/mlx5_flow.c b/drivers/net/mlx5/mlx5_flow.c
index ea637ea9b0..b69f578ea4 100644
--- a/drivers/net/mlx5/mlx5_flow.c
+++ b/drivers/net/mlx5/mlx5_flow.c
@@ -10426,12 +10426,12 @@ flow_tunnel_add_default_miss(struct rte_eth_dev *dev,
(error, ENOMEM,
RTE_FLOW_ERROR_TYPE_ACTION_CONF,
NULL, "invalid default miss RSS");
- ctx->action_rss.func = RTE_ETH_HASH_FUNCTION_DEFAULT,
- ctx->action_rss.level = 0,
- ctx->action_rss.types = priv->rss_conf.rss_hf,
- ctx->action_rss.key_len = priv->rss_conf.rss_key_len,
- ctx->action_rss.queue_num = priv->reta_idx_n,
- ctx->action_rss.key = priv->rss_conf.rss_key,
+ ctx->action_rss.func = RTE_ETH_HASH_FUNCTION_DEFAULT;
+ ctx->action_rss.level = 0;
+ ctx->action_rss.types = priv->rss_conf.rss_hf;
+ ctx->action_rss.key_len = priv->rss_conf.rss_key_len;
+ ctx->action_rss.queue_num = priv->reta_idx_n;
+ ctx->action_rss.key = priv->rss_conf.rss_key;
ctx->action_rss.queue = ctx->queue;
if (!priv->reta_idx_n || !priv->rxqs_n)
return rte_flow_error_set
diff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow_dv.c
index f036b14a7b..5b8e022f34 100644
--- a/drivers/net/mlx5/mlx5_flow_dv.c
+++ b/drivers/net/mlx5/mlx5_flow_dv.c
@@ -17709,7 +17709,7 @@ flow_dv_create_mtr_tbls(struct rte_eth_dev *dev,
}
}
/* Create default matcher in drop table. */
- matcher.tbl = mtrmng->drop_tbl[domain],
+ matcher.tbl = mtrmng->drop_tbl[domain];
tbl_data = container_of(mtrmng->drop_tbl[domain],
struct mlx5_flow_tbl_data_entry, tbl);
if (!mtrmng->def_matcher[domain]) {
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-11-12 16:20:42.297957426 +0000
+++ 0036-net-mlx5-fix-unnecessary-commas.patch 2025-11-12 16:20:40.959717733 +0000
@@ -1 +1 @@
-From 3b769d8389080ef0fd1b34765b9844db8f40729a Mon Sep 17 00:00:00 2001
+From c48bc0174fc2cb050a6b3f2f7205b588ecb039b7 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 3b769d8389080ef0fd1b34765b9844db8f40729a ]
+
@@ -14 +15,0 @@
-Cc: stable@dpdk.org
@@ -23,2 +24 @@
- drivers/net/mlx5/mlx5_nta_split.c | 4 ++--
- 5 files changed, 12 insertions(+), 12 deletions(-)
+ 4 files changed, 10 insertions(+), 10 deletions(-)
@@ -27 +27 @@
-index 8d11b1ac3a..c742e0f282 100644
+index fc7d5f68e7..028b9adece 100644
@@ -30 +30 @@
-@@ -431,8 +431,8 @@ __mlx5_discovery_misc5_cap(struct mlx5_priv *priv)
+@@ -419,8 +419,8 @@ __mlx5_discovery_misc5_cap(struct mlx5_priv *priv)
@@ -42 +42 @@
-index 9011319a3e..01d3d6ae5d 100644
+index 70761d2299..befe9e38b5 100644
@@ -55 +55 @@
-index 1de398982a..f354008a60 100644
+index ea637ea9b0..b69f578ea4 100644
@@ -58 +58 @@
-@@ -11132,12 +11132,12 @@ flow_tunnel_add_default_miss(struct rte_eth_dev *dev,
+@@ -10426,12 +10426,12 @@ flow_tunnel_add_default_miss(struct rte_eth_dev *dev,
@@ -78 +78 @@
-index bcce1597e2..1564bd7cbe 100644
+index f036b14a7b..5b8e022f34 100644
@@ -81 +81 @@
-@@ -18903,7 +18903,7 @@ flow_dv_create_mtr_tbls(struct rte_eth_dev *dev,
+@@ -17709,7 +17709,7 @@ flow_dv_create_mtr_tbls(struct rte_eth_dev *dev,
@@ -90,15 +89,0 @@
-diff --git a/drivers/net/mlx5/mlx5_nta_split.c b/drivers/net/mlx5/mlx5_nta_split.c
-index 6a85ab7fd1..c95da56d72 100644
---- a/drivers/net/mlx5/mlx5_nta_split.c
-+++ b/drivers/net/mlx5/mlx5_nta_split.c
-@@ -345,8 +345,8 @@ flow_nta_mreg_create_cb(void *tool_ctx, void *cb_ctx)
- /* (match REG 'tag') or all. */
- items[1].type = RTE_FLOW_ITEM_TYPE_END;
- /* (Mark) or void + copy to Rx meta + jump to the MREG_ACT_TABLE_GROUP. */
-- actions[1].type = RTE_FLOW_ACTION_TYPE_MODIFY_FIELD,
-- actions[1].conf = &rx_meta,
-+ actions[1].type = RTE_FLOW_ACTION_TYPE_MODIFY_FIELD;
-+ actions[1].conf = &rx_meta;
- actions[2].type = RTE_FLOW_ACTION_TYPE_JUMP;
- actions[2].conf = &jump;
- actions[3].type = RTE_FLOW_ACTION_TYPE_END;
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/mlx5: fix multi-process Tx default rules' has been queued to stable release 22.11.11
2025-11-12 16:52 ` patch 'test/hash: check memory allocation' " luca.boccassi
` (34 preceding siblings ...)
2025-11-12 16:52 ` patch 'net/mlx5: fix unnecessary commas' " luca.boccassi
@ 2025-11-12 16:52 ` luca.boccassi
2025-11-12 16:52 ` patch 'net/mlx5: store MTU at Rx queue allocation time' " luca.boccassi
` (11 subsequent siblings)
47 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-11-12 16:52 UTC (permalink / raw)
To: Michael Baum; +Cc: Dariusz Sosnowski, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
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/14/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/4f0537afcc4522f5f025d6140ccec584782656fa
Thanks.
Luca Boccassi
---
From 4f0537afcc4522f5f025d6140ccec584782656fa Mon Sep 17 00:00:00 2001
From: Michael Baum <michaelba@nvidia.com>
Date: Wed, 29 Oct 2025 17:57:08 +0200
Subject: [PATCH] net/mlx5: fix multi-process Tx default rules
[ upstream commit 2f1bb792ad51aeb2da00198a63422fc478131bd5 ]
When representor matching is disabled, an egress default rule is
inserted which matches all and copies REG_A to REG_C_1 (when dv_xmeta_en
== 4) and jump to group 1. All user rules started from group 1.
When 2 processes are working together, the first one creates this flow
rule and the second one is failed with errno EEXIST. This renders all
user egress rules in 2nd process to be invalid.
This patch changes this default rule match on SQs.
Fixes: 483181f7b6dd ("net/mlx5: support device control of representor matching")
Signed-off-by: Michael Baum <michaelba@nvidia.com>
Acked-by: Dariusz Sosnowski <dsosnowski@nvidia.com>
---
drivers/net/mlx5/mlx5_flow.h | 4 +++-
drivers/net/mlx5/mlx5_flow_hw.c | 24 +++++++++++-------------
drivers/net/mlx5/mlx5_trigger.c | 25 +++++++++++++------------
drivers/net/mlx5/mlx5_txq.c | 8 ++++++++
4 files changed, 35 insertions(+), 26 deletions(-)
diff --git a/drivers/net/mlx5/mlx5_flow.h b/drivers/net/mlx5/mlx5_flow.h
index 39ca4a6599..ae6d9d45c2 100644
--- a/drivers/net/mlx5/mlx5_flow.h
+++ b/drivers/net/mlx5/mlx5_flow.h
@@ -2623,7 +2623,9 @@ int mlx5_flow_hw_esw_create_sq_miss_flow(struct rte_eth_dev *dev,
int mlx5_flow_hw_esw_destroy_sq_miss_flow(struct rte_eth_dev *dev,
uint32_t sqn);
int mlx5_flow_hw_esw_create_default_jump_flow(struct rte_eth_dev *dev);
-int mlx5_flow_hw_create_tx_default_mreg_copy_flow(struct rte_eth_dev *dev);
+int mlx5_flow_hw_create_tx_default_mreg_copy_flow(struct rte_eth_dev *dev,
+ uint32_t sqn,
+ bool external);
int mlx5_flow_hw_tx_repr_matching_flow(struct rte_eth_dev *dev, uint32_t sqn, bool external);
int mlx5_flow_hw_lacp_rx_flow(struct rte_eth_dev *dev);
int mlx5_flow_actions_validate(struct rte_eth_dev *dev,
diff --git a/drivers/net/mlx5/mlx5_flow_hw.c b/drivers/net/mlx5/mlx5_flow_hw.c
index df02bd237c..d78520710b 100644
--- a/drivers/net/mlx5/mlx5_flow_hw.c
+++ b/drivers/net/mlx5/mlx5_flow_hw.c
@@ -6247,7 +6247,7 @@ flow_hw_create_tx_default_mreg_copy_table(struct rte_eth_dev *dev,
.priority = MLX5_HW_LOWEST_PRIO_ROOT,
.egress = 1,
},
- .nb_flows = 1, /* One default flow rule for all. */
+ .nb_flows = MLX5_HW_CTRL_FLOW_NB_RULES,
};
struct mlx5_flow_template_table_cfg tx_tbl_cfg = {
.attr = tx_tbl_attr,
@@ -9272,21 +9272,18 @@ mlx5_flow_hw_esw_create_default_jump_flow(struct rte_eth_dev *dev)
}
int
-mlx5_flow_hw_create_tx_default_mreg_copy_flow(struct rte_eth_dev *dev)
+mlx5_flow_hw_create_tx_default_mreg_copy_flow(struct rte_eth_dev *dev, uint32_t sqn, bool external)
{
struct mlx5_priv *priv = dev->data->dev_private;
- struct rte_flow_item_eth promisc = {
- .dst.addr_bytes = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
- .src.addr_bytes = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
- .type = 0,
+ struct mlx5_rte_flow_item_sq sq_spec = {
+ .queue = sqn,
};
- struct rte_flow_item eth_all[] = {
- [0] = {
- .type = RTE_FLOW_ITEM_TYPE_ETH,
- .spec = &promisc,
- .mask = &promisc,
+ struct rte_flow_item items[] = {
+ {
+ .type = (enum rte_flow_item_type)MLX5_RTE_FLOW_ITEM_TYPE_SQ,
+ .spec = &sq_spec,
},
- [1] = {
+ {
.type = RTE_FLOW_ITEM_TYPE_END,
},
};
@@ -9316,6 +9313,7 @@ mlx5_flow_hw_create_tx_default_mreg_copy_flow(struct rte_eth_dev *dev)
};
struct mlx5_hw_ctrl_flow_info flow_info = {
.type = MLX5_HW_CTRL_FLOW_TYPE_TX_META_COPY,
+ .tx_repr_sq = sqn,
};
MLX5_ASSERT(priv->master);
@@ -9325,7 +9323,7 @@ mlx5_flow_hw_create_tx_default_mreg_copy_flow(struct rte_eth_dev *dev)
return 0;
return flow_hw_create_ctrl_flow(dev, dev,
priv->hw_ctrl_fdb->hw_tx_meta_cpy_tbl,
- eth_all, 0, copy_reg_action, 0, &flow_info, false);
+ items, 0, copy_reg_action, 0, &flow_info, external);
}
int
diff --git a/drivers/net/mlx5/mlx5_trigger.c b/drivers/net/mlx5/mlx5_trigger.c
index af25af47f8..1b19f79822 100644
--- a/drivers/net/mlx5/mlx5_trigger.c
+++ b/drivers/net/mlx5/mlx5_trigger.c
@@ -1479,18 +1479,6 @@ mlx5_traffic_enable_hws(struct rte_eth_dev *dev)
unsigned int i;
int ret;
- /*
- * With extended metadata enabled, the Tx metadata copy is handled by default
- * Tx tagging flow rules, so default Tx flow rule is not needed. It is only
- * required when representor matching is disabled.
- */
- if (config->dv_esw_en &&
- !config->repr_matching &&
- config->dv_xmeta_en == MLX5_XMETA_MODE_META32_HWS &&
- priv->master) {
- if (mlx5_flow_hw_create_tx_default_mreg_copy_flow(dev))
- goto error;
- }
for (i = 0; i < priv->txqs_n; ++i) {
struct mlx5_txq_ctrl *txq = mlx5_txq_get(dev, i);
uint32_t queue;
@@ -1512,6 +1500,19 @@ mlx5_traffic_enable_hws(struct rte_eth_dev *dev)
goto error;
}
}
+ /*
+ * With extended metadata enabled, the Tx metadata copy is handled by default
+ * Tx tagging flow rules, so default Tx flow rule is not needed. It is only
+ * required when representor matching is disabled.
+ */
+ if (config->dv_esw_en && !config->repr_matching &&
+ config->dv_xmeta_en == MLX5_XMETA_MODE_META32_HWS &&
+ (priv->master || priv->representor)) {
+ if (mlx5_flow_hw_create_tx_default_mreg_copy_flow(dev, queue, false)) {
+ mlx5_txq_release(dev, i);
+ goto error;
+ }
+ }
mlx5_txq_release(dev, i);
}
if (config->fdb_def_rule) {
diff --git a/drivers/net/mlx5/mlx5_txq.c b/drivers/net/mlx5/mlx5_txq.c
index 62105a3e54..34c7ef400d 100644
--- a/drivers/net/mlx5/mlx5_txq.c
+++ b/drivers/net/mlx5/mlx5_txq.c
@@ -1334,6 +1334,14 @@ rte_pmd_mlx5_external_sq_enable(uint16_t port_id, uint32_t sq_num)
mlx5_flow_hw_esw_destroy_sq_miss_flow(dev, sq_num);
return -rte_errno;
}
+
+ if (!priv->sh->config.repr_matching &&
+ priv->sh->config.dv_xmeta_en == MLX5_XMETA_MODE_META32_HWS &&
+ mlx5_flow_hw_create_tx_default_mreg_copy_flow(dev, sq_num, true)) {
+ if (sq_miss_created)
+ mlx5_flow_hw_esw_destroy_sq_miss_flow(dev, sq_num);
+ return -rte_errno;
+ }
return 0;
}
#endif
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-11-12 16:20:42.352222182 +0000
+++ 0037-net-mlx5-fix-multi-process-Tx-default-rules.patch 2025-11-12 16:20:40.971718030 +0000
@@ -1 +1 @@
-From 2f1bb792ad51aeb2da00198a63422fc478131bd5 Mon Sep 17 00:00:00 2001
+From 4f0537afcc4522f5f025d6140ccec584782656fa Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 2f1bb792ad51aeb2da00198a63422fc478131bd5 ]
+
@@ -17 +18,0 @@
-Cc: stable@dpdk.org
@@ -29 +30 @@
-index c525516672..c5905ebfac 100644
+index 39ca4a6599..ae6d9d45c2 100644
@@ -32 +33 @@
-@@ -3565,7 +3565,9 @@ int mlx5_flow_hw_esw_create_sq_miss_flow(struct rte_eth_dev *dev,
+@@ -2623,7 +2623,9 @@ int mlx5_flow_hw_esw_create_sq_miss_flow(struct rte_eth_dev *dev,
@@ -44 +45 @@
-index 491a78a0de..d945c88eb0 100644
+index df02bd237c..d78520710b 100644
@@ -47 +48 @@
-@@ -10643,7 +10643,7 @@ flow_hw_create_tx_default_mreg_copy_table(struct rte_eth_dev *dev,
+@@ -6247,7 +6247,7 @@ flow_hw_create_tx_default_mreg_copy_table(struct rte_eth_dev *dev,
@@ -56 +57 @@
-@@ -16004,21 +16004,18 @@ mlx5_flow_hw_esw_create_default_jump_flow(struct rte_eth_dev *dev)
+@@ -9272,21 +9272,18 @@ mlx5_flow_hw_esw_create_default_jump_flow(struct rte_eth_dev *dev)
@@ -65,3 +66,3 @@
-- .hdr.dst_addr.addr_bytes = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
-- .hdr.src_addr.addr_bytes = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
-- .hdr.ether_type = 0,
+- .dst.addr_bytes = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+- .src.addr_bytes = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+- .type = 0,
@@ -86 +87 @@
-@@ -16048,6 +16045,7 @@ mlx5_flow_hw_create_tx_default_mreg_copy_flow(struct rte_eth_dev *dev)
+@@ -9316,6 +9313,7 @@ mlx5_flow_hw_create_tx_default_mreg_copy_flow(struct rte_eth_dev *dev)
@@ -88,2 +89,2 @@
- struct mlx5_ctrl_flow_info flow_info = {
- .type = MLX5_CTRL_FLOW_TYPE_TX_META_COPY,
+ struct mlx5_hw_ctrl_flow_info flow_info = {
+ .type = MLX5_HW_CTRL_FLOW_TYPE_TX_META_COPY,
@@ -94 +95 @@
-@@ -16057,7 +16055,7 @@ mlx5_flow_hw_create_tx_default_mreg_copy_flow(struct rte_eth_dev *dev)
+@@ -9325,7 +9323,7 @@ mlx5_flow_hw_create_tx_default_mreg_copy_flow(struct rte_eth_dev *dev)
@@ -104 +105 @@
-index 916ac03c16..e6acb56d4d 100644
+index af25af47f8..1b19f79822 100644
@@ -107 +108 @@
-@@ -1606,18 +1606,6 @@ mlx5_traffic_enable_hws(struct rte_eth_dev *dev)
+@@ -1479,18 +1479,6 @@ mlx5_traffic_enable_hws(struct rte_eth_dev *dev)
@@ -126 +127 @@
-@@ -1639,6 +1627,19 @@ mlx5_traffic_enable_hws(struct rte_eth_dev *dev)
+@@ -1512,6 +1500,19 @@ mlx5_traffic_enable_hws(struct rte_eth_dev *dev)
@@ -147 +148 @@
-index b090d8274d..834ca541d5 100644
+index 62105a3e54..34c7ef400d 100644
@@ -150 +151 @@
-@@ -1459,6 +1459,14 @@ rte_pmd_mlx5_external_sq_enable(uint16_t port_id, uint32_t sq_num)
+@@ -1334,6 +1334,14 @@ rte_pmd_mlx5_external_sq_enable(uint16_t port_id, uint32_t sq_num)
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/mlx5: store MTU at Rx queue allocation time' has been queued to stable release 22.11.11
2025-11-12 16:52 ` patch 'test/hash: check memory allocation' " luca.boccassi
` (35 preceding siblings ...)
2025-11-12 16:52 ` patch 'net/mlx5: fix multi-process Tx default rules' " luca.boccassi
@ 2025-11-12 16:52 ` luca.boccassi
2025-11-12 16:52 ` patch 'net/mlx5: fix indirect RSS action hash' " luca.boccassi
` (10 subsequent siblings)
47 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-11-12 16:52 UTC (permalink / raw)
To: Adrian Schollmeyer; +Cc: Dariusz Sosnowski, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
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/14/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/a4a4d8f3386a0e32ecbd808689561c70747fcb71
Thanks.
Luca Boccassi
---
From a4a4d8f3386a0e32ecbd808689561c70747fcb71 Mon Sep 17 00:00:00 2001
From: Adrian Schollmeyer <a.schollmeyer@syseleven.de>
Date: Thu, 30 Oct 2025 10:13:13 +0100
Subject: [PATCH] net/mlx5: store MTU at Rx queue allocation time
[ upstream commit 4414eb800708475bf1b38794434e590c7204d9d3 ]
For shared Rx queues, equal MTU for all ports sharing queues is enforced
using mlx5_shared_rxq_match() to make sure, the memory allocated in the
Rx buffer is large enough. The check uses the MTU as reported by the
ports' private dev_data structs, which contain the MTU currently set for
the device. In case one port's MTU is altered after Rx queues are
allocated and then a second port joins the shared Rx queue with the old,
yet correct MTU, the check fails despite the fact that the Rx buffer
size is correct for both ports.
This patch adds a new entry to the Rx queue control structure that
captures the MTU at the time the Rx buffer was allocated, since this is
the relevant information that needs to be checked when a port joins a
shared Rx queue.
Fixes: 09c2555303be ("net/mlx5: support shared Rx queue")
Signed-off-by: Adrian Schollmeyer <a.schollmeyer@syseleven.de>
Acked-by: Dariusz Sosnowski <dsosnowski@nvidia.com>
---
.mailmap | 1 +
drivers/net/mlx5/mlx5_rx.h | 1 +
drivers/net/mlx5/mlx5_rxq.c | 6 +++++-
3 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/.mailmap b/.mailmap
index ddc091adac..f59db4fb3a 100644
--- a/.mailmap
+++ b/.mailmap
@@ -18,6 +18,7 @@ Adam Ludkiewicz <adam.ludkiewicz@intel.com>
Adham Masarwah <adham@nvidia.com> <adham@mellanox.com>
Adrian Moreno <amorenoz@redhat.com>
Adrian Podlawski <adrian.podlawski@intel.com>
+Adrian Schollmeyer <a.schollmeyer@syseleven.de>
Adrien Mazarguil <adrien.mazarguil@6wind.com>
Ady Agbarih <adypodoman@gmail.com>
Agalya Babu RadhaKrishnan <agalyax.babu.radhakrishnan@intel.com>
diff --git a/drivers/net/mlx5/mlx5_rx.h b/drivers/net/mlx5/mlx5_rx.h
index 588d83a073..1467e1dd49 100644
--- a/drivers/net/mlx5/mlx5_rx.h
+++ b/drivers/net/mlx5/mlx5_rx.h
@@ -154,6 +154,7 @@ struct mlx5_rxq_data {
/* RX queue control descriptor. */
struct mlx5_rxq_ctrl {
struct mlx5_rxq_data rxq; /* Data path structure. */
+ uint16_t mtu; /* Original MTU that the queue was allocated with. */
LIST_ENTRY(mlx5_rxq_ctrl) next; /* Pointer to the next element. */
LIST_HEAD(priv, mlx5_rxq_priv) owners; /* Owner rxq list. */
struct mlx5_rxq_obj *obj; /* Verbs/DevX elements. */
diff --git a/drivers/net/mlx5/mlx5_rxq.c b/drivers/net/mlx5/mlx5_rxq.c
index b1834aac7c..040273486f 100644
--- a/drivers/net/mlx5/mlx5_rxq.c
+++ b/drivers/net/mlx5/mlx5_rxq.c
@@ -776,7 +776,7 @@ mlx5_shared_rxq_match(struct mlx5_rxq_ctrl *rxq_ctrl, struct rte_eth_dev *dev,
dev->data->port_id, idx);
return false;
}
- if (priv->mtu != spriv->mtu) {
+ if (priv->mtu != rxq_ctrl->mtu) {
DRV_LOG(ERR, "port %u queue index %u failed to join shared group: mtu mismatch",
dev->data->port_id, idx);
return false;
@@ -1765,6 +1765,10 @@ mlx5_rxq_new(struct rte_eth_dev *dev, uint16_t idx, uint16_t desc,
}
LIST_INIT(&tmpl->owners);
MLX5_ASSERT(n_seg && n_seg <= MLX5_MAX_RXQ_NSEG);
+ /*
+ * Save the original MTU to check against for shared rx queues.
+ */
+ tmpl->mtu = dev->data->mtu;
/*
* Save the original segment configuration in the shared queue
* descriptor for the later check on the sibling queue creation.
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-11-12 16:20:42.402144512 +0000
+++ 0038-net-mlx5-store-MTU-at-Rx-queue-allocation-time.patch 2025-11-12 16:20:40.971718030 +0000
@@ -1 +1 @@
-From 4414eb800708475bf1b38794434e590c7204d9d3 Mon Sep 17 00:00:00 2001
+From a4a4d8f3386a0e32ecbd808689561c70747fcb71 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 4414eb800708475bf1b38794434e590c7204d9d3 ]
+
@@ -21 +22,0 @@
-Cc: stable@dpdk.org
@@ -32 +33 @@
-index 1fb3fb5128..50a59a596a 100644
+index ddc091adac..f59db4fb3a 100644
@@ -35 +36,2 @@
-@@ -21,6 +21,7 @@ Adham Masarwah <adham@nvidia.com> <adham@mellanox.com>
+@@ -18,6 +18,7 @@ Adam Ludkiewicz <adam.ludkiewicz@intel.com>
+ Adham Masarwah <adham@nvidia.com> <adham@mellanox.com>
@@ -37 +38,0 @@
- Adrian Pielech <adrian.pielech@intel.com>
@@ -44 +45 @@
-index 7be31066a5..127abe41fb 100644
+index 588d83a073..1467e1dd49 100644
@@ -47 +48 @@
-@@ -176,6 +176,7 @@ struct __rte_cache_aligned mlx5_rxq_data {
+@@ -154,6 +154,7 @@ struct mlx5_rxq_data {
@@ -56 +57 @@
-index 1425886a22..2264dea877 100644
+index b1834aac7c..040273486f 100644
@@ -59 +60 @@
-@@ -780,7 +780,7 @@ mlx5_shared_rxq_match(struct mlx5_rxq_ctrl *rxq_ctrl, struct rte_eth_dev *dev,
+@@ -776,7 +776,7 @@ mlx5_shared_rxq_match(struct mlx5_rxq_ctrl *rxq_ctrl, struct rte_eth_dev *dev,
@@ -68 +69 @@
-@@ -1812,6 +1812,10 @@ mlx5_rxq_new(struct rte_eth_dev *dev, uint16_t idx, uint16_t desc,
+@@ -1765,6 +1765,10 @@ mlx5_rxq_new(struct rte_eth_dev *dev, uint16_t idx, uint16_t desc,
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/mlx5: fix indirect RSS action hash' has been queued to stable release 22.11.11
2025-11-12 16:52 ` patch 'test/hash: check memory allocation' " luca.boccassi
` (36 preceding siblings ...)
2025-11-12 16:52 ` patch 'net/mlx5: store MTU at Rx queue allocation time' " luca.boccassi
@ 2025-11-12 16:52 ` luca.boccassi
2025-11-12 16:52 ` patch 'net/mlx5: fix indirect meter index leak' " luca.boccassi
` (9 subsequent siblings)
47 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-11-12 16:52 UTC (permalink / raw)
To: Dariusz Sosnowski; +Cc: Bing Zhao, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
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/14/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/ce7841a57c7a24eafe47d6d0b3c67d9495854a54
Thanks.
Luca Boccassi
---
From ce7841a57c7a24eafe47d6d0b3c67d9495854a54 Mon Sep 17 00:00:00 2001
From: Dariusz Sosnowski <dsosnowski@nvidia.com>
Date: Thu, 30 Oct 2025 18:24:04 +0100
Subject: [PATCH] net/mlx5: fix indirect RSS action hash
[ upstream commit 6b010880a505c5609355180a7f99df940a163385 ]
Whenever indirect RSS flow action is created,
mlx5 PMD creates an hrxq object (abstraction over HW object
used to configure RSS hashing),
for all possible and supported protocols combinations.
For each combination, the hrxq configuration is adjusted
based on RSS hash types provided by the user
(e.g. hash on source L3 address is removed if user passed
RTE_ETH_RSS_L3_SRC_ONLY in hash types).
Function used for adjustment, flow_dv_action_rss_l34_hash_adjust(),
had a bug. If user requested, for example, hashing over both UDP ports
and only IPv6 source address, then RSS hashing was configured
to hash both IPv6 addresses. Adjustment for RTE_ETH_RSS_L3_SRC_ONLY
was skipped.
In HW Steering mode, this resulted in failures to use such indirect
RSS flow action in flow rules created through template flow API.
In this mode, only a single hrxq object is selected during flow rule
creation, based on actual configuration of RSS hash types
in flow action.
Since hrxq was created without applying RTE_ETH_RSS_L3_SRC_ONLY
adjustment and RSS hash types contained RTE_ETH_RSS_L3_SRC_ONLY,
then no matching hrxq could be found, resulting in rule creation failure.
This issue is addressed by the following:
- Missing adjustments are added to flow_dv_action_rss_l34_hash_adjust()
function.
This function is reworked to check each protocol type separately,
instead of using switch case over all combinations.
- Code for setting/looking up hrxq objects based on RSS hash types
is reworked. Separate switch cases for possible combinations in each
function are replaced with a single one.
Additional logging and assertions are added to flag any invalid
or missing combinations.
Beside that, the existing set of protocols combinations set
did not cover RSS hashing only over UDP or TCP ports,
which is a valid configuration.
These combinations are added in this patch
(new elements in mlx5_rss_hash_fields array).
Fixes: 212d17b6a650 ("net/mlx5: fix missing shared RSS hash types")
Signed-off-by: Dariusz Sosnowski <dsosnowski@nvidia.com>
Acked-by: Bing Zhao <bingz@nvidia.com>
---
drivers/net/mlx5/mlx5.h | 2 -
drivers/net/mlx5/mlx5_flow.c | 15 ++
drivers/net/mlx5/mlx5_flow.h | 37 ++-
drivers/net/mlx5/mlx5_flow_dv.c | 410 +++++++++++++++++++-------------
4 files changed, 287 insertions(+), 177 deletions(-)
diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h
index 3cae07a6b9..a3b01b3589 100644
--- a/drivers/net/mlx5/mlx5.h
+++ b/drivers/net/mlx5/mlx5.h
@@ -1658,8 +1658,6 @@ struct mlx5_obj_ops {
void (*lb_dummy_queue_release)(struct rte_eth_dev *dev);
};
-#define MLX5_RSS_HASH_FIELDS_LEN RTE_DIM(mlx5_rss_hash_fields)
-
enum mlx5_hw_ctrl_flow_type {
MLX5_HW_CTRL_FLOW_TYPE_GENERAL,
MLX5_HW_CTRL_FLOW_TYPE_SQ_MISS_ROOT,
diff --git a/drivers/net/mlx5/mlx5_flow.c b/drivers/net/mlx5/mlx5_flow.c
index b69f578ea4..a35fc93d54 100644
--- a/drivers/net/mlx5/mlx5_flow.c
+++ b/drivers/net/mlx5/mlx5_flow.c
@@ -33,6 +33,21 @@
#include "mlx5_common_os.h"
#include "rte_pmd_mlx5.h"
+const uint64_t mlx5_rss_hash_fields[] = {
+ [MLX5_RSS_HASH_IDX_IPV4] = MLX5_RSS_HASH_IPV4,
+ [MLX5_RSS_HASH_IDX_IPV4_TCP] = MLX5_RSS_HASH_IPV4_TCP,
+ [MLX5_RSS_HASH_IDX_IPV4_UDP] = MLX5_RSS_HASH_IPV4_UDP,
+ [MLX5_RSS_HASH_IDX_IPV4_ESP] = MLX5_RSS_HASH_IPV4_ESP,
+ [MLX5_RSS_HASH_IDX_IPV6] = MLX5_RSS_HASH_IPV6,
+ [MLX5_RSS_HASH_IDX_IPV6_TCP] = MLX5_RSS_HASH_IPV6_TCP,
+ [MLX5_RSS_HASH_IDX_IPV6_UDP] = MLX5_RSS_HASH_IPV6_UDP,
+ [MLX5_RSS_HASH_IDX_IPV6_ESP] = MLX5_RSS_HASH_IPV6_ESP,
+ [MLX5_RSS_HASH_IDX_TCP] = MLX5_TCP_IBV_RX_HASH,
+ [MLX5_RSS_HASH_IDX_UDP] = MLX5_UDP_IBV_RX_HASH,
+ [MLX5_RSS_HASH_IDX_ESP_SPI] = MLX5_RSS_HASH_ESP_SPI,
+ [MLX5_RSS_HASH_IDX_NONE] = MLX5_RSS_HASH_NONE,
+};
+
/*
* Shared array for quick translation between port_id and vport mask/values
* used for HWS rules.
diff --git a/drivers/net/mlx5/mlx5_flow.h b/drivers/net/mlx5/mlx5_flow.h
index ae6d9d45c2..e5672b41f9 100644
--- a/drivers/net/mlx5/mlx5_flow.h
+++ b/drivers/net/mlx5/mlx5_flow.h
@@ -1398,20 +1398,31 @@ struct rte_flow_template_table {
#define MLX5_RSS_HASH_NONE 0ULL
-/* array of valid combinations of RX Hash fields for RSS */
-static const uint64_t mlx5_rss_hash_fields[] = {
- MLX5_RSS_HASH_IPV4,
- MLX5_RSS_HASH_IPV4_TCP,
- MLX5_RSS_HASH_IPV4_UDP,
- MLX5_RSS_HASH_IPV4_ESP,
- MLX5_RSS_HASH_IPV6,
- MLX5_RSS_HASH_IPV6_TCP,
- MLX5_RSS_HASH_IPV6_UDP,
- MLX5_RSS_HASH_IPV6_ESP,
- MLX5_RSS_HASH_ESP_SPI,
- MLX5_RSS_HASH_NONE,
+
+/**
+ * Each enum variant corresponds to a single valid protocols combination for hrxq configuration
+ * Each variant serves as an index into #mlx5_rss_hash_fields array containing default
+ * bitmaps of ibv_rx_hash_fields flags for given protocols combination.
+ */
+enum {
+ MLX5_RSS_HASH_IDX_IPV4,
+ MLX5_RSS_HASH_IDX_IPV4_TCP,
+ MLX5_RSS_HASH_IDX_IPV4_UDP,
+ MLX5_RSS_HASH_IDX_IPV4_ESP,
+ MLX5_RSS_HASH_IDX_IPV6,
+ MLX5_RSS_HASH_IDX_IPV6_TCP,
+ MLX5_RSS_HASH_IDX_IPV6_UDP,
+ MLX5_RSS_HASH_IDX_IPV6_ESP,
+ MLX5_RSS_HASH_IDX_TCP,
+ MLX5_RSS_HASH_IDX_UDP,
+ MLX5_RSS_HASH_IDX_ESP_SPI,
+ MLX5_RSS_HASH_IDX_NONE,
+ MLX5_RSS_HASH_IDX_MAX,
};
+/** Array of valid combinations of RX Hash fields for RSS. */
+extern const uint64_t mlx5_rss_hash_fields[];
+
/* Shared RSS action structure */
struct mlx5_shared_action_rss {
ILIST_ENTRY(uint32_t)next; /**< Index to the next RSS structure. */
@@ -1420,7 +1431,7 @@ struct mlx5_shared_action_rss {
uint8_t key[MLX5_RSS_HASH_KEY_LEN]; /**< RSS hash key. */
struct mlx5_ind_table_obj *ind_tbl;
/**< Hash RX queues (hrxq, hrxq_tunnel fields) indirection table. */
- uint32_t hrxq[MLX5_RSS_HASH_FIELDS_LEN];
+ uint32_t hrxq[MLX5_RSS_HASH_IDX_MAX];
/**< Hash RX queue indexes mapped to mlx5_rss_hash_fields */
rte_spinlock_t action_rss_sl; /**< Shared RSS action spinlock. */
};
diff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow_dv.c
index 5b8e022f34..fbe6fdeefb 100644
--- a/drivers/net/mlx5/mlx5_flow_dv.c
+++ b/drivers/net/mlx5/mlx5_flow_dv.c
@@ -14613,6 +14613,145 @@ flow_dv_translate(struct rte_eth_dev *dev,
return 0;
}
+/*
+ * Protocol selector bitmap
+ * Each flag is used as an indicator that given protocol is specified in given RSS hash fields.
+ */
+#define RX_HASH_SELECTOR_IPV4 RTE_BIT32(0)
+#define RX_HASH_SELECTOR_IPV6 RTE_BIT32(1)
+#define RX_HASH_SELECTOR_UDP RTE_BIT32(2)
+#define RX_HASH_SELECTOR_TCP RTE_BIT32(3)
+#define RX_HASH_SELECTOR_ESP_SPI RTE_BIT32(4)
+#define RX_HASH_SELECTOR_NONE (0)
+
+#define RX_HASH_SELECTOR_IPV4_TCP (RX_HASH_SELECTOR_IPV4 | RX_HASH_SELECTOR_TCP)
+#define RX_HASH_SELECTOR_IPV4_UDP (RX_HASH_SELECTOR_IPV4 | RX_HASH_SELECTOR_UDP)
+#define RX_HASH_SELECTOR_IPV4_ESP (RX_HASH_SELECTOR_IPV4 | RX_HASH_SELECTOR_ESP_SPI)
+
+#define RX_HASH_SELECTOR_IPV6_TCP (RX_HASH_SELECTOR_IPV6 | RX_HASH_SELECTOR_TCP)
+#define RX_HASH_SELECTOR_IPV6_UDP (RX_HASH_SELECTOR_IPV6 | RX_HASH_SELECTOR_UDP)
+#define RX_HASH_SELECTOR_IPV6_ESP (RX_HASH_SELECTOR_IPV6 | RX_HASH_SELECTOR_ESP_SPI)
+
+static bool
+rx_hash_selector_has_valid_l3(const uint32_t selectors)
+{
+ /* In TIR configuration, RSS hashing on both IPv4 and IPv6 is mutually exclusive. */
+ return !((selectors & RX_HASH_SELECTOR_IPV4) && (selectors & RX_HASH_SELECTOR_IPV6));
+}
+
+static bool
+rx_hash_selector_has_valid_l4(const uint32_t selectors)
+{
+ /* In TIR configuration, RSS hashing on both UDP and TCP is mutually exclusive. */
+ return !((selectors & RX_HASH_SELECTOR_UDP) && (selectors & RX_HASH_SELECTOR_TCP));
+}
+
+static bool
+rx_hash_selector_has_valid_esp(const uint32_t selectors)
+{
+ /* In TIR configuration, RSS hashing on ESP and other L4 protocol is mutually exclusive. */
+ if (selectors & RX_HASH_SELECTOR_ESP_SPI)
+ return !((selectors & RX_HASH_SELECTOR_UDP) || (selectors & RX_HASH_SELECTOR_TCP));
+
+ return true;
+}
+
+/**
+ * Calculate protocol combination based on provided RSS hashing fields.
+ *
+ * @param[in] hash_fields
+ * Requested RSS hashing fields specified as a flags bitmap, based on ibv_rx_hash_fields.
+ * @param[out] selectors_out
+ * Calculated protocol combination will be written here.
+ * Result will be a bitmap of RX_HASH_SELECTOR_* flags.
+ *
+ * @return
+ * 0 if conversion is successful and protocol combination written to @p selectors_out.
+ * (-EINVAL) otherwise.
+ */
+static int
+rx_hash_calc_selector(const uint64_t hash_fields, uint32_t *selectors_out)
+{
+ const uint64_t filtered_hf = hash_fields & ~IBV_RX_HASH_INNER;
+ uint32_t selectors = 0;
+
+ if (filtered_hf & MLX5_RSS_HASH_IPV4)
+ selectors |= RX_HASH_SELECTOR_IPV4;
+ if (filtered_hf & MLX5_RSS_HASH_IPV6)
+ selectors |= RX_HASH_SELECTOR_IPV6;
+ if (!rx_hash_selector_has_valid_l3(selectors)) {
+ DRV_LOG(NOTICE, "hrxq hashing on both IPv4 and IPv6 is invalid: "
+ "selectors=0x%" PRIx32, selectors);
+ return -EINVAL;
+ }
+
+ if (filtered_hf & MLX5_UDP_IBV_RX_HASH)
+ selectors |= RX_HASH_SELECTOR_UDP;
+ if (filtered_hf & MLX5_TCP_IBV_RX_HASH)
+ selectors |= RX_HASH_SELECTOR_TCP;
+ if (!rx_hash_selector_has_valid_l4(selectors)) {
+ DRV_LOG(NOTICE, "hrxq hashing on both UDP and TCP is invalid: "
+ "selectors=0x%" PRIx32, selectors);
+ return -EINVAL;
+ }
+
+ if (filtered_hf & MLX5_RSS_HASH_ESP_SPI)
+ selectors |= RX_HASH_SELECTOR_ESP_SPI;
+ if (!rx_hash_selector_has_valid_esp(selectors)) {
+ DRV_LOG(NOTICE, "hrxq hashing on ESP SPI and UDP or TCP is mutually exclusive: "
+ "selectors=0x%" PRIx32, selectors);
+ return -EINVAL;
+ }
+
+ *selectors_out = selectors;
+ return 0;
+}
+
+/**
+ * Calculate the hrxq object index based on protocol combination.
+ *
+ * @param[in] selectors
+ * Protocol combination specified as bitmap of RX_HASH_SELECTOR_* flags.
+ *
+ * @return
+ * Index into hrxq array in #mlx5_shared_action_rss based on ginve protocol combination.
+ * (-EINVAL) if given protocol combination is not supported or is invalid.
+ */
+static int
+get_rss_hash_idx(const uint32_t selectors)
+{
+ switch (selectors) {
+ case RX_HASH_SELECTOR_IPV4:
+ return MLX5_RSS_HASH_IDX_IPV4;
+ case RX_HASH_SELECTOR_IPV4_TCP:
+ return MLX5_RSS_HASH_IDX_IPV4_TCP;
+ case RX_HASH_SELECTOR_IPV4_UDP:
+ return MLX5_RSS_HASH_IDX_IPV4_UDP;
+ case RX_HASH_SELECTOR_IPV4_ESP:
+ return MLX5_RSS_HASH_IDX_IPV4_ESP;
+ case RX_HASH_SELECTOR_IPV6:
+ return MLX5_RSS_HASH_IDX_IPV6;
+ case RX_HASH_SELECTOR_IPV6_TCP:
+ return MLX5_RSS_HASH_IDX_IPV6_TCP;
+ case RX_HASH_SELECTOR_IPV6_UDP:
+ return MLX5_RSS_HASH_IDX_IPV6_UDP;
+ case RX_HASH_SELECTOR_IPV6_ESP:
+ return MLX5_RSS_HASH_IDX_IPV6_ESP;
+ case RX_HASH_SELECTOR_TCP:
+ return MLX5_RSS_HASH_IDX_TCP;
+ case RX_HASH_SELECTOR_UDP:
+ return MLX5_RSS_HASH_IDX_UDP;
+ case RX_HASH_SELECTOR_ESP_SPI:
+ return MLX5_RSS_HASH_IDX_ESP_SPI;
+ case RX_HASH_SELECTOR_NONE:
+ return MLX5_RSS_HASH_IDX_NONE;
+ default:
+ DRV_LOG(ERR, "invalid hrxq hash fields combination: "
+ "selectors=0x%" PRIx32, selectors);
+ return -EINVAL;
+ }
+}
+
/**
* Set hash RX queue by hash fields (see enum ibv_rx_hash_fields)
* and tunnel.
@@ -14620,7 +14759,8 @@ flow_dv_translate(struct rte_eth_dev *dev,
* @param[in, out] action
* Shred RSS action holding hash RX queue objects.
* @param[in] hash_fields
- * Defines combination of packet fields to participate in RX hash.
+ * Defines combination of packet fields to participate in RX hash,
+ * specified as a bitmap of #ibv_rx_hash_fields flags.
* @param[in] tunnel
* Tunnel type
* @param[in] hrxq_idx
@@ -14635,65 +14775,26 @@ __flow_dv_action_rss_hrxq_set(struct mlx5_shared_action_rss *action,
uint32_t hrxq_idx)
{
uint32_t *hrxqs = action->hrxq;
+ uint32_t selectors = 0;
+ int ret;
- switch (hash_fields & ~IBV_RX_HASH_INNER) {
- case MLX5_RSS_HASH_IPV4:
- /* fall-through. */
- case MLX5_RSS_HASH_IPV4_DST_ONLY:
- /* fall-through. */
- case MLX5_RSS_HASH_IPV4_SRC_ONLY:
- hrxqs[0] = hrxq_idx;
- return 0;
- case MLX5_RSS_HASH_IPV4_TCP:
- /* fall-through. */
- case MLX5_RSS_HASH_IPV4_TCP_DST_ONLY:
- /* fall-through. */
- case MLX5_RSS_HASH_IPV4_TCP_SRC_ONLY:
- hrxqs[1] = hrxq_idx;
- return 0;
- case MLX5_RSS_HASH_IPV4_UDP:
- /* fall-through. */
- case MLX5_RSS_HASH_IPV4_UDP_DST_ONLY:
- /* fall-through. */
- case MLX5_RSS_HASH_IPV4_UDP_SRC_ONLY:
- hrxqs[2] = hrxq_idx;
- return 0;
- case MLX5_RSS_HASH_IPV6:
- /* fall-through. */
- case MLX5_RSS_HASH_IPV6_DST_ONLY:
- /* fall-through. */
- case MLX5_RSS_HASH_IPV6_SRC_ONLY:
- hrxqs[3] = hrxq_idx;
- return 0;
- case MLX5_RSS_HASH_IPV6_TCP:
- /* fall-through. */
- case MLX5_RSS_HASH_IPV6_TCP_DST_ONLY:
- /* fall-through. */
- case MLX5_RSS_HASH_IPV6_TCP_SRC_ONLY:
- hrxqs[4] = hrxq_idx;
- return 0;
- case MLX5_RSS_HASH_IPV6_UDP:
- /* fall-through. */
- case MLX5_RSS_HASH_IPV6_UDP_DST_ONLY:
- /* fall-through. */
- case MLX5_RSS_HASH_IPV6_UDP_SRC_ONLY:
- hrxqs[5] = hrxq_idx;
- return 0;
- case MLX5_RSS_HASH_NONE:
- hrxqs[6] = hrxq_idx;
- return 0;
- case MLX5_RSS_HASH_IPV4_ESP:
- hrxqs[7] = hrxq_idx;
- return 0;
- case MLX5_RSS_HASH_IPV6_ESP:
- hrxqs[8] = hrxq_idx;
- return 0;
- case MLX5_RSS_HASH_ESP_SPI:
- hrxqs[9] = hrxq_idx;
- return 0;
- default:
- return -1;
- }
+ ret = rx_hash_calc_selector(hash_fields, &selectors);
+ /*
+ * Hash fields passed to this function are constructed internally.
+ * If this fails, then this is a PMD bug.
+ */
+ MLX5_ASSERT(ret == 0);
+
+ ret = get_rss_hash_idx(selectors);
+ /*
+ * Based on above assert, selectors should always yield correct index
+ * in mlx5_rss_hash_fields array.
+ * If this fails, then this is a PMD bug.
+ */
+ MLX5_ASSERT(ret >= 0 && ret < MLX5_RSS_HASH_IDX_MAX);
+ hrxqs[ret] = hrxq_idx;
+
+ return 0;
}
/**
@@ -14705,7 +14806,8 @@ __flow_dv_action_rss_hrxq_set(struct mlx5_shared_action_rss *action,
* @param[in] idx
* Shared RSS action ID holding hash RX queue objects.
* @param[in] hash_fields
- * Defines combination of packet fields to participate in RX hash.
+ * Defines combination of packet fields to participate in RX hash,
+ * specified as a bitmap of #ibv_rx_hash_fields flags.
* @param[in] tunnel
* Tunnel type
*
@@ -14720,56 +14822,26 @@ flow_dv_action_rss_hrxq_lookup(struct rte_eth_dev *dev, uint32_t idx,
struct mlx5_shared_action_rss *shared_rss =
mlx5_ipool_get(priv->sh->ipool[MLX5_IPOOL_RSS_SHARED_ACTIONS], idx);
const uint32_t *hrxqs = shared_rss->hrxq;
+ uint32_t selectors = 0;
+ int ret;
- switch (hash_fields & ~IBV_RX_HASH_INNER) {
- case MLX5_RSS_HASH_IPV4:
- /* fall-through. */
- case MLX5_RSS_HASH_IPV4_DST_ONLY:
- /* fall-through. */
- case MLX5_RSS_HASH_IPV4_SRC_ONLY:
- return hrxqs[0];
- case MLX5_RSS_HASH_IPV4_TCP:
- /* fall-through. */
- case MLX5_RSS_HASH_IPV4_TCP_DST_ONLY:
- /* fall-through. */
- case MLX5_RSS_HASH_IPV4_TCP_SRC_ONLY:
- return hrxqs[1];
- case MLX5_RSS_HASH_IPV4_UDP:
- /* fall-through. */
- case MLX5_RSS_HASH_IPV4_UDP_DST_ONLY:
- /* fall-through. */
- case MLX5_RSS_HASH_IPV4_UDP_SRC_ONLY:
- return hrxqs[2];
- case MLX5_RSS_HASH_IPV6:
- /* fall-through. */
- case MLX5_RSS_HASH_IPV6_DST_ONLY:
- /* fall-through. */
- case MLX5_RSS_HASH_IPV6_SRC_ONLY:
- return hrxqs[3];
- case MLX5_RSS_HASH_IPV6_TCP:
- /* fall-through. */
- case MLX5_RSS_HASH_IPV6_TCP_DST_ONLY:
- /* fall-through. */
- case MLX5_RSS_HASH_IPV6_TCP_SRC_ONLY:
- return hrxqs[4];
- case MLX5_RSS_HASH_IPV6_UDP:
- /* fall-through. */
- case MLX5_RSS_HASH_IPV6_UDP_DST_ONLY:
- /* fall-through. */
- case MLX5_RSS_HASH_IPV6_UDP_SRC_ONLY:
- return hrxqs[5];
- case MLX5_RSS_HASH_NONE:
- return hrxqs[6];
- case MLX5_RSS_HASH_IPV4_ESP:
- return hrxqs[7];
- case MLX5_RSS_HASH_IPV6_ESP:
- return hrxqs[8];
- case MLX5_RSS_HASH_ESP_SPI:
- return hrxqs[9];
- default:
+ ret = rx_hash_calc_selector(hash_fields, &selectors);
+ if (ret < 0) {
+ DRV_LOG(ERR, "port %u Rx hash selector calculation failed: "
+ "rss_act_idx=%u hash_fields=0x%" PRIx64 " selectors=0x%" PRIx32,
+ dev->data->port_id, idx, hash_fields, selectors);
return 0;
}
+ ret = get_rss_hash_idx(selectors);
+ if (ret < 0) {
+ DRV_LOG(ERR, "port %u failed hrxq index lookup: "
+ "rss_act_idx=%u hash_fields=0x%" PRIx64 " selectors=0x%" PRIx32,
+ dev->data->port_id, idx, hash_fields, selectors);
+ return 0;
+ }
+
+ return hrxqs[ret];
}
/**
@@ -15442,7 +15514,7 @@ flow_dv_destroy(struct rte_eth_dev *dev, struct rte_flow *flow)
*/
static int
__flow_dv_hrxqs_release(struct rte_eth_dev *dev,
- uint32_t (*hrxqs)[MLX5_RSS_HASH_FIELDS_LEN])
+ uint32_t (*hrxqs)[MLX5_RSS_HASH_IDX_MAX])
{
size_t i;
int remaining = 0;
@@ -15477,6 +15549,62 @@ __flow_dv_action_rss_hrxqs_release(struct rte_eth_dev *dev,
return __flow_dv_hrxqs_release(dev, &shared_rss->hrxq);
}
+static inline void
+filter_ipv4_types(uint64_t rss_types, uint64_t *hash_fields)
+{
+ if (rss_types & MLX5_IPV4_LAYER_TYPES) {
+ *hash_fields &= ~MLX5_RSS_HASH_IPV4;
+ if (rss_types & RTE_ETH_RSS_L3_DST_ONLY)
+ *hash_fields |= IBV_RX_HASH_DST_IPV4;
+ else if (rss_types & RTE_ETH_RSS_L3_SRC_ONLY)
+ *hash_fields |= IBV_RX_HASH_SRC_IPV4;
+ else
+ *hash_fields |= MLX5_RSS_HASH_IPV4;
+ }
+}
+
+static inline void
+filter_ipv6_types(uint64_t rss_types, uint64_t *hash_fields)
+{
+ if (rss_types & MLX5_IPV6_LAYER_TYPES) {
+ *hash_fields &= ~MLX5_RSS_HASH_IPV6;
+ if (rss_types & RTE_ETH_RSS_L3_DST_ONLY)
+ *hash_fields |= IBV_RX_HASH_DST_IPV6;
+ else if (rss_types & RTE_ETH_RSS_L3_SRC_ONLY)
+ *hash_fields |= IBV_RX_HASH_SRC_IPV6;
+ else
+ *hash_fields |= MLX5_RSS_HASH_IPV6;
+ }
+}
+
+static inline void
+filter_udp_types(uint64_t rss_types, uint64_t *hash_fields)
+{
+ if (rss_types & RTE_ETH_RSS_UDP) {
+ *hash_fields &= ~MLX5_UDP_IBV_RX_HASH;
+ if (rss_types & RTE_ETH_RSS_L4_DST_ONLY)
+ *hash_fields |= IBV_RX_HASH_DST_PORT_UDP;
+ else if (rss_types & RTE_ETH_RSS_L4_SRC_ONLY)
+ *hash_fields |= IBV_RX_HASH_SRC_PORT_UDP;
+ else
+ *hash_fields |= MLX5_UDP_IBV_RX_HASH;
+ }
+}
+
+static inline void
+filter_tcp_types(uint64_t rss_types, uint64_t *hash_fields)
+{
+ if (rss_types & RTE_ETH_RSS_TCP) {
+ *hash_fields &= ~MLX5_TCP_IBV_RX_HASH;
+ if (rss_types & RTE_ETH_RSS_L4_DST_ONLY)
+ *hash_fields |= IBV_RX_HASH_DST_PORT_TCP;
+ else if (rss_types & RTE_ETH_RSS_L4_SRC_ONLY)
+ *hash_fields |= IBV_RX_HASH_SRC_PORT_TCP;
+ else
+ *hash_fields |= MLX5_TCP_IBV_RX_HASH;
+ }
+}
+
/**
* Adjust L3/L4 hash value of pre-created shared RSS hrxq according to
* user input.
@@ -15488,9 +15616,9 @@ __flow_dv_action_rss_hrxqs_release(struct rte_eth_dev *dev,
* same slot in mlx5_rss_hash_fields.
*
* @param[in] orig_rss_types
- * RSS type as provided in shared RSS action.
+ * RSS type as provided in shared RSS action, specified as a bitmap of RTE_ETH_RSS_* flags.
* @param[in, out] hash_field
- * hash_field variable needed to be adjusted.
+ * hash_field variable needed to be adjusted, specified as a bitmap of #ibv_rx_hash_fields flags.
*
* @return
* void
@@ -15499,60 +15627,18 @@ void
flow_dv_action_rss_l34_hash_adjust(uint64_t orig_rss_types,
uint64_t *hash_field)
{
+ uint64_t hash_field_protos = *hash_field & ~IBV_RX_HASH_INNER;
uint64_t rss_types = rte_eth_rss_hf_refine(orig_rss_types);
- switch (*hash_field & ~IBV_RX_HASH_INNER) {
- case MLX5_RSS_HASH_IPV4:
- if (rss_types & MLX5_IPV4_LAYER_TYPES) {
- *hash_field &= ~MLX5_RSS_HASH_IPV4;
- if (rss_types & RTE_ETH_RSS_L3_DST_ONLY)
- *hash_field |= IBV_RX_HASH_DST_IPV4;
- else if (rss_types & RTE_ETH_RSS_L3_SRC_ONLY)
- *hash_field |= IBV_RX_HASH_SRC_IPV4;
- else
- *hash_field |= MLX5_RSS_HASH_IPV4;
- }
- return;
- case MLX5_RSS_HASH_IPV6:
- if (rss_types & MLX5_IPV6_LAYER_TYPES) {
- *hash_field &= ~MLX5_RSS_HASH_IPV6;
- if (rss_types & RTE_ETH_RSS_L3_DST_ONLY)
- *hash_field |= IBV_RX_HASH_DST_IPV6;
- else if (rss_types & RTE_ETH_RSS_L3_SRC_ONLY)
- *hash_field |= IBV_RX_HASH_SRC_IPV6;
- else
- *hash_field |= MLX5_RSS_HASH_IPV6;
- }
- return;
- case MLX5_RSS_HASH_IPV4_UDP:
- /* fall-through. */
- case MLX5_RSS_HASH_IPV6_UDP:
- if (rss_types & RTE_ETH_RSS_UDP) {
- *hash_field &= ~MLX5_UDP_IBV_RX_HASH;
- if (rss_types & RTE_ETH_RSS_L4_DST_ONLY)
- *hash_field |= IBV_RX_HASH_DST_PORT_UDP;
- else if (rss_types & RTE_ETH_RSS_L4_SRC_ONLY)
- *hash_field |= IBV_RX_HASH_SRC_PORT_UDP;
- else
- *hash_field |= MLX5_UDP_IBV_RX_HASH;
- }
- return;
- case MLX5_RSS_HASH_IPV4_TCP:
- /* fall-through. */
- case MLX5_RSS_HASH_IPV6_TCP:
- if (rss_types & RTE_ETH_RSS_TCP) {
- *hash_field &= ~MLX5_TCP_IBV_RX_HASH;
- if (rss_types & RTE_ETH_RSS_L4_DST_ONLY)
- *hash_field |= IBV_RX_HASH_DST_PORT_TCP;
- else if (rss_types & RTE_ETH_RSS_L4_SRC_ONLY)
- *hash_field |= IBV_RX_HASH_SRC_PORT_TCP;
- else
- *hash_field |= MLX5_TCP_IBV_RX_HASH;
- }
- return;
- default:
- return;
- }
+ if (hash_field_protos & MLX5_RSS_HASH_IPV4)
+ filter_ipv4_types(rss_types, hash_field);
+ else if (hash_field_protos & MLX5_RSS_HASH_IPV6)
+ filter_ipv6_types(rss_types, hash_field);
+
+ if (hash_field_protos & MLX5_UDP_IBV_RX_HASH)
+ filter_udp_types(rss_types, hash_field);
+ else if (hash_field_protos & MLX5_TCP_IBV_RX_HASH)
+ filter_tcp_types(rss_types, hash_field);
}
/**
@@ -15602,7 +15688,7 @@ __flow_dv_action_rss_setup(struct rte_eth_dev *dev,
rss_desc.ind_tbl = shared_rss->ind_tbl;
if (priv->sh->config.dv_flow_en == 2)
rss_desc.hws_flags = MLX5DR_ACTION_FLAG_HWS_RX;
- for (i = 0; i < MLX5_RSS_HASH_FIELDS_LEN; i++) {
+ for (i = 0; i < MLX5_RSS_HASH_IDX_MAX; i++) {
struct mlx5_hrxq *hrxq;
uint64_t hash_fields = mlx5_rss_hash_fields[i];
int tunnel = 0;
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-11-12 16:20:42.440137235 +0000
+++ 0039-net-mlx5-fix-indirect-RSS-action-hash.patch 2025-11-12 16:20:40.991718522 +0000
@@ -1 +1 @@
-From 6b010880a505c5609355180a7f99df940a163385 Mon Sep 17 00:00:00 2001
+From ce7841a57c7a24eafe47d6d0b3c67d9495854a54 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 6b010880a505c5609355180a7f99df940a163385 ]
+
@@ -49 +50,0 @@
-Cc: stable@dpdk.org
@@ -61 +62 @@
-index 203cf00596..7e4bfacd11 100644
+index 3cae07a6b9..a3b01b3589 100644
@@ -64 +65 @@
-@@ -1842,8 +1842,6 @@ struct mlx5_obj_ops {
+@@ -1658,8 +1658,6 @@ struct mlx5_obj_ops {
@@ -70,3 +71,3 @@
- enum mlx5_ctrl_flow_type {
- MLX5_CTRL_FLOW_TYPE_GENERAL,
- MLX5_CTRL_FLOW_TYPE_SQ_MISS_ROOT,
+ enum mlx5_hw_ctrl_flow_type {
+ MLX5_HW_CTRL_FLOW_TYPE_GENERAL,
+ MLX5_HW_CTRL_FLOW_TYPE_SQ_MISS_ROOT,
@@ -74 +75 @@
-index 098ef9d034..ed67a90a22 100644
+index b69f578ea4..a35fc93d54 100644
@@ -77 +78 @@
-@@ -34,6 +34,21 @@
+@@ -33,6 +33,21 @@
@@ -100 +101 @@
-index ef743fc3cb..2de0f35815 100644
+index ae6d9d45c2..e5672b41f9 100644
@@ -103,3 +104,3 @@
-@@ -1897,20 +1897,31 @@ flow_hw_get_reg_id_from_ctx(void *dr_ctx, enum rte_flow_item_type type,
- (((func) == RTE_ETH_HASH_FUNCTION_SYMMETRIC_TOEPLITZ) || \
- ((func) == RTE_ETH_HASH_FUNCTION_SYMMETRIC_TOEPLITZ_SORT))
+@@ -1398,20 +1398,31 @@ struct rte_flow_template_table {
+ #define MLX5_RSS_HASH_NONE 0ULL
+
@@ -147 +148 @@
-@@ -1919,7 +1930,7 @@ struct mlx5_shared_action_rss {
+@@ -1420,7 +1431,7 @@ struct mlx5_shared_action_rss {
@@ -157 +158 @@
-index 1564bd7cbe..f765f94116 100644
+index 5b8e022f34..fbe6fdeefb 100644
@@ -160 +161 @@
-@@ -15788,6 +15788,145 @@ flow_dv_translate(struct rte_eth_dev *dev,
+@@ -14613,6 +14613,145 @@ flow_dv_translate(struct rte_eth_dev *dev,
@@ -306 +307 @@
-@@ -15795,7 +15934,8 @@ flow_dv_translate(struct rte_eth_dev *dev,
+@@ -14620,7 +14759,8 @@ flow_dv_translate(struct rte_eth_dev *dev,
@@ -316 +317 @@
-@@ -15810,65 +15950,26 @@ __flow_dv_action_rss_hrxq_set(struct mlx5_shared_action_rss *action,
+@@ -14635,65 +14775,26 @@ __flow_dv_action_rss_hrxq_set(struct mlx5_shared_action_rss *action,
@@ -401 +402 @@
-@@ -15880,7 +15981,8 @@ __flow_dv_action_rss_hrxq_set(struct mlx5_shared_action_rss *action,
+@@ -14705,7 +14806,8 @@ __flow_dv_action_rss_hrxq_set(struct mlx5_shared_action_rss *action,
@@ -411 +412 @@
-@@ -15895,56 +15997,26 @@ flow_dv_action_rss_hrxq_lookup(struct rte_eth_dev *dev, uint32_t idx,
+@@ -14720,56 +14822,26 @@ flow_dv_action_rss_hrxq_lookup(struct rte_eth_dev *dev, uint32_t idx,
@@ -484 +485 @@
-@@ -16634,7 +16706,7 @@ flow_dv_destroy(struct rte_eth_dev *dev, struct rte_flow *flow)
+@@ -15442,7 +15514,7 @@ flow_dv_destroy(struct rte_eth_dev *dev, struct rte_flow *flow)
@@ -493 +494 @@
-@@ -16669,6 +16741,62 @@ __flow_dv_action_rss_hrxqs_release(struct rte_eth_dev *dev,
+@@ -15477,6 +15549,62 @@ __flow_dv_action_rss_hrxqs_release(struct rte_eth_dev *dev,
@@ -556 +557 @@
-@@ -16680,9 +16808,9 @@ __flow_dv_action_rss_hrxqs_release(struct rte_eth_dev *dev,
+@@ -15488,9 +15616,9 @@ __flow_dv_action_rss_hrxqs_release(struct rte_eth_dev *dev,
@@ -568 +569 @@
-@@ -16691,60 +16819,18 @@ void
+@@ -15499,60 +15627,18 @@ void
@@ -639 +640 @@
-@@ -16796,7 +16882,7 @@ __flow_dv_action_rss_setup(struct rte_eth_dev *dev,
+@@ -15602,7 +15688,7 @@ __flow_dv_action_rss_setup(struct rte_eth_dev *dev,
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/mlx5: fix indirect meter index leak' has been queued to stable release 22.11.11
2025-11-12 16:52 ` patch 'test/hash: check memory allocation' " luca.boccassi
` (37 preceding siblings ...)
2025-11-12 16:52 ` patch 'net/mlx5: fix indirect RSS action hash' " luca.boccassi
@ 2025-11-12 16:52 ` luca.boccassi
2025-11-12 16:52 ` patch 'net/mlx5: fix error reporting on masked indirect actions' " luca.boccassi
` (8 subsequent siblings)
47 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-11-12 16:52 UTC (permalink / raw)
To: Rongwei Liu; +Cc: Dariusz Sosnowski, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
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/14/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/9705d89465ffc4873ddf53988dc85395004e1c42
Thanks.
Luca Boccassi
---
From 9705d89465ffc4873ddf53988dc85395004e1c42 Mon Sep 17 00:00:00 2001
From: Rongwei Liu <rongweil@nvidia.com>
Date: Wed, 5 Nov 2025 14:54:33 +0200
Subject: [PATCH] net/mlx5: fix indirect meter index leak
[ upstream commit e56ebf25074280479141eac8050e1f40a69bdbf9 ]
When destroying the meter_mark indirect action, PMD
didn't recycle the ipool resources.
Fixes: 48fbb0e93d06 ("net/mlx5: support flow meter mark indirect action with HWS")
Signed-off-by: Rongwei Liu <rongweil@nvidia.com>
Acked-by: Dariusz Sosnowski <dsosnowski@nvidia.com>
---
drivers/net/mlx5/mlx5_flow_hw.c | 17 ++++++++++-------
1 file changed, 10 insertions(+), 7 deletions(-)
diff --git a/drivers/net/mlx5/mlx5_flow_hw.c b/drivers/net/mlx5/mlx5_flow_hw.c
index d78520710b..b54df8f432 100644
--- a/drivers/net/mlx5/mlx5_flow_hw.c
+++ b/drivers/net/mlx5/mlx5_flow_hw.c
@@ -8270,13 +8270,16 @@ flow_hw_action_handle_destroy(struct rte_eth_dev *dev, uint32_t queue,
break;
}
/* Wait for ASO object completion. */
- if (queue == MLX5_HW_INV_QUEUE &&
- mlx5_aso_mtr_wait(priv->sh, MLX5_HW_INV_QUEUE, aso_mtr)) {
- ret = -EINVAL;
- rte_flow_error_set(error, EINVAL,
- RTE_FLOW_ERROR_TYPE_UNSPECIFIED,
- NULL, "Unable to wait for ASO meter CQE");
- break;
+ if (queue == MLX5_HW_INV_QUEUE) {
+ if (mlx5_aso_mtr_wait(priv->sh, MLX5_HW_INV_QUEUE, aso_mtr)) {
+ ret = -EINVAL;
+ rte_flow_error_set(error, EINVAL,
+ RTE_FLOW_ERROR_TYPE_UNSPECIFIED,
+ NULL, "Unable to wait for ASO meter CQE");
+ }
+ mlx5_ipool_free(pool->idx_pool, idx);
+ if (ret < 0)
+ break;
}
if (!job)
mlx5_ipool_free(pool->idx_pool, idx);
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-11-12 16:20:42.498052534 +0000
+++ 0040-net-mlx5-fix-indirect-meter-index-leak.patch 2025-11-12 16:20:40.999718720 +0000
@@ -1 +1 @@
-From e56ebf25074280479141eac8050e1f40a69bdbf9 Mon Sep 17 00:00:00 2001
+From 9705d89465ffc4873ddf53988dc85395004e1c42 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit e56ebf25074280479141eac8050e1f40a69bdbf9 ]
+
@@ -10 +11,0 @@
-Cc: stable@dpdk.org
@@ -19 +20 @@
-index cd11619b26..1755f2cffc 100644
+index d78520710b..b54df8f432 100644
@@ -22 +23 @@
-@@ -13013,13 +13013,16 @@ flow_hw_action_handle_destroy(struct rte_eth_dev *dev, uint32_t queue,
+@@ -8270,13 +8270,16 @@ flow_hw_action_handle_destroy(struct rte_eth_dev *dev, uint32_t queue,
@@ -27 +28 @@
-- mlx5_aso_mtr_wait(priv, aso_mtr, true)) {
+- mlx5_aso_mtr_wait(priv->sh, MLX5_HW_INV_QUEUE, aso_mtr)) {
@@ -34 +35 @@
-+ if (mlx5_aso_mtr_wait(priv, aso_mtr, true)) {
++ if (mlx5_aso_mtr_wait(priv->sh, MLX5_HW_INV_QUEUE, aso_mtr)) {
@@ -44,2 +45,2 @@
- aso = true;
- break;
+ if (!job)
+ mlx5_ipool_free(pool->idx_pool, idx);
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net/mlx5: fix error reporting on masked indirect actions' has been queued to stable release 22.11.11
2025-11-12 16:52 ` patch 'test/hash: check memory allocation' " luca.boccassi
` (38 preceding siblings ...)
2025-11-12 16:52 ` patch 'net/mlx5: fix indirect meter index leak' " luca.boccassi
@ 2025-11-12 16:52 ` luca.boccassi
2025-11-12 16:52 ` patch 'net: fix L2 length for GRE packets' " luca.boccassi
` (7 subsequent siblings)
47 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-11-12 16:52 UTC (permalink / raw)
To: Dariusz Sosnowski; +Cc: Bing Zhao, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
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/14/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/6ce9b5e9f48a11dd8e2f9b19cbb078be3a1cd0ac
Thanks.
Luca Boccassi
---
From 6ce9b5e9f48a11dd8e2f9b19cbb078be3a1cd0ac Mon Sep 17 00:00:00 2001
From: Dariusz Sosnowski <dsosnowski@nvidia.com>
Date: Wed, 5 Nov 2025 17:52:54 +0100
Subject: [PATCH] net/mlx5: fix error reporting on masked indirect actions
[ upstream commit 1d961316d9f541c6679dcd519a40a667f9885f30 ]
Whenever masked indirect actions in actions template were handled
by mlx5 PMD and user passed incorrect action configuration,
the specific errors were not returned through rte_flow_error struct.
Existing logs also used WARNING log level, which made debugging a bit
harder.
This patch fixes error reporting for masked indirect actions,
during flow actions translation done in HWS mode:
- Replace "return -1" with error reporting through rte_flow_error.
- Change log level from WARNING to ERR.
- Add more information to log messages (port index
and action handle).
Fixes: 7ab3962d2d2b ("net/mlx5: add indirect HW steering action")
Fixes: 4d368e1da3a4 ("net/mlx5: support flow counter action for HWS")
Fixes: 463170a7c934 ("net/mlx5: support connection tracking with HWS")
Fixes: 48fbb0e93d06 ("net/mlx5: support flow meter mark indirect action with HWS")
Signed-off-by: Dariusz Sosnowski <dsosnowski@nvidia.com>
Acked-by: Bing Zhao <bingz@nvidia.com>
---
drivers/net/mlx5/mlx5_flow_hw.c | 42 +++++++++++++++++++++++----------
1 file changed, 29 insertions(+), 13 deletions(-)
diff --git a/drivers/net/mlx5/mlx5_flow_hw.c b/drivers/net/mlx5/mlx5_flow_hw.c
index b54df8f432..e3f6e1aa3a 100644
--- a/drivers/net/mlx5/mlx5_flow_hw.c
+++ b/drivers/net/mlx5/mlx5_flow_hw.c
@@ -764,7 +764,8 @@ flow_hw_shared_action_translate(struct rte_eth_dev *dev,
const struct rte_flow_action *action,
struct mlx5_hw_actions *acts,
uint16_t action_src,
- uint16_t action_dst)
+ uint16_t action_dst,
+ struct rte_flow_error *error)
{
struct mlx5_priv *priv = dev->data->dev_private;
struct mlx5_shared_action_rss *shared_rss;
@@ -781,8 +782,10 @@ flow_hw_shared_action_translate(struct rte_eth_dev *dev,
(priv, acts,
(enum rte_flow_action_type)MLX5_RTE_FLOW_ACTION_TYPE_RSS,
action_src, action_dst, idx, shared_rss)) {
- DRV_LOG(WARNING, "Indirect RSS action index %d translate failed", act_idx);
- return -1;
+ DRV_LOG(ERR, "port %u Indirect RSS action (handle %p) translate failed",
+ dev->data->port_id, action->conf);
+ return rte_flow_error_set(error, EINVAL, RTE_FLOW_ERROR_TYPE_ACTION,
+ action, "Indirect RSS action translate failed");
}
break;
case MLX5_INDIRECT_ACTION_TYPE_COUNT:
@@ -790,15 +793,22 @@ flow_hw_shared_action_translate(struct rte_eth_dev *dev,
(enum rte_flow_action_type)
MLX5_RTE_FLOW_ACTION_TYPE_COUNT,
action_src, action_dst, act_idx)) {
- DRV_LOG(WARNING, "Indirect count action translate failed");
- return -1;
+ DRV_LOG(ERR,
+ "port %u Indirect count action (handle %p) "
+ "translate failed",
+ dev->data->port_id, action->conf);
+ return rte_flow_error_set(error, EINVAL, RTE_FLOW_ERROR_TYPE_ACTION,
+ action,
+ "Indirect count action translate failed");
}
break;
case MLX5_INDIRECT_ACTION_TYPE_CT:
if (flow_hw_ct_compile(dev, MLX5_HW_INV_QUEUE,
idx, &acts->rule_acts[action_dst])) {
- DRV_LOG(WARNING, "Indirect CT action translate failed");
- return -1;
+ DRV_LOG(ERR, "port %u Indirect CT action (handle %p) translate failed",
+ dev->data->port_id, action->conf);
+ return rte_flow_error_set(error, EINVAL, RTE_FLOW_ERROR_TYPE_ACTION,
+ action, "Indirect CT action translate failed");
}
break;
case MLX5_INDIRECT_ACTION_TYPE_METER_MARK:
@@ -806,13 +816,19 @@ flow_hw_shared_action_translate(struct rte_eth_dev *dev,
(enum rte_flow_action_type)
MLX5_RTE_FLOW_ACTION_TYPE_METER_MARK,
action_src, action_dst, idx)) {
- DRV_LOG(WARNING, "Indirect meter mark action translate failed");
- return -1;
+ DRV_LOG(ERR,
+ "port %u Indirect meter mark action (handle %p) "
+ "translate failed",
+ dev->data->port_id, action->conf);
+ return rte_flow_error_set(error, EINVAL, RTE_FLOW_ERROR_TYPE_ACTION,
+ action,
+ "Indirect meter mark action translate failed");
}
break;
default:
- DRV_LOG(WARNING, "Unsupported shared action type:%d", type);
- break;
+ DRV_LOG(ERR, "Unsupported shared action type: %d", type);
+ return rte_flow_error_set(error, ENOTSUP, RTE_FLOW_ERROR_TYPE_ACTION, action,
+ "Unsupported shared action type");
}
return 0;
}
@@ -1376,8 +1392,8 @@ __flow_hw_actions_translate(struct rte_eth_dev *dev,
goto err;
}
if (actions->conf && masks->conf) {
- if (flow_hw_shared_action_translate
- (dev, actions, acts, actions - action_start, action_pos))
+ if (flow_hw_shared_action_translate(dev, actions, acts,
+ actions - action_start, action_pos, &sub_error))
goto err;
} else if (__flow_hw_act_data_general_append
(priv, acts, actions->type,
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-11-12 16:20:42.543299424 +0000
+++ 0041-net-mlx5-fix-error-reporting-on-masked-indirect-acti.patch 2025-11-12 16:20:41.003718817 +0000
@@ -1 +1 @@
-From 1d961316d9f541c6679dcd519a40a667f9885f30 Mon Sep 17 00:00:00 2001
+From 6ce9b5e9f48a11dd8e2f9b19cbb078be3a1cd0ac Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 1d961316d9f541c6679dcd519a40a667f9885f30 ]
+
@@ -24 +25,0 @@
-Cc: stable@dpdk.org
@@ -33 +34 @@
-index 1755f2cffc..4d85fffb8f 100644
+index b54df8f432..e3f6e1aa3a 100644
@@ -36 +37 @@
-@@ -1321,7 +1321,8 @@ flow_hw_shared_action_translate(struct rte_eth_dev *dev,
+@@ -764,7 +764,8 @@ flow_hw_shared_action_translate(struct rte_eth_dev *dev,
@@ -46 +47 @@
-@@ -1338,8 +1339,10 @@ flow_hw_shared_action_translate(struct rte_eth_dev *dev,
+@@ -781,8 +782,10 @@ flow_hw_shared_action_translate(struct rte_eth_dev *dev,
@@ -59 +60 @@
-@@ -1347,15 +1350,22 @@ flow_hw_shared_action_translate(struct rte_eth_dev *dev,
+@@ -790,15 +793,22 @@ flow_hw_shared_action_translate(struct rte_eth_dev *dev,
@@ -86 +87 @@
-@@ -1363,16 +1373,22 @@ flow_hw_shared_action_translate(struct rte_eth_dev *dev,
+@@ -806,13 +816,19 @@ flow_hw_shared_action_translate(struct rte_eth_dev *dev,
@@ -101,3 +101,0 @@
- case MLX5_INDIRECT_ACTION_TYPE_QUOTA:
- flow_hw_construct_quota(priv, &acts->rule_acts[action_dst], idx);
- break;
@@ -113 +111 @@
-@@ -2536,8 +2552,8 @@ __flow_hw_translate_actions_template(struct rte_eth_dev *dev,
+@@ -1376,8 +1392,8 @@ __flow_hw_actions_translate(struct rte_eth_dev *dev,
@@ -118 +116 @@
-- (dev, actions, acts, src_pos, dr_pos))
+- (dev, actions, acts, actions - action_start, action_pos))
@@ -120 +118 @@
-+ src_pos, dr_pos, &sub_error))
++ actions - action_start, action_pos, &sub_error))
@@ -122,2 +120,2 @@
- } else if (__flow_hw_act_data_indirect_append
- (priv, acts, RTE_FLOW_ACTION_TYPE_INDIRECT,
+ } else if (__flow_hw_act_data_general_append
+ (priv, acts, actions->type,
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'net: fix L2 length for GRE packets' has been queued to stable release 22.11.11
2025-11-12 16:52 ` patch 'test/hash: check memory allocation' " luca.boccassi
` (39 preceding siblings ...)
2025-11-12 16:52 ` patch 'net/mlx5: fix error reporting on masked indirect actions' " luca.boccassi
@ 2025-11-12 16:52 ` luca.boccassi
2025-11-12 16:52 ` patch 'graph: fix updating edge with active graph' " luca.boccassi
` (6 subsequent siblings)
47 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-11-12 16:52 UTC (permalink / raw)
To: Dengdui Huang; +Cc: Chengwen Feng, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
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/14/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/908a8673c827df75b58b4ca152e2b3b0afb57117
Thanks.
Luca Boccassi
---
From 908a8673c827df75b58b4ca152e2b3b0afb57117 Mon Sep 17 00:00:00 2001
From: Dengdui Huang <huangdengdui@huawei.com>
Date: Wed, 23 Jul 2025 18:47:10 +0800
Subject: [PATCH] net: fix L2 length for GRE packets
[ upstream commit cb699a047d1f2c1cead545db2d266ab5f396b550 ]
The meaning of L2_len in the parsing result of the rte_net_get_ptype()
is the same as the L2_len field in the mbuf. For tunnel packets,
the L2_len should include protocol header of tunnel packets.
Bugzilla ID: 1754
Fixes: d21d855464ff ("net: support GRE in software packet type parser")
Signed-off-by: Dengdui Huang <huangdengdui@huawei.com>
Reviewed-by: Chengwen Feng <fengchengwen@huawei.com>
---
lib/net/rte_net.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/lib/net/rte_net.c b/lib/net/rte_net.c
index d680accc16..5862ed0776 100644
--- a/lib/net/rte_net.c
+++ b/lib/net/rte_net.c
@@ -376,6 +376,7 @@ l3:
pkt_type |= ptype_tunnel(&proto, m, &off);
hdr_lens->tunnel_len = off - prev_off;
+ hdr_lens->inner_l2_len = off - prev_off;
}
/* same job for inner header: we need to duplicate the code
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-11-12 16:20:42.586714786 +0000
+++ 0042-net-fix-L2-length-for-GRE-packets.patch 2025-11-12 16:20:41.003718817 +0000
@@ -1 +1 @@
-From cb699a047d1f2c1cead545db2d266ab5f396b550 Mon Sep 17 00:00:00 2001
+From 908a8673c827df75b58b4ca152e2b3b0afb57117 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit cb699a047d1f2c1cead545db2d266ab5f396b550 ]
+
@@ -12 +13,0 @@
-Cc: stable@dpdk.org
@@ -21 +22 @@
-index 44fb6c0f51..c70b57fdc0 100644
+index d680accc16..5862ed0776 100644
@@ -24 +25 @@
-@@ -481,6 +481,7 @@ l3:
+@@ -376,6 +376,7 @@ l3:
@@ -26 +27 @@
- pkt_type |= ptype_tunnel_without_udp(&proto, m, &off);
+ pkt_type |= ptype_tunnel(&proto, m, &off);
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'graph: fix updating edge with active graph' has been queued to stable release 22.11.11
2025-11-12 16:52 ` patch 'test/hash: check memory allocation' " luca.boccassi
` (40 preceding siblings ...)
2025-11-12 16:52 ` patch 'net: fix L2 length for GRE packets' " luca.boccassi
@ 2025-11-12 16:52 ` luca.boccassi
2025-11-12 16:52 ` patch 'app/pdump: remove hard-coded memory channels' " luca.boccassi
` (5 subsequent siblings)
47 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-11-12 16:52 UTC (permalink / raw)
To: Robin Jarry; +Cc: Jerin Jacob, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
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/14/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/e691ab105205f25e378c855fb4a39f8cbe8b776a
Thanks.
Luca Boccassi
---
From e691ab105205f25e378c855fb4a39f8cbe8b776a Mon Sep 17 00:00:00 2001
From: Robin Jarry <rjarry@redhat.com>
Date: Fri, 31 Oct 2025 23:13:04 +0100
Subject: [PATCH] graph: fix updating edge with active graph
[ upstream commit eaa11767069f476e13000fc3fec618a40c46ab7e ]
After creating at least one graph and calling rte_node_edge_update to
add a new edge on a node which is in use in the graph, the node memory
is reallocated but the active graph still has a pointer to the freed
memory.
When destroying the graph, it causes a use-after-free error detected by
libasan:
ERROR: AddressSanitizer: heap-use-after-free
READ of size 8 at 0x7c4baa5e4da8 thread T0
#0 0x0000005ad224 in graph_node_fini lib/graph/graph.c:256
#1 0x0000005ae657 in rte_graph_destroy lib/graph/graph.c:504
...
freed by thread T0 here:
#0 0x7f1bac4e5e4b in realloc.part.0 (/lib64/libasan.so.8+0xe5e4b)
#1 0x0000005ab6d7 in edge_update lib/graph/node.c:271
#2 0x0000005abb1b in rte_node_edge_update lib/graph/node.c:339
...
previously allocated by thread T0 here:
#0 0x7f1bac4e5e4b in realloc.part.0 (/lib64/libasan.so.8+0xe5e4b)
#1 0x0000005ab6d7 in edge_update lib/graph/node.c:271
#2 0x0000005abb1b in rte_node_edge_update lib/graph/node.c:339
...
Use malloc+memcpy and add an internal function to replace all references
to the old node memory before freeing it.
Fixes: c59dac2ca14a ("graph: implement node operations")
Signed-off-by: Robin Jarry <rjarry@redhat.com>
Acked-by: Jerin Jacob <jerinj@marvell.com>
---
lib/graph/graph.c | 14 ++++++++++++++
lib/graph/graph_private.h | 12 ++++++++++++
lib/graph/node.c | 6 +++++-
3 files changed, 31 insertions(+), 1 deletion(-)
diff --git a/lib/graph/graph.c b/lib/graph/graph.c
index 9027e62a26..03c0ce7369 100644
--- a/lib/graph/graph.c
+++ b/lib/graph/graph.c
@@ -253,6 +253,20 @@ graph_node_fini(struct graph *graph)
graph_node->node->name));
}
+void
+graph_node_replace_all(struct node *old, struct node *new)
+{
+ struct graph_node *graph_node;
+ struct graph *graph;
+
+ STAILQ_FOREACH(graph, &graph_list, next) {
+ STAILQ_FOREACH(graph_node, &graph->node_list, next) {
+ if (graph_node->node == old)
+ graph_node->node = new;
+ }
+ }
+}
+
static struct rte_graph *
graph_mem_fixup_node_ctx(struct rte_graph *graph)
{
diff --git a/lib/graph/graph_private.h b/lib/graph/graph_private.h
index f9a85c8926..391b3b66c3 100644
--- a/lib/graph/graph_private.h
+++ b/lib/graph/graph_private.h
@@ -219,6 +219,18 @@ int graph_node_has_edge_to_src_node(struct graph *graph);
*/
int graph_node_has_loop_edge(struct graph *graph);
+/**
+ * @internal
+ *
+ * Replace all pointers of a given node with another one in all active graphs.
+ *
+ * @param old
+ * Node pointer to replace in all graphs.
+ * @param new
+ * Updated pointer.
+ */
+void graph_node_replace_all(struct node *old, struct node *new);
+
/**
* @internal
*
diff --git a/lib/graph/node.c b/lib/graph/node.c
index 149414dcd9..725031d9f2 100644
--- a/lib/graph/node.c
+++ b/lib/graph/node.c
@@ -258,11 +258,15 @@ edge_update(struct node *node, struct node *prev, rte_edge_t from,
need_realloc = max_edges > node->nb_edges;
if (need_realloc) {
sz = sizeof(struct node) + (max_edges * RTE_NODE_NAMESIZE);
- new_node = realloc(node, sz);
+ new_node = malloc(sz);
if (new_node == NULL) {
rte_errno = ENOMEM;
goto restore;
} else {
+ sz = sizeof(*node) + (node->nb_edges * RTE_NODE_NAMESIZE);
+ memcpy(new_node, node, sz);
+ graph_node_replace_all(node, new_node);
+ free(node);
node = new_node;
}
}
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-11-12 16:20:42.619818706 +0000
+++ 0043-graph-fix-updating-edge-with-active-graph.patch 2025-11-12 16:20:41.003718817 +0000
@@ -1 +1 @@
-From eaa11767069f476e13000fc3fec618a40c46ab7e Mon Sep 17 00:00:00 2001
+From e691ab105205f25e378c855fb4a39f8cbe8b776a Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit eaa11767069f476e13000fc3fec618a40c46ab7e ]
+
@@ -36 +37,0 @@
-Cc: stable@dpdk.org
@@ -47 +48 @@
-index 61159edc72..6911ea8abe 100644
+index 9027e62a26..03c0ce7369 100644
@@ -50 +51 @@
-@@ -277,6 +277,20 @@ graph_node_fini(struct graph *graph)
+@@ -253,6 +253,20 @@ graph_node_fini(struct graph *graph)
@@ -72 +73 @@
-index 21912c0ae6..26cdc66371 100644
+index f9a85c8926..391b3b66c3 100644
@@ -75 +76 @@
-@@ -299,6 +299,18 @@ int graph_node_has_edge_to_src_node(struct graph *graph);
+@@ -219,6 +219,18 @@ int graph_node_has_edge_to_src_node(struct graph *graph);
@@ -95 +96 @@
-index cae1c809ed..e3359fe490 100644
+index 149414dcd9..725031d9f2 100644
@@ -98 +99 @@
-@@ -325,11 +325,15 @@ edge_update(struct node *node, struct node *prev, rte_edge_t from,
+@@ -258,11 +258,15 @@ edge_update(struct node *node, struct node *prev, rte_edge_t from,
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'app/pdump: remove hard-coded memory channels' has been queued to stable release 22.11.11
2025-11-12 16:52 ` patch 'test/hash: check memory allocation' " luca.boccassi
` (41 preceding siblings ...)
2025-11-12 16:52 ` patch 'graph: fix updating edge with active graph' " luca.boccassi
@ 2025-11-12 16:52 ` luca.boccassi
2025-11-12 16:52 ` patch 'pdump: handle primary process exit' " luca.boccassi
` (4 subsequent siblings)
47 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-11-12 16:52 UTC (permalink / raw)
To: Bruce Richardson; +Cc: Anatoly Burakov, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
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/14/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/7ea684520e15b62cca3fafc3b48ab1c4f87cd17d
Thanks.
Luca Boccassi
---
From 7ea684520e15b62cca3fafc3b48ab1c4f87cd17d Mon Sep 17 00:00:00 2001
From: Bruce Richardson <bruce.richardson@intel.com>
Date: Fri, 17 Oct 2025 12:06:36 +0100
Subject: [PATCH] app/pdump: remove hard-coded memory channels
[ upstream commit 4a8d8db495f66b22ce0c12055b1c9f704f542152 ]
The pdump main function modifies argc/argv before calling EAL init
function. It needs to do so in order to add the proc-type=secondary
flag, but also adds in "-n4" as parameter. This parameter is unnecessary
and also causes duplicate parameter errors if the user also passes in -n
flag on the commandline. Just remove this flag.
Fixes: caa7028276b8 ("app/pdump: add tool for packet capturing")
Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Anatoly Burakov <anatoly.burakov@intel.com>
---
app/pdump/main.c | 12 +++++-------
1 file changed, 5 insertions(+), 7 deletions(-)
diff --git a/app/pdump/main.c b/app/pdump/main.c
index 6216d5454c..460642055f 100644
--- a/app/pdump/main.c
+++ b/app/pdump/main.c
@@ -979,9 +979,8 @@ main(int argc, char **argv)
int ret;
int i;
- char n_flag[] = "-n4";
char mp_flag[] = "--proc-type=secondary";
- char *argp[argc + 2];
+ char *argp[argc + 1];
/* catch ctrl-c so we can cleanup on exit */
sigemptyset(&action.sa_mask);
@@ -993,13 +992,12 @@ main(int argc, char **argv)
sigaction(SIGHUP, &action, NULL);
argp[0] = argv[0];
- argp[1] = n_flag;
- argp[2] = mp_flag;
+ argp[1] = mp_flag;
for (i = 1; i < argc; i++)
- argp[i + 2] = argv[i];
+ argp[i + 1] = argv[i];
- argc += 2;
+ argc += 1;
diag = rte_eal_init(argc, argp);
if (diag < 0)
@@ -1009,7 +1007,7 @@ main(int argc, char **argv)
rte_exit(EXIT_FAILURE, "No Ethernet ports - bye\n");
argc -= diag;
- argv += (diag - 2);
+ argv += (diag - 1);
/* parse app arguments */
if (argc > 1) {
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-11-12 16:20:42.652566017 +0000
+++ 0044-app-pdump-remove-hard-coded-memory-channels.patch 2025-11-12 16:20:41.003718817 +0000
@@ -1 +1 @@
-From 4a8d8db495f66b22ce0c12055b1c9f704f542152 Mon Sep 17 00:00:00 2001
+From 7ea684520e15b62cca3fafc3b48ab1c4f87cd17d Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 4a8d8db495f66b22ce0c12055b1c9f704f542152 ]
+
@@ -13 +14,0 @@
-Cc: stable@dpdk.org
@@ -22 +23 @@
-index fa85859703..f3ac81cb80 100644
+index 6216d5454c..460642055f 100644
@@ -25 +26 @@
-@@ -982,9 +982,8 @@ main(int argc, char **argv)
+@@ -979,9 +979,8 @@ main(int argc, char **argv)
@@ -36 +37 @@
-@@ -996,13 +995,12 @@ main(int argc, char **argv)
+@@ -993,13 +992,12 @@ main(int argc, char **argv)
@@ -53 +54 @@
-@@ -1012,7 +1010,7 @@ main(int argc, char **argv)
+@@ -1009,7 +1007,7 @@ main(int argc, char **argv)
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'pdump: handle primary process exit' has been queued to stable release 22.11.11
2025-11-12 16:52 ` patch 'test/hash: check memory allocation' " luca.boccassi
` (42 preceding siblings ...)
2025-11-12 16:52 ` patch 'app/pdump: remove hard-coded memory channels' " luca.boccassi
@ 2025-11-12 16:52 ` luca.boccassi
2025-11-12 16:53 ` patch 'examples/l3fwd-power: fix telemetry command registration' " luca.boccassi
` (3 subsequent siblings)
47 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-11-12 16:52 UTC (permalink / raw)
To: Stephen Hemminger; +Cc: Bruce Richardson, Khadem Ullah, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
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/14/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/c027cd1107e24036399b888ebbc9f6db7bbe1395
Thanks.
Luca Boccassi
---
From c027cd1107e24036399b888ebbc9f6db7bbe1395 Mon Sep 17 00:00:00 2001
From: Stephen Hemminger <stephen@networkplumber.org>
Date: Tue, 4 Nov 2025 10:07:05 -0800
Subject: [PATCH] pdump: handle primary process exit
[ upstream commit cefd5edce236e69496693ea0ecbf3e61434ff348 ]
If primary process exits, then it is not possible (or needed)
to cleanup resources. Instead just exit after closing the
capture file.
Bugzilla ID: 1760
Fixes: a99a311ba101 ("app/pdump: exit with primary process")
Fixes: cbb44143be74 ("app/dumpcap: add new packet capture application")
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Khadem Ullah <14pwcse1224@uetpeshawar.edu.pk>
---
app/dumpcap/main.c | 4 ++++
app/pdump/main.c | 12 +++++++-----
2 files changed, 11 insertions(+), 5 deletions(-)
diff --git a/app/dumpcap/main.c b/app/dumpcap/main.c
index 0b6432ad4d..c4a556af40 100644
--- a/app/dumpcap/main.c
+++ b/app/dumpcap/main.c
@@ -894,6 +894,10 @@ int main(int argc, char **argv)
else
pcap_dump_close(out.dumper);
+ /* If primary has exited, do not try and communicate with it */
+ if (!rte_eal_primary_proc_alive(NULL))
+ return 0;
+
cleanup_pdump_resources();
rte_ring_free(r);
diff --git a/app/pdump/main.c b/app/pdump/main.c
index 460642055f..b3b90c90e6 100644
--- a/app/pdump/main.c
+++ b/app/pdump/main.c
@@ -1023,13 +1023,15 @@ main(int argc, char **argv)
dump_packets();
disable_primary_monitor();
- cleanup_pdump_resources();
+
/* dump debug stats */
print_pdump_stats();
- ret = rte_eal_cleanup();
- if (ret)
- printf("Error from rte_eal_cleanup(), %d\n", ret);
+ /* If primary has exited, do not try and communicate with it */
+ if (!rte_eal_primary_proc_alive(NULL))
+ return 0;
- return 0;
+ cleanup_pdump_resources();
+
+ return rte_eal_cleanup() ? EXIT_FAILURE : 0;
}
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-11-12 16:20:42.686707386 +0000
+++ 0045-pdump-handle-primary-process-exit.patch 2025-11-12 16:20:41.007718917 +0000
@@ -1 +1 @@
-From cefd5edce236e69496693ea0ecbf3e61434ff348 Mon Sep 17 00:00:00 2001
+From c027cd1107e24036399b888ebbc9f6db7bbe1395 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit cefd5edce236e69496693ea0ecbf3e61434ff348 ]
+
@@ -13 +14,0 @@
-Cc: stable@dpdk.org
@@ -24 +25 @@
-index e5ba36350b..3621c0ebe3 100644
+index 0b6432ad4d..c4a556af40 100644
@@ -27 +28 @@
-@@ -1059,6 +1059,10 @@ int main(int argc, char **argv)
+@@ -894,6 +894,10 @@ int main(int argc, char **argv)
@@ -39 +40 @@
-index 89347d70dc..7cbf1b8c34 100644
+index 460642055f..b3b90c90e6 100644
@@ -42 +43 @@
-@@ -1027,13 +1027,15 @@ main(int argc, char **argv)
+@@ -1023,13 +1023,15 @@ main(int argc, char **argv)
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'examples/l3fwd-power: fix telemetry command registration' has been queued to stable release 22.11.11
2025-11-12 16:52 ` patch 'test/hash: check memory allocation' " luca.boccassi
` (43 preceding siblings ...)
2025-11-12 16:52 ` patch 'pdump: handle primary process exit' " luca.boccassi
@ 2025-11-12 16:53 ` luca.boccassi
2025-11-12 16:53 ` patch 'lib: fix backticks matching in Doxygen comments' " luca.boccassi
` (2 subsequent siblings)
47 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-11-12 16:53 UTC (permalink / raw)
To: Sivaprasad Tummala; +Cc: Bruce Richardson, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
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/14/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/5641349d88f1eab074dd1b905d8b84f11ee5954f
Thanks.
Luca Boccassi
---
From 5641349d88f1eab074dd1b905d8b84f11ee5954f Mon Sep 17 00:00:00 2001
From: Sivaprasad Tummala <sivaprasad.tummala@amd.com>
Date: Mon, 6 Oct 2025 10:10:58 +0000
Subject: [PATCH] examples/l3fwd-power: fix telemetry command registration
[ upstream commit 44a4784a9710892a9bdaadbe08732000b90c95f3 ]
Telemetry command registration fails if the command name contains
characters other than alphanumeric, underscore (_), and forward
slash (/).
The l3fwd-power example previously used "/l3fwd-power/stats"
as telemetry command, which includes a hyphen (-) and causes
registration failure.
This patch fixes the issue by replacing the hyphen with an
underscore, changing the command to "/l3fwd_power/stats"
Fixes: a35919a1139b ("examples/l3fwd-power: use new telemetry")
Signed-off-by: Sivaprasad Tummala <sivaprasad.tummala@amd.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
---
examples/l3fwd-power/main.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/examples/l3fwd-power/main.c b/examples/l3fwd-power/main.c
index 501e4c47d6..98ffb1e953 100644
--- a/examples/l3fwd-power/main.c
+++ b/examples/l3fwd-power/main.c
@@ -3099,7 +3099,7 @@ main(int argc, char **argv)
rte_spinlock_init(&stats[lcore_id].telemetry_lock);
}
rte_timer_init(&telemetry_timer);
- rte_telemetry_register_cmd("/l3fwd-power/stats",
+ rte_telemetry_register_cmd("/l3fwd_power/stats",
handle_app_stats,
"Returns global power stats. Parameters: None");
rte_eal_mp_remote_launch(main_telemetry_loop, NULL,
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-11-12 16:20:42.722614198 +0000
+++ 0046-examples-l3fwd-power-fix-telemetry-command-registrat.patch 2025-11-12 16:20:41.007718917 +0000
@@ -1 +1 @@
-From 44a4784a9710892a9bdaadbe08732000b90c95f3 Mon Sep 17 00:00:00 2001
+From 5641349d88f1eab074dd1b905d8b84f11ee5954f Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 44a4784a9710892a9bdaadbe08732000b90c95f3 ]
+
@@ -18 +19,0 @@
-Cc: stable@dpdk.org
@@ -27 +28 @@
-index e27b8531b5..f9ce9e6698 100644
+index 501e4c47d6..98ffb1e953 100644
@@ -30 +31 @@
-@@ -2910,7 +2910,7 @@ main(int argc, char **argv)
+@@ -3099,7 +3099,7 @@ main(int argc, char **argv)
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'lib: fix backticks matching in Doxygen comments' has been queued to stable release 22.11.11
2025-11-12 16:52 ` patch 'test/hash: check memory allocation' " luca.boccassi
` (44 preceding siblings ...)
2025-11-12 16:53 ` patch 'examples/l3fwd-power: fix telemetry command registration' " luca.boccassi
@ 2025-11-12 16:53 ` luca.boccassi
2025-11-12 16:53 ` patch 'ring: establish safe partial order in default mode' " luca.boccassi
2025-11-12 16:53 ` patch 'doc: add device arguments in txgbe guide' " luca.boccassi
47 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-11-12 16:53 UTC (permalink / raw)
To: Jerin Jacob; +Cc: Stephen Hemminger, Erik Gabriel Carrillo, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
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/14/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/6aff6bd62e06a607421a4527a0823d96b911ad90
Thanks.
Luca Boccassi
---
From 6aff6bd62e06a607421a4527a0823d96b911ad90 Mon Sep 17 00:00:00 2001
From: Jerin Jacob <jerinj@marvell.com>
Date: Tue, 28 Oct 2025 19:41:59 +0530
Subject: [PATCH] lib: fix backticks matching in Doxygen comments
[ upstream commit 2f8d3fda56754b13a09098fac1140d781366672f ]
Doxygen 1.15 detects valid errors. Fixing the same.
Example:
lib/eventdev/rte_event_timer_adapter.h:720: error: Reached end of file
while still searching closing '`' of a verbatim block starting at line
569 (warning treated as error, aborting now)
Fixes: a6562f6d6f8e ("eventdev: introduce event timer adapter")
Signed-off-by: Jerin Jacob <jerinj@marvell.com>
Acked-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Erik Gabriel Carrillo <erik.g.carrillo@intel.com>
---
lib/eventdev/rte_event_timer_adapter.h | 2 +-
lib/rawdev/rte_rawdev_pmd.h | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/lib/eventdev/rte_event_timer_adapter.h b/lib/eventdev/rte_event_timer_adapter.h
index cd10db19e4..53e561238d 100644
--- a/lib/eventdev/rte_event_timer_adapter.h
+++ b/lib/eventdev/rte_event_timer_adapter.h
@@ -555,7 +555,7 @@ struct rte_event_timer_adapter {
* Before calling this function, the application allocates
* ``struct rte_event_timer`` objects from mempool or huge page backed
* application buffers of desired size. On successful allocation,
- * application updates the `struct rte_event_timer`` attributes such as
+ * application updates the ``struct rte_event_timer`` attributes such as
* expiry event attributes, timeout ticks from now.
* This function submits the event timer arm requests to the event timer adapter
* and on expiry, the events will be injected to designated event queue.
diff --git a/lib/rawdev/rte_rawdev_pmd.h b/lib/rawdev/rte_rawdev_pmd.h
index a51944c8ff..12d86007e0 100644
--- a/lib/rawdev/rte_rawdev_pmd.h
+++ b/lib/rawdev/rte_rawdev_pmd.h
@@ -484,7 +484,7 @@ typedef int (*rawdev_firmware_version_get_t)(struct rte_rawdev *dev,
* >0, ~0: for successful load
* <0: for failure
*
- * @see Application may use 'firmware_version_get` for ascertaining successful
+ * @see Application may use `firmware_version_get` for ascertaining successful
* load
*/
typedef int (*rawdev_firmware_load_t)(struct rte_rawdev *dev,
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-11-12 16:20:42.758765766 +0000
+++ 0047-lib-fix-backticks-matching-in-Doxygen-comments.patch 2025-11-12 16:20:41.007718917 +0000
@@ -1 +1 @@
-From 2f8d3fda56754b13a09098fac1140d781366672f Mon Sep 17 00:00:00 2001
+From 6aff6bd62e06a607421a4527a0823d96b911ad90 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 2f8d3fda56754b13a09098fac1140d781366672f ]
+
@@ -14 +15,0 @@
-Cc: stable@dpdk.org
@@ -25 +26 @@
-index 256807b3bf..67e65ab849 100644
+index cd10db19e4..53e561238d 100644
@@ -28 +29 @@
-@@ -566,7 +566,7 @@ struct __rte_cache_aligned rte_event_timer_adapter {
+@@ -555,7 +555,7 @@ struct rte_event_timer_adapter {
@@ -38 +39 @@
-index b810006a46..02351a2a29 100644
+index a51944c8ff..12d86007e0 100644
@@ -41 +42 @@
-@@ -506,7 +506,7 @@ typedef int (*rawdev_firmware_version_get_t)(struct rte_rawdev *dev,
+@@ -484,7 +484,7 @@ typedef int (*rawdev_firmware_version_get_t)(struct rte_rawdev *dev,
^ permalink raw reply [flat|nested] 130+ messages in thread* patch 'ring: establish safe partial order in default mode' has been queued to stable release 22.11.11
2025-11-12 16:52 ` patch 'test/hash: check memory allocation' " luca.boccassi
` (45 preceding siblings ...)
2025-11-12 16:53 ` patch 'lib: fix backticks matching in Doxygen comments' " luca.boccassi
@ 2025-11-12 16:53 ` luca.boccassi
2025-11-12 19:12 ` Wathsala Vithanage
2025-11-12 16:53 ` patch 'doc: add device arguments in txgbe guide' " luca.boccassi
47 siblings, 1 reply; 130+ messages in thread
From: luca.boccassi @ 2025-11-12 16:53 UTC (permalink / raw)
To: Wathsala Vithanage
Cc: Ola Liljedahl, Honnappa Nagarahalli, Dhruv Tripathi,
Konstantin Ananyev, dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
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/14/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/8e64e64659fe628f6b7ce903b67a6c8d271da524
Thanks.
Luca Boccassi
---
From 8e64e64659fe628f6b7ce903b67a6c8d271da524 Mon Sep 17 00:00:00 2001
From: Wathsala Vithanage <wathsala.vithanage@arm.com>
Date: Tue, 11 Nov 2025 18:37:17 +0000
Subject: [PATCH] ring: establish safe partial order in default mode
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
[ upstream commit a4ad0eba9def1d1d071da8afe5e96eb2a2e0d71f ]
The function __rte_ring_headtail_move_head() assumes that the barrier
(fence) between the load of the head and the load-acquire of the
opposing tail guarantees the following: if a first thread reads tail
and then writes head and a second thread reads the new value of head
and then reads tail, then it should observe the same (or a later)
value of tail.
This assumption is incorrect under the C11 memory model. If the barrier
(fence) is intended to establish a total ordering of ring operations,
it fails to do so. Instead, the current implementation only enforces a
partial ordering, which can lead to unsafe interleavings. In particular,
some partial orders can cause underflows in free slot or available
element computations, potentially resulting in data corruption.
The issue manifests when a CPU first acts as a producer and later as a
consumer. In this scenario, the barrier assumption may fail when another
core takes the consumer role. A Herd7 litmus test in C11 can demonstrate
this violation. The problem has not been widely observed so far because:
(a) on strong memory models (e.g., x86-64) the assumption holds, and
(b) on relaxed models with RCsc semantics the ordering is still strong
enough to prevent hazards.
The problem becomes visible only on weaker models, when load-acquire is
implemented with RCpc semantics (e.g. some AArch64 CPUs which support
the LDAPR and LDAPUR instructions).
Three possible solutions exist:
1. Strengthen ordering by upgrading release/acquire semantics to
sequential consistency. This requires using seq-cst for stores,
loads, and CAS operations. However, this approach introduces a
significant performance penalty on relaxed-memory architectures.
2. Establish a safe partial order by enforcing a pair-wise
happens-before relationship between thread of same role by changing
the CAS and the preceding load of the head by converting them to
release and acquire respectively. This approach makes the original
barrier assumption unnecessary and allows its removal.
3. Retain partial ordering but ensure only safe partial orders are
committed. This can be done by detecting underflow conditions
(producer < consumer) and quashing the update in such cases.
This approach makes the original barrier assumption unnecessary
and allows its removal.
This patch implements solution (2) to preserve the “enqueue always
succeeds” contract expected by dependent libraries (e.g., mempool).
While solution (3) offers higher performance, adopting it now would
break that assumption.
Fixes: 49594a63147a9 ("ring/c11: relax ordering for load and store of the head")
Signed-off-by: Wathsala Vithanage <wathsala.vithanage@arm.com>
Signed-off-by: Ola Liljedahl <ola.liljedahl@arm.com>
Reviewed-by: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
Reviewed-by: Dhruv Tripathi <dhruv.tripathi@arm.com>
Acked-by: Konstantin Ananyev <konstantin.ananyev@huawei.com>
Tested-by: Konstantin Ananyev <konstantin.ananyev@huawei.com>
---
lib/ring/rte_ring_c11_pvt.h | 37 +++++++++++++++++++++++++++++--------
1 file changed, 29 insertions(+), 8 deletions(-)
diff --git a/lib/ring/rte_ring_c11_pvt.h b/lib/ring/rte_ring_c11_pvt.h
index f895950df4..5c04a001e1 100644
--- a/lib/ring/rte_ring_c11_pvt.h
+++ b/lib/ring/rte_ring_c11_pvt.h
@@ -24,6 +24,11 @@ __rte_ring_update_tail(struct rte_ring_headtail *ht, uint32_t old_val,
if (!single)
rte_wait_until_equal_32(&ht->tail, old_val, __ATOMIC_RELAXED);
+ /*
+ * R0: Establishes a synchronizing edge with load-acquire of tail at A1.
+ * Ensures that memory effects by this thread on ring elements array
+ * is observed by a different thread of the other type.
+ */
__atomic_store_n(&ht->tail, new_val, __ATOMIC_RELEASE);
}
@@ -61,16 +66,23 @@ __rte_ring_move_prod_head(struct rte_ring *r, unsigned int is_sp,
unsigned int max = n;
int success;
- *old_head = __atomic_load_n(&r->prod.head, __ATOMIC_RELAXED);
+ /*
+ * A0: Establishes a synchronizing edge with R1.
+ * Ensure that this thread observes same values
+ * to stail observed by the thread that updated
+ * d->head.
+ * If not, an unsafe partial order may ensue.
+ */
+ *old_head = __atomic_load_n(&r->prod.head, __ATOMIC_ACQUIRE);
do {
/* Reset n to the initial burst count */
n = max;
- /* Ensure the head is read before tail */
- __atomic_thread_fence(__ATOMIC_ACQUIRE);
-
- /* load-acquire synchronize with store-release of ht->tail
- * in update_tail.
+ /*
+ * A1: Establishes a synchronizing edge with R0.
+ * Ensures that other thread's memory effects on
+ * ring elements array is observed by the time
+ * this thread observes its tail update.
*/
cons_tail = __atomic_load_n(&r->cons.tail,
__ATOMIC_ACQUIRE);
@@ -170,10 +182,19 @@ __rte_ring_move_cons_head(struct rte_ring *r, int is_sc,
r->cons.head = *new_head, success = 1;
else
/* on failure, *old_head will be updated */
+ /*
+ * R1/A2.
+ * R1: Establishes a synchronizing edge with A0 of a
+ * different thread.
+ * A2: Establishes a synchronizing edge with R1 of a
+ * different thread to observe same value for stail
+ * observed by that thread on CAS failure (to retry
+ * with an updated *old_head).
+ */
success = __atomic_compare_exchange_n(&r->cons.head,
old_head, *new_head,
- 0, __ATOMIC_RELAXED,
- __ATOMIC_RELAXED);
+ 0, __ATOMIC_RELEASE,
+ __ATOMIC_ACQUIRE);
} while (unlikely(success == 0));
return n;
}
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-11-12 16:20:42.793162159 +0000
+++ 0048-ring-establish-safe-partial-order-in-default-mode.patch 2025-11-12 16:20:41.007718917 +0000
@@ -1 +1 @@
-From a4ad0eba9def1d1d071da8afe5e96eb2a2e0d71f Mon Sep 17 00:00:00 2001
+From 8e64e64659fe628f6b7ce903b67a6c8d271da524 Mon Sep 17 00:00:00 2001
@@ -8,0 +9,2 @@
+[ upstream commit a4ad0eba9def1d1d071da8afe5e96eb2a2e0d71f ]
+
@@ -58 +59,0 @@
-Cc: stable@dpdk.org
@@ -71 +72 @@
-index b9388af0da..07b6efc416 100644
+index f895950df4..5c04a001e1 100644
@@ -74,3 +75,3 @@
-@@ -36,6 +36,11 @@ __rte_ring_update_tail(struct rte_ring_headtail *ht, uint32_t old_val,
- rte_wait_until_equal_32((uint32_t *)(uintptr_t)&ht->tail, old_val,
- rte_memory_order_relaxed);
+@@ -24,6 +24,11 @@ __rte_ring_update_tail(struct rte_ring_headtail *ht, uint32_t old_val,
+ if (!single)
+ rte_wait_until_equal_32(&ht->tail, old_val, __ATOMIC_RELAXED);
@@ -83 +84 @@
- rte_atomic_store_explicit(&ht->tail, new_val, rte_memory_order_release);
+ __atomic_store_n(&ht->tail, new_val, __ATOMIC_RELEASE);
@@ -86,2 +87 @@
-@@ -77,17 +82,24 @@ __rte_ring_headtail_move_head(struct rte_ring_headtail *d,
- int success;
+@@ -61,16 +66,23 @@ __rte_ring_move_prod_head(struct rte_ring *r, unsigned int is_sp,
@@ -88,0 +89 @@
+ int success;
@@ -89,0 +91 @@
+- *old_head = __atomic_load_n(&r->prod.head, __ATOMIC_RELAXED);
@@ -97,3 +99 @@
- *old_head = rte_atomic_load_explicit(&d->head,
-- rte_memory_order_relaxed);
-+ rte_memory_order_acquire);
++ *old_head = __atomic_load_n(&r->prod.head, __ATOMIC_ACQUIRE);
@@ -105 +105 @@
-- rte_atomic_thread_fence(rte_memory_order_acquire);
+- __atomic_thread_fence(__ATOMIC_ACQUIRE);
@@ -115,6 +115,6 @@
- stail = rte_atomic_load_explicit(&s->tail,
- rte_memory_order_acquire);
-@@ -113,10 +125,19 @@ __rte_ring_headtail_move_head(struct rte_ring_headtail *d,
- success = 1;
- } else
- /* on failure, *old_head is updated */
+ cons_tail = __atomic_load_n(&r->cons.tail,
+ __ATOMIC_ACQUIRE);
+@@ -170,10 +182,19 @@ __rte_ring_move_cons_head(struct rte_ring *r, int is_sc,
+ r->cons.head = *new_head, success = 1;
+ else
+ /* on failure, *old_head will be updated */
@@ -130,6 +130,6 @@
- success = rte_atomic_compare_exchange_strong_explicit(
- &d->head, old_head, *new_head,
-- rte_memory_order_relaxed,
-- rte_memory_order_relaxed);
-+ rte_memory_order_release,
-+ rte_memory_order_acquire);
+ success = __atomic_compare_exchange_n(&r->cons.head,
+ old_head, *new_head,
+- 0, __ATOMIC_RELAXED,
+- __ATOMIC_RELAXED);
++ 0, __ATOMIC_RELEASE,
++ __ATOMIC_ACQUIRE);
^ permalink raw reply [flat|nested] 130+ messages in thread* Re: patch 'ring: establish safe partial order in default mode' has been queued to stable release 22.11.11
2025-11-12 16:53 ` patch 'ring: establish safe partial order in default mode' " luca.boccassi
@ 2025-11-12 19:12 ` Wathsala Vithanage
2025-11-12 21:12 ` Luca Boccassi
0 siblings, 1 reply; 130+ messages in thread
From: Wathsala Vithanage @ 2025-11-12 19:12 UTC (permalink / raw)
To: luca.boccassi
Cc: Ola Liljedahl, Honnappa Nagarahalli, Dhruv Tripathi,
Konstantin Ananyev, dpdk stable
Hi Luca,
On 11/12/25 10:53, luca.boccassi@gmail.com wrote:
> Hi,
>
> FYI, your patch has been queued to stable release 22.11.11
>
> 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/14/25. So please
> shout if anyone has objections.
>
Looked like it needed some work, so I just posted a patch.
Let me know if you need any help with RTS and HTS patches as well.
Thanks
--wathsala
> Also note that after the patch there's a diff of the upstream commit vs the
> patch applied to the branch. This will indicate if there was any rebasing
> needed to apply to the stable branch. If there were code changes for rebasing
> (ie: not only metadata diffs), please double check that the rebase was
> correctly done.
>
> Queued patches are on a temporary branch at:
> https://github.com/bluca/dpdk-stable
>
> This queued commit can be viewed at:
> https://github.com/bluca/dpdk-stable/commit/8e64e64659fe628f6b7ce903b67a6c8d271da524
>
> Thanks.
>
> Luca Boccassi
>
> ---
> From 8e64e64659fe628f6b7ce903b67a6c8d271da524 Mon Sep 17 00:00:00 2001
> From: Wathsala Vithanage <wathsala.vithanage@arm.com>
> Date: Tue, 11 Nov 2025 18:37:17 +0000
> Subject: [PATCH] ring: establish safe partial order in default mode
> MIME-Version: 1.0
> Content-Type: text/plain; charset=UTF-8
> Content-Transfer-Encoding: 8bit
>
> [ upstream commit a4ad0eba9def1d1d071da8afe5e96eb2a2e0d71f ]
>
> The function __rte_ring_headtail_move_head() assumes that the barrier
> (fence) between the load of the head and the load-acquire of the
> opposing tail guarantees the following: if a first thread reads tail
> and then writes head and a second thread reads the new value of head
> and then reads tail, then it should observe the same (or a later)
> value of tail.
>
> This assumption is incorrect under the C11 memory model. If the barrier
> (fence) is intended to establish a total ordering of ring operations,
> it fails to do so. Instead, the current implementation only enforces a
> partial ordering, which can lead to unsafe interleavings. In particular,
> some partial orders can cause underflows in free slot or available
> element computations, potentially resulting in data corruption.
>
> The issue manifests when a CPU first acts as a producer and later as a
> consumer. In this scenario, the barrier assumption may fail when another
> core takes the consumer role. A Herd7 litmus test in C11 can demonstrate
> this violation. The problem has not been widely observed so far because:
> (a) on strong memory models (e.g., x86-64) the assumption holds, and
> (b) on relaxed models with RCsc semantics the ordering is still strong
> enough to prevent hazards.
> The problem becomes visible only on weaker models, when load-acquire is
> implemented with RCpc semantics (e.g. some AArch64 CPUs which support
> the LDAPR and LDAPUR instructions).
>
> Three possible solutions exist:
> 1. Strengthen ordering by upgrading release/acquire semantics to
> sequential consistency. This requires using seq-cst for stores,
> loads, and CAS operations. However, this approach introduces a
> significant performance penalty on relaxed-memory architectures.
>
> 2. Establish a safe partial order by enforcing a pair-wise
> happens-before relationship between thread of same role by changing
> the CAS and the preceding load of the head by converting them to
> release and acquire respectively. This approach makes the original
> barrier assumption unnecessary and allows its removal.
>
> 3. Retain partial ordering but ensure only safe partial orders are
> committed. This can be done by detecting underflow conditions
> (producer < consumer) and quashing the update in such cases.
> This approach makes the original barrier assumption unnecessary
> and allows its removal.
>
> This patch implements solution (2) to preserve the “enqueue always
> succeeds” contract expected by dependent libraries (e.g., mempool).
> While solution (3) offers higher performance, adopting it now would
> break that assumption.
>
> Fixes: 49594a63147a9 ("ring/c11: relax ordering for load and store of the head")
>
> Signed-off-by: Wathsala Vithanage <wathsala.vithanage@arm.com>
> Signed-off-by: Ola Liljedahl <ola.liljedahl@arm.com>
> Reviewed-by: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
> Reviewed-by: Dhruv Tripathi <dhruv.tripathi@arm.com>
> Acked-by: Konstantin Ananyev <konstantin.ananyev@huawei.com>
> Tested-by: Konstantin Ananyev <konstantin.ananyev@huawei.com>
> ---
> lib/ring/rte_ring_c11_pvt.h | 37 +++++++++++++++++++++++++++++--------
> 1 file changed, 29 insertions(+), 8 deletions(-)
>
> diff --git a/lib/ring/rte_ring_c11_pvt.h b/lib/ring/rte_ring_c11_pvt.h
> index f895950df4..5c04a001e1 100644
> --- a/lib/ring/rte_ring_c11_pvt.h
> +++ b/lib/ring/rte_ring_c11_pvt.h
> @@ -24,6 +24,11 @@ __rte_ring_update_tail(struct rte_ring_headtail *ht, uint32_t old_val,
> if (!single)
> rte_wait_until_equal_32(&ht->tail, old_val, __ATOMIC_RELAXED);
>
> + /*
> + * R0: Establishes a synchronizing edge with load-acquire of tail at A1.
> + * Ensures that memory effects by this thread on ring elements array
> + * is observed by a different thread of the other type.
> + */
> __atomic_store_n(&ht->tail, new_val, __ATOMIC_RELEASE);
> }
>
> @@ -61,16 +66,23 @@ __rte_ring_move_prod_head(struct rte_ring *r, unsigned int is_sp,
> unsigned int max = n;
> int success;
>
> - *old_head = __atomic_load_n(&r->prod.head, __ATOMIC_RELAXED);
> + /*
> + * A0: Establishes a synchronizing edge with R1.
> + * Ensure that this thread observes same values
> + * to stail observed by the thread that updated
> + * d->head.
> + * If not, an unsafe partial order may ensue.
> + */
> + *old_head = __atomic_load_n(&r->prod.head, __ATOMIC_ACQUIRE);
> do {
> /* Reset n to the initial burst count */
> n = max;
>
> - /* Ensure the head is read before tail */
> - __atomic_thread_fence(__ATOMIC_ACQUIRE);
> -
> - /* load-acquire synchronize with store-release of ht->tail
> - * in update_tail.
> + /*
> + * A1: Establishes a synchronizing edge with R0.
> + * Ensures that other thread's memory effects on
> + * ring elements array is observed by the time
> + * this thread observes its tail update.
> */
> cons_tail = __atomic_load_n(&r->cons.tail,
> __ATOMIC_ACQUIRE);
> @@ -170,10 +182,19 @@ __rte_ring_move_cons_head(struct rte_ring *r, int is_sc,
> r->cons.head = *new_head, success = 1;
> else
> /* on failure, *old_head will be updated */
> + /*
> + * R1/A2.
> + * R1: Establishes a synchronizing edge with A0 of a
> + * different thread.
> + * A2: Establishes a synchronizing edge with R1 of a
> + * different thread to observe same value for stail
> + * observed by that thread on CAS failure (to retry
> + * with an updated *old_head).
> + */
> success = __atomic_compare_exchange_n(&r->cons.head,
> old_head, *new_head,
> - 0, __ATOMIC_RELAXED,
> - __ATOMIC_RELAXED);
> + 0, __ATOMIC_RELEASE,
> + __ATOMIC_ACQUIRE);
> } while (unlikely(success == 0));
> return n;
> }
^ permalink raw reply [flat|nested] 130+ messages in thread* Re: patch 'ring: establish safe partial order in default mode' has been queued to stable release 22.11.11
2025-11-12 19:12 ` Wathsala Vithanage
@ 2025-11-12 21:12 ` Luca Boccassi
0 siblings, 0 replies; 130+ messages in thread
From: Luca Boccassi @ 2025-11-12 21:12 UTC (permalink / raw)
To: Wathsala Vithanage
Cc: Ola Liljedahl, Honnappa Nagarahalli, Dhruv Tripathi,
Konstantin Ananyev, dpdk stable
On Wed, 12 Nov 2025 at 19:12, Wathsala Vithanage
<wathsala.vithanage@arm.com> wrote:
>
> Hi Luca,
>
> On 11/12/25 10:53, luca.boccassi@gmail.com wrote:
> > Hi,
> >
> > FYI, your patch has been queued to stable release 22.11.11
> >
> > 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/14/25. So please
> > shout if anyone has objections.
> >
> Looked like it needed some work, so I just posted a patch.
> Let me know if you need any help with RTS and HTS patches as well.
If you could that would be great, as those did not apply and are too diverged
^ permalink raw reply [flat|nested] 130+ messages in thread
* patch 'doc: add device arguments in txgbe guide' has been queued to stable release 22.11.11
2025-11-12 16:52 ` patch 'test/hash: check memory allocation' " luca.boccassi
` (46 preceding siblings ...)
2025-11-12 16:53 ` patch 'ring: establish safe partial order in default mode' " luca.boccassi
@ 2025-11-12 16:53 ` luca.boccassi
47 siblings, 0 replies; 130+ messages in thread
From: luca.boccassi @ 2025-11-12 16:53 UTC (permalink / raw)
To: Jiawen Wu; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 22.11.11
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/14/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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/3fe3df2afc7ca2f8030cc55cabc0d6fd0c2ccd0d
Thanks.
Luca Boccassi
---
From 3fe3df2afc7ca2f8030cc55cabc0d6fd0c2ccd0d Mon Sep 17 00:00:00 2001
From: Jiawen Wu <jiawenwu@trustnetic.com>
Date: Tue, 11 Nov 2025 10:10:30 +0800
Subject: [PATCH] doc: add device arguments in txgbe guide
[ upstream commit a443523d6ddf076c422c9ed1460fb3a4c5c9a05b ]
Add new device arguments "pkt-filter-size" and "pkt-filter-drop-queue"
in txgbe driver.
Fixes: 7e18be9beef2 ("net/txgbe: add device arguments for FDIR")
Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
---
doc/guides/nics/txgbe.rst | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/doc/guides/nics/txgbe.rst b/doc/guides/nics/txgbe.rst
index 5b29f1de0c..86bd0839fa 100644
--- a/doc/guides/nics/txgbe.rst
+++ b/doc/guides/nics/txgbe.rst
@@ -139,6 +139,16 @@ Please note that following ``devargs`` are only set for backplane NICs.
PHY parameter used for user debugging. Setting other values to
take effect requires setting the ``ffe_set``.
+- ``pkt-filter-size`` (default **0**)
+
+ Memory allocation for the flow director filter.
+ Default 0 for 64K mode, set 1 for 128K mode, set 2 for 256K mode.
+
+- ``pkt-filter-drop-queue`` (default **127**)
+
+ The drop queue number for packets that match the drop rule in flow director.
+ Valid values are from 0 to 127.
+
Driver compilation and testing
------------------------------
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-11-12 16:20:42.825742303 +0000
+++ 0049-doc-add-device-arguments-in-txgbe-guide.patch 2025-11-12 16:20:41.007718917 +0000
@@ -1 +1 @@
-From a443523d6ddf076c422c9ed1460fb3a4c5c9a05b Mon Sep 17 00:00:00 2001
+From 3fe3df2afc7ca2f8030cc55cabc0d6fd0c2ccd0d Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit a443523d6ddf076c422c9ed1460fb3a4c5c9a05b ]
+
@@ -17 +19 @@
-index 953a43b139..44b60647a5 100644
+index 5b29f1de0c..86bd0839fa 100644
@@ -20 +22 @@
-@@ -147,6 +147,16 @@ Please note that following ``devargs`` are only set for backplane NICs.
+@@ -139,6 +139,16 @@ Please note that following ``devargs`` are only set for backplane NICs.
@@ -34 +36,2 @@
- Please note that following ``devargs`` are only set for Amber-Lite NICs.
+ Driver compilation and testing
+ ------------------------------
@@ -36 +38,0 @@
- - ``tx_headwb`` (default **1**)
^ permalink raw reply [flat|nested] 130+ messages in thread