[dpdk-stable] patch 'net/i40e: fix flow director input set conflict' has been queued to stable release 20.11.3

luca.boccassi at gmail.com luca.boccassi at gmail.com
Mon Jul 12 15:04:45 CEST 2021


Hi,

FYI, your patch has been queued to stable release 20.11.3

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 07/14/21. 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/5299dc34f4682c29cdd735d9f5f2f65f6d7b8460

Thanks.

Luca Boccassi

---
>From 5299dc34f4682c29cdd735d9f5f2f65f6d7b8460 Mon Sep 17 00:00:00 2001
From: Beilei Xing <beilei.xing at intel.com>
Date: Thu, 24 Jun 2021 15:29:56 +0800
Subject: [PATCH] net/i40e: fix flow director input set conflict

[ upstream commit 2fefa0942e75330e09b8ad7513e89e4a66dd738f ]

Currently, there'll be conflict error when running
the following commands:
1. flow create 0 ingress
     pattern eth / ipv4 / udp src is 32 / end
     actions queue index 2 / end
2. flow destroy 0 rule 0
3. flow create 0 ingress
     pattern eth / ipv4 / udp dst is 32 / end
     actions queue index 2 / end

This patch fixes the input set conflict issue.

Fixes: 42044b69c67d ("net/i40e: support input set selection for FDIR")
Fixes: 4a072ad43442 ("net/i40e: fix flow director config after flow validate")

Signed-off-by: Beilei Xing <beilei.xing at intel.com>
Tested-by: Lingli Chen <linglix.chen at intel.com>
---
 drivers/net/i40e/i40e_ethdev.c | 5 +++++
 drivers/net/i40e/i40e_ethdev.h | 2 +-
 drivers/net/i40e/i40e_fdir.c   | 7 ++++---
 drivers/net/i40e/i40e_flow.c   | 2 +-
 4 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c
index 100d42d6bd..63a9fc04d0 100644
--- a/drivers/net/i40e/i40e_ethdev.c
+++ b/drivers/net/i40e/i40e_ethdev.c
@@ -1082,6 +1082,7 @@ i40e_init_fdir_filter_list(struct rte_eth_dev *dev)
 	char fdir_hash_name[RTE_HASH_NAMESIZE];
 	uint32_t alloc = hw->func_caps.fd_filters_guaranteed;
 	uint32_t best = hw->func_caps.fd_filters_best_effort;
+	enum i40e_filter_pctype pctype;
 	struct rte_bitmap *bmp = NULL;
 	uint32_t bmp_size;
 	void *mem = NULL;
@@ -1130,6 +1131,10 @@ i40e_init_fdir_filter_list(struct rte_eth_dev *dev)
 		goto err_fdir_filter_array_alloc;
 	}
 
+	for (pctype = I40E_FILTER_PCTYPE_NONF_IPV4_UDP;
+	     pctype <= I40E_FILTER_PCTYPE_L2_PAYLOAD; pctype++)
+		pf->fdir.flow_count[pctype] = 0;
+
 	fdir_info->fdir_space_size = alloc + best;
 	fdir_info->fdir_actual_cnt = 0;
 	fdir_info->fdir_guarantee_total_space = alloc;
diff --git a/drivers/net/i40e/i40e_ethdev.h b/drivers/net/i40e/i40e_ethdev.h
index aeabe5a205..ba1bb3dc98 100644
--- a/drivers/net/i40e/i40e_ethdev.h
+++ b/drivers/net/i40e/i40e_ethdev.h
@@ -786,7 +786,7 @@ struct i40e_fdir_info {
 	bool flex_pit_flag[I40E_MAX_FLXPLD_LAYER];
 	bool flex_mask_flag[I40E_FILTER_PCTYPE_MAX];
 
-	bool inset_flag[I40E_FILTER_PCTYPE_MAX]; /* Mark if input set is set */
+	uint32_t flow_count[I40E_FILTER_PCTYPE_MAX];
 
 	uint32_t flex_flow_count[I40E_MAX_FLXPLD_LAYER];
 };
diff --git a/drivers/net/i40e/i40e_fdir.c b/drivers/net/i40e/i40e_fdir.c
index a447cfdd92..5f8e167632 100644
--- a/drivers/net/i40e/i40e_fdir.c
+++ b/drivers/net/i40e/i40e_fdir.c
@@ -1606,13 +1606,13 @@ i40e_flow_set_fdir_inset(struct i40e_pf *pf,
 	}
 
 	/* Check if the configuration is conflicted */
-	if (pf->fdir.inset_flag[pctype] &&
+	if (pf->fdir.flow_count[pctype] &&
 	    memcmp(&pf->fdir.input_set[pctype], &input_set, sizeof(uint64_t))) {
 		PMD_DRV_LOG(ERR, "Conflict with the first rule's input set.");
 		return -EINVAL;
 	}
 
-	if (pf->fdir.inset_flag[pctype] &&
+	if (pf->fdir.flow_count[pctype] &&
 	    !memcmp(&pf->fdir.input_set[pctype], &input_set, sizeof(uint64_t)))
 		return 0;
 
@@ -1665,7 +1665,6 @@ i40e_flow_set_fdir_inset(struct i40e_pf *pf,
 	I40E_WRITE_FLUSH(hw);
 
 	pf->fdir.input_set[pctype] = input_set;
-	pf->fdir.inset_flag[pctype] = 1;
 	return 0;
 }
 
@@ -1889,11 +1888,13 @@ i40e_flow_add_del_fdir_filter(struct rte_eth_dev *dev,
 	}
 
 	if (add) {
+		fdir_info->flow_count[pctype]++;
 		fdir_info->fdir_actual_cnt++;
 		if (fdir_info->fdir_invalprio == 1 &&
 				fdir_info->fdir_guarantee_free_space > 0)
 			fdir_info->fdir_guarantee_free_space--;
 	} else {
+		fdir_info->flow_count[pctype]--;
 		fdir_info->fdir_actual_cnt--;
 		if (fdir_info->fdir_invalprio == 1 &&
 				fdir_info->fdir_guarantee_free_space <
diff --git a/drivers/net/i40e/i40e_flow.c b/drivers/net/i40e/i40e_flow.c
index 19bdce0195..7de1a8dbc0 100644
--- a/drivers/net/i40e/i40e_flow.c
+++ b/drivers/net/i40e/i40e_flow.c
@@ -5501,7 +5501,7 @@ i40e_flow_flush_fdir_filter(struct i40e_pf *pf)
 
 		for (pctype = I40E_FILTER_PCTYPE_NONF_IPV4_UDP;
 		     pctype <= I40E_FILTER_PCTYPE_L2_PAYLOAD; pctype++) {
-			pf->fdir.inset_flag[pctype] = 0;
+			pf->fdir.flow_count[pctype] = 0;
 			pf->fdir.flex_mask_flag[pctype] = 0;
 		}
 
-- 
2.30.2

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2021-07-12 13:41:39.226644617 +0100
+++ 0050-net-i40e-fix-flow-director-input-set-conflict.patch	2021-07-12 13:41:36.398120694 +0100
@@ -1 +1 @@
-From 2fefa0942e75330e09b8ad7513e89e4a66dd738f Mon Sep 17 00:00:00 2001
+From 5299dc34f4682c29cdd735d9f5f2f65f6d7b8460 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 2fefa0942e75330e09b8ad7513e89e4a66dd738f ]
+
@@ -20 +21,0 @@
-Cc: stable at dpdk.org
@@ -32 +33 @@
-index dd61258739..df716c180f 100644
+index 100d42d6bd..63a9fc04d0 100644
@@ -35 +36 @@
-@@ -1087,6 +1087,7 @@ i40e_init_fdir_filter_list(struct rte_eth_dev *dev)
+@@ -1082,6 +1082,7 @@ i40e_init_fdir_filter_list(struct rte_eth_dev *dev)
@@ -43 +44 @@
-@@ -1135,6 +1136,10 @@ i40e_init_fdir_filter_list(struct rte_eth_dev *dev)
+@@ -1130,6 +1131,10 @@ i40e_init_fdir_filter_list(struct rte_eth_dev *dev)
@@ -55 +56 @@
-index ba6acd1878..585a0d8eb2 100644
+index aeabe5a205..ba1bb3dc98 100644
@@ -58 +59 @@
-@@ -788,7 +788,7 @@ struct i40e_fdir_info {
+@@ -786,7 +786,7 @@ struct i40e_fdir_info {
@@ -68 +69 @@
-index 20658816ee..6f73936091 100644
+index a447cfdd92..5f8e167632 100644
@@ -71 +72 @@
-@@ -1607,13 +1607,13 @@ i40e_flow_set_fdir_inset(struct i40e_pf *pf,
+@@ -1606,13 +1606,13 @@ i40e_flow_set_fdir_inset(struct i40e_pf *pf,
@@ -87 +88 @@
-@@ -1666,7 +1666,6 @@ i40e_flow_set_fdir_inset(struct i40e_pf *pf,
+@@ -1665,7 +1665,6 @@ i40e_flow_set_fdir_inset(struct i40e_pf *pf,
@@ -95 +96 @@
-@@ -1890,11 +1889,13 @@ i40e_flow_add_del_fdir_filter(struct rte_eth_dev *dev,
+@@ -1889,11 +1888,13 @@ i40e_flow_add_del_fdir_filter(struct rte_eth_dev *dev,
@@ -110 +111 @@
-index 2cc9ad9ef7..ff8441b378 100644
+index 19bdce0195..7de1a8dbc0 100644
@@ -113 +114 @@
-@@ -4940,7 +4940,7 @@ i40e_flow_flush_fdir_filter(struct i40e_pf *pf)
+@@ -5501,7 +5501,7 @@ i40e_flow_flush_fdir_filter(struct i40e_pf *pf)


More information about the stable mailing list