patch 'net/ice: fix sizing of filter hash table' has been queued to stable release 22.11.6

luca.boccassi at gmail.com luca.boccassi at gmail.com
Mon Jul 15 17:26:34 CEST 2024


Hi,

FYI, your patch has been queued to stable release 22.11.6

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/17/24. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the
patch applied to the branch. This will indicate if there was any rebasing
needed to apply to the stable branch. If there were code changes for rebasing
(ie: not only metadata diffs), please double check that the rebase was
correctly done.

Queued patches are on a temporary branch at:
https://github.com/bluca/dpdk-stable

This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/4999f309fb5e219d331854190882883828968924

Thanks.

Luca Boccassi

---
>From 4999f309fb5e219d331854190882883828968924 Mon Sep 17 00:00:00 2001
From: Bruce Richardson <bruce.richardson at intel.com>
Date: Thu, 11 Jul 2024 17:57:28 +0100
Subject: [PATCH] net/ice: fix sizing of filter hash table

[ upstream commit 15800bfdac939e2056c76e7c634825bb682e334c ]

The hash table used for managing the filter rules in the ice driver was
dimensioned to a hard-coded 16k, which is insufficient for holding all
the filters supported by E830 HW.

Rather than using a hard-coded value which may need updates for new
hardware support, we can query the NIC max filter support from hardware
and scale the hash table size based on that value.

Fixes: 1a2fc1799f09 ("net/ice: reject duplicated flow for flow director")

Signed-off-by: Bruce Richardson <bruce.richardson at intel.com>
Acked-by: David Marchand <david.marchand at redhat.com>
---
 drivers/net/ice/ice_ethdev.h      | 2 --
 drivers/net/ice/ice_fdir_filter.c | 9 +++++++--
 2 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ice/ice_ethdev.h b/drivers/net/ice/ice_ethdev.h
index bfc9140dba..9799cad394 100644
--- a/drivers/net/ice/ice_ethdev.h
+++ b/drivers/net/ice/ice_ethdev.h
@@ -351,8 +351,6 @@ struct ice_fdir_filter_conf {
 	u8 pkt_len;
 };
 
-#define ICE_MAX_FDIR_FILTER_NUM		(1024 * 16)
-
 struct ice_fdir_fltr_pattern {
 	enum ice_fltr_ptype flow_type;
 
diff --git a/drivers/net/ice/ice_fdir_filter.c b/drivers/net/ice/ice_fdir_filter.c
index 81e88c1dd8..7e97547d8b 100644
--- a/drivers/net/ice/ice_fdir_filter.c
+++ b/drivers/net/ice/ice_fdir_filter.c
@@ -377,12 +377,17 @@ ice_fdir_init_filter_list(struct ice_pf *pf)
 {
 	struct rte_eth_dev *dev = &rte_eth_devices[pf->dev_data->port_id];
 	struct ice_fdir_info *fdir_info = &pf->fdir;
+	struct ice_hw *hw = &pf->adapter->hw;
 	char fdir_hash_name[RTE_HASH_NAMESIZE];
+	const uint32_t max_fd_filter_entries =
+			hw->func_caps.fd_fltr_guar + hw->func_caps.fd_fltr_best_effort;
+	/* dimension hash table as max filters + 12.5% to ensure a little headroom */
+	const uint32_t hash_table_entries = max_fd_filter_entries + (max_fd_filter_entries >> 3);
 	int ret;
 
 	struct rte_hash_parameters fdir_hash_params = {
 		.name = fdir_hash_name,
-		.entries = ICE_MAX_FDIR_FILTER_NUM,
+		.entries = hash_table_entries,
 		.key_len = sizeof(struct ice_fdir_fltr_pattern),
 		.hash_func = rte_hash_crc,
 		.hash_func_init_val = 0,
@@ -400,7 +405,7 @@ ice_fdir_init_filter_list(struct ice_pf *pf)
 	}
 	fdir_info->hash_map = rte_zmalloc("ice_fdir_hash_map",
 					  sizeof(*fdir_info->hash_map) *
-					  ICE_MAX_FDIR_FILTER_NUM,
+					  hash_table_entries,
 					  0);
 	if (!fdir_info->hash_map) {
 		PMD_INIT_LOG(ERR,
-- 
2.39.2

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2024-07-15 16:19:37.437382729 +0100
+++ 0056-net-ice-fix-sizing-of-filter-hash-table.patch	2024-07-15 16:19:34.628207744 +0100
@@ -1 +1 @@
-From 15800bfdac939e2056c76e7c634825bb682e334c Mon Sep 17 00:00:00 2001
+From 4999f309fb5e219d331854190882883828968924 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 15800bfdac939e2056c76e7c634825bb682e334c ]
+
@@ -24 +26 @@
-index d73faaed49..3ea9f37dc8 100644
+index bfc9140dba..9799cad394 100644
@@ -37 +39 @@
-index 0b7920ad44..edd8cc8f1a 100644
+index 81e88c1dd8..7e97547d8b 100644
@@ -40 +42 @@
-@@ -375,12 +375,17 @@ ice_fdir_init_filter_list(struct ice_pf *pf)
+@@ -377,12 +377,17 @@ ice_fdir_init_filter_list(struct ice_pf *pf)
@@ -59 +61 @@
-@@ -398,7 +403,7 @@ ice_fdir_init_filter_list(struct ice_pf *pf)
+@@ -400,7 +405,7 @@ ice_fdir_init_filter_list(struct ice_pf *pf)


More information about the stable mailing list