patch 'net/ixgbe: reset flow state on clear paths' has been queued to stable release 24.11.7
luca.boccassi at gmail.com
luca.boccassi at gmail.com
Thu Jun 11 15:19:55 CEST 2026
Hi,
FYI, your patch has been queued to stable release 24.11.7
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 06/13/26. So please
shout if anyone has objections.
Also note that after the patch there's a diff of the upstream commit vs the
patch applied to the branch. This will indicate if there was any rebasing
needed to apply to the stable branch. If there were code changes for rebasing
(ie: not only metadata diffs), please double check that the rebase was
correctly done.
Queued patches are on a temporary branch at:
https://github.com/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/18f95cc0facd5771234d98ee3f11f039d9a40f21
Thanks.
Luca Boccassi
---
>From 18f95cc0facd5771234d98ee3f11f039d9a40f21 Mon Sep 17 00:00:00 2001
From: Anatoly Burakov <anatoly.burakov at intel.com>
Date: Thu, 30 Apr 2026 12:14:35 +0100
Subject: [PATCH] net/ixgbe: reset flow state on clear paths
[ upstream commit 301abd26b118c215bef0c31eb37734fe3f5e4b7f ]
When all FDIR rules are removed (either through destroy or flush), the
driver does not fully reset its state. This can result in picking up stale
state in some circumstances.
Fix by clearing internal state when FDIR flow list is empty.
Fixes: 11777435c727 ("net/ixgbe: parse flow director filter")
Signed-off-by: Anatoly Burakov <anatoly.burakov at intel.com>
Acked-by: Bruce Richardson <bruce.richardson at intel.com>
---
drivers/net/ixgbe/ixgbe_fdir.c | 7 +++++++
drivers/net/ixgbe/ixgbe_flow.c | 7 ++++++-
2 files changed, 13 insertions(+), 1 deletion(-)
diff --git a/drivers/net/ixgbe/ixgbe_fdir.c b/drivers/net/ixgbe/ixgbe_fdir.c
index 38f589623e..f51582a4bf 100644
--- a/drivers/net/ixgbe/ixgbe_fdir.c
+++ b/drivers/net/ixgbe/ixgbe_fdir.c
@@ -1358,6 +1358,7 @@ ixgbe_fdir_filter_restore(struct rte_eth_dev *dev)
int
ixgbe_clear_all_fdir_filter(struct rte_eth_dev *dev)
{
+ struct rte_eth_fdir_conf *fdir_conf = IXGBE_DEV_FDIR_CONF(dev);
struct ixgbe_hw_fdir_info *fdir_info =
IXGBE_DEV_PRIVATE_TO_FDIR_INFO(dev->data->dev_private);
struct ixgbe_fdir_filter *fdir_filter;
@@ -1376,6 +1377,12 @@ ixgbe_clear_all_fdir_filter(struct rte_eth_dev *dev)
rte_free(fdir_filter);
}
+ /* reset internal FDIR state */
+ fdir_info->mask = (struct ixgbe_hw_fdir_mask){0};
+ fdir_info->flex_bytes_offset = 0;
+ fdir_info->mask_added = FALSE;
+ fdir_conf->mode = RTE_FDIR_MODE_NONE;
+
if (filter_flag != NULL)
ret = ixgbe_fdir_flush(dev);
diff --git a/drivers/net/ixgbe/ixgbe_flow.c b/drivers/net/ixgbe/ixgbe_flow.c
index d325c7d5fd..742b3da116 100644
--- a/drivers/net/ixgbe/ixgbe_flow.c
+++ b/drivers/net/ixgbe/ixgbe_flow.c
@@ -3420,11 +3420,16 @@ ixgbe_flow_destroy(struct rte_eth_dev *dev,
sizeof(struct ixgbe_fdir_rule));
ret = ixgbe_fdir_filter_program(dev, &fdir_rule, TRUE, FALSE);
if (!ret) {
+ struct rte_eth_fdir_conf *fdir_conf = IXGBE_DEV_FDIR_CONF(dev);
TAILQ_REMOVE(&filter_fdir_list,
fdir_rule_ptr, entries);
rte_free(fdir_rule_ptr);
- if (TAILQ_EMPTY(&filter_fdir_list))
+ if (TAILQ_EMPTY(&filter_fdir_list)) {
fdir_info->mask_added = false;
+ fdir_info->mask = (struct ixgbe_hw_fdir_mask){0};
+ fdir_info->flex_bytes_offset = 0;
+ fdir_conf->mode = RTE_FDIR_MODE_NONE;
+ }
}
break;
case RTE_ETH_FILTER_L2_TUNNEL:
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2026-06-11 14:20:03.145630427 +0100
+++ 0046-net-ixgbe-reset-flow-state-on-clear-paths.patch 2026-06-11 14:20:01.226746274 +0100
@@ -1 +1 @@
-From 301abd26b118c215bef0c31eb37734fe3f5e4b7f Mon Sep 17 00:00:00 2001
+From 18f95cc0facd5771234d98ee3f11f039d9a40f21 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 301abd26b118c215bef0c31eb37734fe3f5e4b7f ]
+
@@ -13 +14,0 @@
-Cc: stable at dpdk.org
@@ -18,2 +19,2 @@
- drivers/net/intel/ixgbe/ixgbe_fdir.c | 7 +++++++
- drivers/net/intel/ixgbe/ixgbe_flow.c | 7 ++++++-
+ drivers/net/ixgbe/ixgbe_fdir.c | 7 +++++++
+ drivers/net/ixgbe/ixgbe_flow.c | 7 ++++++-
@@ -22 +23 @@
-diff --git a/drivers/net/intel/ixgbe/ixgbe_fdir.c b/drivers/net/intel/ixgbe/ixgbe_fdir.c
+diff --git a/drivers/net/ixgbe/ixgbe_fdir.c b/drivers/net/ixgbe/ixgbe_fdir.c
@@ -24,2 +25,2 @@
---- a/drivers/net/intel/ixgbe/ixgbe_fdir.c
-+++ b/drivers/net/intel/ixgbe/ixgbe_fdir.c
+--- a/drivers/net/ixgbe/ixgbe_fdir.c
++++ b/drivers/net/ixgbe/ixgbe_fdir.c
@@ -47,5 +48,5 @@
-diff --git a/drivers/net/intel/ixgbe/ixgbe_flow.c b/drivers/net/intel/ixgbe/ixgbe_flow.c
-index 6e87d373ad..b73037d4c3 100644
---- a/drivers/net/intel/ixgbe/ixgbe_flow.c
-+++ b/drivers/net/intel/ixgbe/ixgbe_flow.c
-@@ -3473,11 +3473,16 @@ ixgbe_flow_destroy(struct rte_eth_dev *dev,
+diff --git a/drivers/net/ixgbe/ixgbe_flow.c b/drivers/net/ixgbe/ixgbe_flow.c
+index d325c7d5fd..742b3da116 100644
+--- a/drivers/net/ixgbe/ixgbe_flow.c
++++ b/drivers/net/ixgbe/ixgbe_flow.c
+@@ -3420,11 +3420,16 @@ ixgbe_flow_destroy(struct rte_eth_dev *dev,
@@ -56,2 +57,2 @@
- TAILQ_REMOVE(&flow_lists->fdir_list,
- &fdir_rule_ptr->base, entries);
+ TAILQ_REMOVE(&filter_fdir_list,
+ fdir_rule_ptr, entries);
@@ -59,2 +60,2 @@
-- if (TAILQ_EMPTY(&flow_lists->fdir_list))
-+ if (TAILQ_EMPTY(&flow_lists->fdir_list)) {
+- if (TAILQ_EMPTY(&filter_fdir_list))
++ if (TAILQ_EMPTY(&filter_fdir_list)) {
More information about the stable
mailing list