DPDK-dev Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: liujie5@linkdatatechnology.com
To: stephen@networkplumber.org
Cc: dev@dpdk.org
Subject: [PATCH v5 26/45] net/sxe2: add ACL engine event statistics support
Date: Fri, 28 Aug 2026 11:25:40 +0800	[thread overview]
Message-ID: <20260828032540.2107547-1-liujie5@linkdatatechnology.com> (raw)
In-Reply-To: <20260827024035.1432256-1-liujie5@linkdatatechnology.com>

From: Jie Liu <liujie5@linkdatatechnology.com>

Add statistics support for the ACL flow engine to track packet hits
and bytes, enabling flow aging and traffic monitoring for ACL rules.

- Add acl-stat-type devarg to configure the statistics type
- Implement sxe2_drv_flow_acl_get_stat_id/free_stat/query_stat
- Handle the ACL engine in flow create/destroy/query paths
- Add fnav_hw_res and acl_hw_res count resources

Cc: stephen@networkplumber.org
Signed-off-by: Jie Liu <liujie5@linkdatatechnology.com>
---
 doc/guides/nics/sxe2.rst                  | 11 +++
 drivers/net/sxe2/sxe2_cmd_chnl.c          | 71 ++++++++++++++++++
 drivers/net/sxe2/sxe2_cmd_chnl.h          |  7 ++
 drivers/net/sxe2/sxe2_drv_cmd.h           | 19 +++++
 drivers/net/sxe2/sxe2_dump.c              |  2 +
 drivers/net/sxe2/sxe2_ethdev.c            | 23 ++++--
 drivers/net/sxe2/sxe2_ethdev.h            |  1 +
 drivers/net/sxe2/sxe2_flow.c              | 89 ++++++++++++++++++-----
 drivers/net/sxe2/sxe2_flow_define.h       |  5 +-
 drivers/net/sxe2/sxe2_flow_parse_action.c | 25 +++++--
 drivers/net/sxe2/sxe2_queue.c             |  2 +
 11 files changed, 224 insertions(+), 31 deletions(-)

diff --git a/doc/guides/nics/sxe2.rst b/doc/guides/nics/sxe2.rst
index 8278a5f108..c5b400a8ba 100644
--- a/doc/guides/nics/sxe2.rst
+++ b/doc/guides/nics/sxe2.rst
@@ -98,6 +98,17 @@ Runtime Configuration
 
   Default value is 3 (count both packets and bytes).
 
+- ``acl-stat-type`` parameter [int]
+
+  This parameter controls the ACL flow engine statistics type
+  used for flow rule hit counting (via ``rte_flow_query``).
+
+  - 1: Only count the number of packets.
+  - 2: Only count the number of bytes.
+  - 3: Count both packets and bytes (default).
+
+  Default value is 3 (count both packets and bytes).
+
 - ``drv-sw-stats`` parameter [int]
 
   This parameter controls whether per-packet software statistics (SW stats)
diff --git a/drivers/net/sxe2/sxe2_cmd_chnl.c b/drivers/net/sxe2/sxe2_cmd_chnl.c
index 3229c72597..16a2c3fea4 100644
--- a/drivers/net/sxe2/sxe2_cmd_chnl.c
+++ b/drivers/net/sxe2/sxe2_cmd_chnl.c
@@ -1829,6 +1829,77 @@ int32_t sxe2_drv_flow_fnav_query_stat(struct sxe2_adapter *adapter,
 	return ret;
 }
 
+int32_t sxe2_drv_flow_acl_get_stat_id(struct sxe2_adapter *adapter, uint32_t *stat_id)
+{
+	struct sxe2_drv_flow_fnav_get_stat_id_req req = { 0 };
+	struct sxe2_drv_flow_fnav_get_stat_id_resp resp = { 0 };
+	struct sxe2_drv_cmd_params cmd             = { 0 };
+	struct sxe2_common_device *cdev = adapter->cdev;
+	int32_t ret                                 = -1;
+
+	sxe2_drv_cmd_params_fill(adapter, &cmd, SXE2_DRV_CMD_FLOW_ACL_STAT_ALLOC,
+				&req, sizeof(req),
+				&resp, sizeof(resp));
+	ret = sxe2_drv_cmd_exec(cdev, &cmd);
+	if (ret) {
+		PMD_DEV_LOG_ERR(adapter, DRV, "Failed to get acl stat id, ret: %d.", ret);
+		goto l_end;
+	}
+	*stat_id = resp.stat_id;
+
+l_end:
+	return ret;
+}
+
+int32_t sxe2_drv_flow_acl_free_stat(struct sxe2_adapter *adapter, uint32_t stat_id)
+{
+	struct sxe2_drv_flow_fnav_free_stat_id_req req = { 0 };
+	struct sxe2_drv_cmd_params cmd             = { 0 };
+	struct sxe2_common_device *cdev = adapter->cdev;
+	int32_t ret                                 = -1;
+
+	req.stat_id = stat_id;
+	sxe2_drv_cmd_params_fill(adapter, &cmd, SXE2_DRV_CMD_FLOW_ACL_STAT_FREE,
+				&req, sizeof(req),
+				NULL, 0);
+	ret = sxe2_drv_cmd_exec(cdev, &cmd);
+	if (ret) {
+		PMD_DEV_LOG_ERR(adapter, DRV, "Failed to free acl stat id, ret: %d.", ret);
+		goto l_end;
+	}
+
+l_end:
+	return ret;
+}
+
+int32_t sxe2_drv_flow_acl_query_stat(struct sxe2_adapter *adapter,
+				     struct sxe2_flow_cid_mgr *mgr)
+{
+	struct sxe2_drv_acl_query_stat_req req = { 0 };
+	struct sxe2_drv_acl_query_stat_resp resp = { 0 };
+	struct sxe2_drv_cmd_params cmd             = { 0 };
+	struct sxe2_common_device *cdev = adapter->cdev;
+	int32_t ret                                 = -1;
+
+	req.stat_id = mgr->stat_index;
+	req.stat_ctrl = mgr->count_type;
+	req.is_clear = 1;
+
+	sxe2_drv_cmd_params_fill(adapter, &cmd, SXE2_DRV_CMD_FLOW_ACL_STAT_QUERY,
+				 &req, sizeof(req), &resp, sizeof(resp));
+	ret = sxe2_drv_cmd_exec(cdev, &cmd);
+	if (ret) {
+		PMD_DEV_LOG_ERR(adapter, DRV, "Failed to query ACL stat, stat id: %u, ret: %d.",
+				req.stat_id, ret);
+		goto l_end;
+	}
+	mgr->hits += resp.stat_hits;
+	mgr->bytes += resp.stat_bytes;
+
+l_end:
+	return ret;
+}
+
 int32_t sxe2_drv_srcvsi_prune_config(struct sxe2_adapter *adapter,
 			uint16_t *vsi_list, uint16_t vsi_cnt, bool set)
 {
diff --git a/drivers/net/sxe2/sxe2_cmd_chnl.h b/drivers/net/sxe2/sxe2_cmd_chnl.h
index cfea1a1f0e..7d07068bfc 100644
--- a/drivers/net/sxe2/sxe2_cmd_chnl.h
+++ b/drivers/net/sxe2/sxe2_cmd_chnl.h
@@ -161,6 +161,13 @@ int32_t sxe2_drv_flow_fnav_free_stat(struct sxe2_adapter *adapter, uint32_t stat
 int32_t sxe2_drv_flow_fnav_query_stat(struct sxe2_adapter *adapter,
 		struct sxe2_flow_cid_mgr *mgr);
 
+int32_t sxe2_drv_flow_acl_get_stat_id(struct sxe2_adapter *adapter, uint32_t *stat_id);
+
+int32_t sxe2_drv_flow_acl_free_stat(struct sxe2_adapter *adapter, uint32_t stat_id);
+
+int32_t sxe2_drv_flow_acl_query_stat(struct sxe2_adapter *adapter,
+			struct sxe2_flow_cid_mgr *mgr);
+
 int32_t sxe2_drv_srcvsi_prune_config(struct sxe2_adapter *adapter,
 		uint16_t *vsi_list, uint16_t vsi_cnt, bool set);
 
diff --git a/drivers/net/sxe2/sxe2_drv_cmd.h b/drivers/net/sxe2/sxe2_drv_cmd.h
index 03ef3b315d..cc71e2364e 100644
--- a/drivers/net/sxe2/sxe2_drv_cmd.h
+++ b/drivers/net/sxe2/sxe2_drv_cmd.h
@@ -668,6 +668,18 @@ struct __rte_aligned(4) __rte_packed_begin sxe2_drv_vsi_fc_get_resp {
 	uint8_t rsv[3];
 } __rte_packed_end;
 
+struct __rte_aligned(4) __rte_packed_begin sxe2_drv_acl_query_stat_req {
+	uint32_t stat_id;
+	uint32_t stat_ctrl;
+	uint32_t is_clear;
+} __rte_packed_end;
+
+struct __rte_aligned(4) __rte_packed_begin sxe2_drv_acl_query_stat_resp {
+	uint32_t stat_index;
+	uint64_t stat_hits;
+	uint64_t stat_bytes;
+} __rte_packed_end;
+
 enum sxe2_drv_cmd_module {
 	SXE2_DRV_CMD_MODULE_HANDSHAKE = 0,
 	SXE2_DRV_CMD_MODULE_DEV = 1,
@@ -824,6 +836,13 @@ enum sxe2_drv_cmd_code {
 	SXE2_DRV_CMD_OPT_EEP_GET =
 		SXE2_MK_DRV_CMD(SXE2_DRV_CMD_MODULE_OPT, 1),
 
+	SXE2_DRV_CMD_FLOW_ACL_STAT_QUERY =
+		SXE2_MK_DRV_CMD(SXE2_DRV_CMD_MODULE_ACL, 1),
+	SXE2_DRV_CMD_FLOW_ACL_STAT_ALLOC =
+		SXE2_MK_DRV_CMD(SXE2_DRV_CMD_MODULE_ACL, 2),
+	SXE2_DRV_CMD_FLOW_ACL_STAT_FREE =
+		SXE2_MK_DRV_CMD(SXE2_DRV_CMD_MODULE_ACL, 3),
+
 };
 
 #endif /* SXE2_DRV_CMD_H */
diff --git a/drivers/net/sxe2/sxe2_dump.c b/drivers/net/sxe2/sxe2_dump.c
index 590219f502..31f7d6ba61 100644
--- a/drivers/net/sxe2/sxe2_dump.c
+++ b/drivers/net/sxe2/sxe2_dump.c
@@ -80,12 +80,14 @@ sxe2_dump_dev_args_info(FILE *file, struct rte_eth_dev *dev)
 		"\t  -- no_sched_mode: %s\n"
 		"\t  -- flow-duplicate-pattern: %u\n"
 		"\t  -- fnav-stat-type: %u\n"
+		"\t  -- acl-stat-type: %u\n"
 		"\t  -- sched_layer_mode: %u\n"
 		"\t  -- rx_low_latency: %s\n"
 		"\t  -- function-flow-direct: %s\n",
 		adapter->devargs.no_sched_mode ? "On" : "Off",
 		adapter->devargs.flow_dup_pattern_mode,
 		adapter->devargs.fnav_stat_type,
+		adapter->devargs.acl_stat_type,
 		adapter->devargs.sched_layer_mode,
 		adapter->devargs.rx_low_latency ? "On" : "Off",
 		adapter->devargs.func_flow_direct_en ? "On" : "Off");
diff --git a/drivers/net/sxe2/sxe2_ethdev.c b/drivers/net/sxe2/sxe2_ethdev.c
index 08986e384f..77a31eb8a1 100644
--- a/drivers/net/sxe2/sxe2_ethdev.c
+++ b/drivers/net/sxe2/sxe2_ethdev.c
@@ -72,6 +72,7 @@ static const struct rte_pci_id pci_id_sxe2_tbl[] = {
 #define SXE2_DEVARG_FLOW_DUP_PATTERN_MODE "flow-duplicate-pattern"
 #define SXE2_DEVARG_FUNC_FLOW_DIRCT "function-flow-direct"
 #define SXE2_DEVARG_FNAV_STAT_TYPE "fnav-stat-type"
+#define SXE2_DEVARG_ACL_STAT_TYPE "acl-stat-type"
 #define SXE2_DEVARG_NO_SCHED_MODE "no-sched-mode"
 #define SXE2_DEVARG_SCHED_LAYER_MODE "sched-layer-mode"
 #define SXE2_DEVARG_RX_LOW_LATENCY "rx-low-latency"
@@ -981,11 +982,11 @@ sxe2_buffer_split_supported_hdr_ptypes_get(struct rte_eth_dev *dev __rte_unused,
 	return ptypes;
 }
 
-static int32_t sxe2_parse_fnav_stat_type(const char *key, const char *value, void *args)
+static int32_t sxe2_parse_stat_type(const char *key, const char *value, void *args)
 {
 	int32_t ret = -EINVAL;
 	uint8_t *num = (uint8_t *)args;
-	unsigned long fnav_stat_type;
+	unsigned long stat_type;
 	char *endptr = NULL;
 
 	if (value == NULL || args == NULL) {
@@ -993,19 +994,19 @@ static int32_t sxe2_parse_fnav_stat_type(const char *key, const char *value, voi
 		goto l_end;
 	}
 	errno = 0;
-	fnav_stat_type = strtoul(value, &endptr, 10);
+	stat_type = strtoul(value, &endptr, 10);
 	if (errno != 0 || endptr == value || *endptr != '\0') {
 		PMD_LOG_WARN(INIT, "%s: \"%s\" is not a valid int value.",
 			key, value);
 		goto l_end;
 	}
-	if (fnav_stat_type > SXE2_FNAV_STAT_ENA_ALL ||
-		fnav_stat_type == SXE2_FNAV_STAT_ENA_NONE) {
+	if (stat_type > SXE2_FNAV_STAT_ENA_ALL ||
+		stat_type == SXE2_FNAV_STAT_ENA_NONE) {
 		PMD_LOG_ERR(INIT, "%s: \"%s\" out of range [1-3].",
 			key, value);
 		goto l_end;
 	}
-	*num = (uint8_t)fnav_stat_type;
+	*num = (uint8_t)stat_type;
 	ret = 0;
 l_end:
 	return ret;
@@ -1187,13 +1188,20 @@ static int32_t sxe2_args_parse(struct rte_eth_dev *dev, struct sxe2_dev_kvargs_i
 	if (kvargs == NULL)
 		goto l_end;
 	ret = sxe2_kvargs_process(kvargs, SXE2_DEVARG_FNAV_STAT_TYPE,
-				 &sxe2_parse_fnav_stat_type,
+				 &sxe2_parse_stat_type,
 				 &adapter->devargs.fnav_stat_type);
 	if (ret) {
 		PMD_DEV_LOG_ERR(adapter, INIT, "Failed to parse fnav stat type, ret:%d", ret);
 		goto l_end;
 	}
 
+	ret = sxe2_kvargs_process(kvargs, SXE2_DEVARG_ACL_STAT_TYPE,
+				 &sxe2_parse_stat_type, &adapter->devargs.acl_stat_type);
+	if (ret) {
+		PMD_DEV_LOG_ERR(adapter, INIT, "Failed to parse acl stat type, ret:%d", ret);
+		goto l_end;
+	}
+
 	ret = sxe2_kvargs_process(kvargs, SXE2_DEVARG_NO_SCHED_MODE,
 				 &sxe2_parse_bool,
 				 &adapter->devargs.no_sched_mode);
@@ -2366,6 +2374,7 @@ RTE_PMD_REGISTER_PARAM_STRING(net_sxe2,
 	"flow-duplicate-pattern=<0|1|2> "
 	"function-flow-direct=<0|1> "
 	"fnav-stat-type=<1|2|3> "
+	"acl-stat-type=<1|2|3> "
 	"no-sched-mode=<0|1> "
 	"sched-layer-mode=<0-3> "
 	"rx-low-latency=<0|1>");
diff --git a/drivers/net/sxe2/sxe2_ethdev.h b/drivers/net/sxe2/sxe2_ethdev.h
index e818578319..e9f78fe57f 100644
--- a/drivers/net/sxe2/sxe2_ethdev.h
+++ b/drivers/net/sxe2/sxe2_ethdev.h
@@ -135,6 +135,7 @@ struct sxe2_devargs {
 	uint8_t flow_dup_pattern_mode;
 	uint8_t func_flow_direct_en;
 	uint8_t fnav_stat_type;
+	uint8_t acl_stat_type;
 	uint8_t no_sched_mode;
 	uint8_t sched_layer_mode;
 	uint8_t rx_low_latency;
diff --git a/drivers/net/sxe2/sxe2_flow.c b/drivers/net/sxe2/sxe2_flow.c
index cd39385340..d82d3bbd02 100644
--- a/drivers/net/sxe2/sxe2_flow.c
+++ b/drivers/net/sxe2/sxe2_flow.c
@@ -1204,13 +1204,23 @@ static int32_t sxe2_flow_flush(struct rte_eth_dev *dev, struct rte_flow_error *e
 int32_t sxe2_flow_get_filter_cid(struct sxe2_adapter *adapter, struct sxe2_flow *flow)
 {
 	int32_t ret = 0;
-	struct sxe2_flow_cid_mgr_list_t *cid_mgr_list =
-				&adapter->flow_ctxt.hw_res.flow_cid_mgr_list;
+	struct sxe2_flow_cid_mgr_list_t *cid_mgr_list = NULL;
 	uint32_t stat_index;
 	uint32_t user_id;
 	uint32_t driver_id;
 	struct sxe2_flow_cid_mgr *temp = NULL;
 	struct sxe2_flow_cid_mgr *mgr = NULL;
+	uint32_t count_type;
+
+	if (flow->engine_type == SXE2_FLOW_ENGINE_FNAV) {
+		cid_mgr_list = &adapter->flow_ctxt.fnav_hw_res.flow_cid_mgr_list;
+		count_type = adapter->flow_ctxt.fnav_hw_res.count_type;
+	} else if (flow->engine_type == SXE2_FLOW_ENGINE_ACL) {
+		cid_mgr_list = &adapter->flow_ctxt.acl_hw_res.flow_cid_mgr_list;
+		count_type = adapter->flow_ctxt.acl_hw_res.count_type;
+	} else {
+		goto l_end;
+	}
 
 	if (sxe2_test_bit(SXE2_FLOW_ACTION_COUNT, flow->action.act_types)) {
 		user_id = flow->action.count.user_id;
@@ -1233,7 +1243,10 @@ int32_t sxe2_flow_get_filter_cid(struct sxe2_adapter *adapter, struct sxe2_flow
 				goto l_end;
 			}
 
-			ret = sxe2_drv_flow_fnav_get_stat_id(adapter, &stat_index);
+			if (flow->engine_type == SXE2_FLOW_ENGINE_FNAV)
+				ret = sxe2_drv_flow_fnav_get_stat_id(adapter, &stat_index);
+			else if (flow->engine_type == SXE2_FLOW_ENGINE_ACL)
+				ret = sxe2_drv_flow_acl_get_stat_id(adapter, &stat_index);
 			if (ret) {
 				PMD_LOG_ERR(DRV, "Failed to alloc fw count id.");
 				rte_free(mgr);
@@ -1244,7 +1257,7 @@ int32_t sxe2_flow_get_filter_cid(struct sxe2_adapter *adapter, struct sxe2_flow
 			mgr->user_id = user_id;
 			mgr->driver_id = driver_id;
 			mgr->stat_index = stat_index;
-			mgr->count_type = adapter->flow_ctxt.hw_res.count_type;
+			mgr->count_type = count_type;
 		}
 		flow->action.count.stat_index = mgr->stat_index;
 		flow->action.count.stat_ctrl = mgr->count_type;
@@ -1260,13 +1273,26 @@ int32_t sxe2_flow_free_mgr(struct sxe2_adapter *adapter,
 		       struct rte_flow_error *error)
 {
 	int32_t ret = 0;
-	struct sxe2_flow_cid_mgr_list_t *cid_mgr_list =
-				&adapter->flow_ctxt.hw_res.flow_cid_mgr_list;
+	struct sxe2_flow_cid_mgr_list_t *cid_mgr_list = NULL;
 	struct sxe2_flow_cid_mgr *mgr = *mgr_ptr;
 	uint32_t user_id = flow->action.count.user_id;
-	if (user_id == 0) {
-		TAILQ_REMOVE(cid_mgr_list, mgr, next);
-		ret = sxe2_drv_flow_fnav_free_stat(adapter, mgr->stat_index);
+
+	if (user_id == 0 && mgr) {
+		if (flow->engine_type == SXE2_FLOW_ENGINE_ACL) {
+			cid_mgr_list = &adapter->flow_ctxt.acl_hw_res.flow_cid_mgr_list;
+			TAILQ_REMOVE(cid_mgr_list, mgr, next);
+			ret = sxe2_drv_flow_acl_free_stat(adapter, mgr->stat_index);
+		} else if (flow->engine_type == SXE2_FLOW_ENGINE_FNAV) {
+			cid_mgr_list = &adapter->flow_ctxt.fnav_hw_res.flow_cid_mgr_list;
+			TAILQ_REMOVE(cid_mgr_list, mgr, next);
+			ret = sxe2_drv_flow_fnav_free_stat(adapter, mgr->stat_index);
+		} else {
+			PMD_LOG_ERR(DRV,
+				"Failed to free flow count, unknown engine type: %d.",
+				flow->engine_type);
+			ret = -ENOTSUP;
+			return ret;
+		}
 		if (ret) {
 			rte_flow_error_set(error, EIO,
 				RTE_FLOW_ERROR_TYPE_ACTION, NULL,
@@ -1287,13 +1313,19 @@ int32_t sxe2_flow_query_mgr(struct sxe2_adapter *adapter,
 			struct rte_flow_error *error)
 {
 	int32_t ret = 0;
-	struct sxe2_flow_cid_mgr_list_t *cid_mgr_list =
-				&adapter->flow_ctxt.hw_res.flow_cid_mgr_list;
+	struct sxe2_flow_cid_mgr_list_t *cid_mgr_list = NULL;
 	struct sxe2_flow_cid_mgr *temp = NULL;
 	struct sxe2_flow_cid_mgr *mgr = NULL;
 	uint32_t user_id = flow->action.count.user_id;
 	uint32_t driver_id = flow->action.count.driver_id;
 
+	if (flow->engine_type == SXE2_FLOW_ENGINE_ACL)
+		cid_mgr_list = &adapter->flow_ctxt.acl_hw_res.flow_cid_mgr_list;
+	else if (flow->engine_type == SXE2_FLOW_ENGINE_FNAV)
+		cid_mgr_list = &adapter->flow_ctxt.fnav_hw_res.flow_cid_mgr_list;
+	else
+		goto l_end;
+
 	TAILQ_FOREACH(temp, cid_mgr_list, next) {
 		if (temp->user_id == user_id &&
 			temp->driver_id == driver_id) {
@@ -1310,7 +1342,15 @@ int32_t sxe2_flow_query_mgr(struct sxe2_adapter *adapter,
 		ret = -EINVAL;
 		goto l_end;
 	}
-	ret = sxe2_drv_flow_fnav_query_stat(adapter, mgr);
+
+	if (flow->engine_type == SXE2_FLOW_ENGINE_ACL) {
+		ret = sxe2_drv_flow_acl_query_stat(adapter, mgr);
+	} else if (flow->engine_type == SXE2_FLOW_ENGINE_FNAV) {
+		ret = sxe2_drv_flow_fnav_query_stat(adapter, mgr);
+	} else {
+		PMD_LOG_ERR(DRV, "query flow engine neither FNAV nor ACL");
+		ret = -ENOTSUP;
+	}
 	if (ret) {
 		rte_flow_error_set(error, EINVAL,
 			RTE_FLOW_ERROR_TYPE_ITEM, NULL,
@@ -1461,12 +1501,18 @@ int32_t sxe2_flow_init(struct rte_eth_dev *dev)
 	struct sxe2_adapter *adapter = SXE2_DEV_PRIVATE_TO_ADAPTER(dev);
 	int32_t ret = 0;
 	TAILQ_INIT(&adapter->flow_ctxt.rte_flow_list);
-	TAILQ_INIT(&adapter->flow_ctxt.hw_res.flow_cid_mgr_list);
+	TAILQ_INIT(&adapter->flow_ctxt.fnav_hw_res.flow_cid_mgr_list);
+	TAILQ_INIT(&adapter->flow_ctxt.acl_hw_res.flow_cid_mgr_list);
 	if (adapter->devargs.fnav_stat_type)
-		adapter->flow_ctxt.hw_res.count_type =
+		adapter->flow_ctxt.fnav_hw_res.count_type =
 			adapter->devargs.fnav_stat_type;
 	else
-		adapter->flow_ctxt.hw_res.count_type = SXE2_FNAV_STAT_ENA_ALL;
+		adapter->flow_ctxt.fnav_hw_res.count_type = SXE2_FNAV_STAT_ENA_ALL;
+
+	if (adapter->devargs.acl_stat_type)
+		adapter->flow_ctxt.acl_hw_res.count_type = adapter->devargs.acl_stat_type;
+	else
+		adapter->flow_ctxt.acl_hw_res.count_type = SXE2_FNAV_STAT_ENA_ALL;
 
 	adapter->flow_ctxt.fnav_inited = 1;
 	rte_spinlock_init(&adapter->flow_ctxt.flow_list_lock);
@@ -1485,13 +1531,13 @@ int32_t sxe2_flow_uninit(struct rte_eth_dev *dev)
 	struct rte_flow_error error;
 	struct sxe2_flow_cid_mgr *mgr = NULL;
 	struct sxe2_flow_cid_mgr *temp = NULL;
-	struct sxe2_flow_cid_mgr_list_t *cid_mgr_list =
-						&adapter->flow_ctxt.hw_res.flow_cid_mgr_list;
+	struct sxe2_flow_cid_mgr_list_t *cid_mgr_list = NULL;
 
 	ret = sxe2_flow_flush(dev, &error);
 	if (ret)
 		PMD_LOG_ERR(DRV, "Failed to flush flow, ret: %d.", ret);
 
+	cid_mgr_list = &adapter->flow_ctxt.fnav_hw_res.flow_cid_mgr_list;
 	TAILQ_FOREACH_SAFE(mgr, cid_mgr_list, next, temp) {
 		TAILQ_REMOVE(cid_mgr_list, mgr, next);
 		ret = sxe2_drv_flow_fnav_free_stat(adapter, mgr->stat_index);
@@ -1500,5 +1546,14 @@ int32_t sxe2_flow_uninit(struct rte_eth_dev *dev)
 				"Failed to free fnav stat id, ret: %d.", ret);
 		rte_free(mgr);
 	}
+
+	cid_mgr_list = &adapter->flow_ctxt.acl_hw_res.flow_cid_mgr_list;
+	TAILQ_FOREACH_SAFE(mgr, cid_mgr_list, next, temp) {
+		TAILQ_REMOVE(cid_mgr_list, mgr, next);
+		ret = sxe2_drv_flow_acl_free_stat(adapter, mgr->stat_index);
+		if (ret)
+			PMD_LOG_ERR(DRV, "Failed to free acl stat id, ret: %d.", ret);
+		rte_free(mgr);
+	}
 	return ret;
 }
diff --git a/drivers/net/sxe2/sxe2_flow_define.h b/drivers/net/sxe2/sxe2_flow_define.h
index 8a5d871978..d04499f5cb 100644
--- a/drivers/net/sxe2/sxe2_flow_define.h
+++ b/drivers/net/sxe2/sxe2_flow_define.h
@@ -100,7 +100,7 @@ TAILQ_HEAD(rte_flow_list_t, rte_flow);
 
 struct sxe2_flow_cid_mgr {
 	TAILQ_ENTRY(sxe2_flow_cid_mgr) next;
-	uint16_t stat_index;
+	uint32_t stat_index;
 	uint32_t user_id;
 	uint32_t driver_id;
 	uint32_t count_type;
@@ -118,7 +118,8 @@ struct sxe2_flow_count_resource {
 struct sxe2_flow_context {
 	struct rte_flow_list_t rte_flow_list;
 	rte_spinlock_t flow_list_lock;
-	struct sxe2_flow_count_resource hw_res;
+	struct sxe2_flow_count_resource fnav_hw_res;
+	struct sxe2_flow_count_resource acl_hw_res;
 	uint16_t tunnel_port_list[SXE2_FLOW_UDP_TUNNEL_MAX];
 	uint32_t fnav_inited;
 };
diff --git a/drivers/net/sxe2/sxe2_flow_parse_action.c b/drivers/net/sxe2/sxe2_flow_parse_action.c
index a9559e2d7e..db70b146c6 100644
--- a/drivers/net/sxe2/sxe2_flow_parse_action.c
+++ b/drivers/net/sxe2/sxe2_flow_parse_action.c
@@ -953,7 +953,8 @@ static int32_t sxe2_flow_check_actions(struct rte_eth_dev *dev __rte_unused, str
 		}
 	}
 
-	if (engine_type == SXE2_FLOW_ENGINE_FNAV) {
+	if (engine_type == SXE2_FLOW_ENGINE_FNAV ||
+		engine_type == SXE2_FLOW_ENGINE_ACL) {
 		if (vsi_num) {
 			flow->action.q_region.q_index = 0;
 			flow->action.q_region.region = 7;
@@ -988,7 +989,8 @@ int32_t sxe2_flow_parse_action(struct rte_eth_dev *dev,
 		case RTE_FLOW_ACTION_TYPE_VOID:
 			break;
 		case RTE_FLOW_ACTION_TYPE_PASSTHRU:
-			if (engine_type == SXE2_FLOW_ENGINE_FNAV) {
+			if (engine_type == SXE2_FLOW_ENGINE_FNAV ||
+				engine_type == SXE2_FLOW_ENGINE_ACL) {
 				sxe2_set_bit(SXE2_FLOW_ACTION_PASSTHRU, flow->action.act_types);
 				action_num[SXE2_FLOW_ACTION_PASSTHRU]++;
 			} else {
@@ -1037,11 +1039,24 @@ int32_t sxe2_flow_parse_action(struct rte_eth_dev *dev,
 			if (engine_type == SXE2_FLOW_ENGINE_FNAV) {
 				sxe2_set_bit(SXE2_FLOW_ACTION_COUNT, flow->action.act_types);
 				act_count = action->conf;
-				flow->action.count.user_id = act_count->id;
+				flow->action.count.user_id =
+					(act_count == NULL) ? 0 : act_count->id;
+				flow->action.count.driver_id = 0;
+				if (flow->action.count.user_id == 0) {
+					flow->action.count.driver_id =
+						++adapter->flow_ctxt.fnav_hw_res.global_index;
+				}
+				action_num[SXE2_FLOW_ACTION_COUNT]++;
+			} else if (engine_type == SXE2_FLOW_ENGINE_ACL) {
+				sxe2_set_bit(SXE2_FLOW_ACTION_COUNT, flow->action.act_types);
+				act_count = action->conf;
+				flow->action.count.user_id =
+					(act_count == NULL) ? 0 : act_count->id;
 				flow->action.count.driver_id = 0;
-				if (flow->action.count.user_id == 0)
+				if (flow->action.count.user_id == 0) {
 					flow->action.count.driver_id =
-						++adapter->flow_ctxt.hw_res.global_index;
+						++adapter->flow_ctxt.acl_hw_res.global_index;
+				}
 				action_num[SXE2_FLOW_ACTION_COUNT]++;
 			} else {
 				rte_flow_error_set(error, ENOTSUP,
diff --git a/drivers/net/sxe2/sxe2_queue.c b/drivers/net/sxe2/sxe2_queue.c
index afb2681b72..3aaa14c685 100644
--- a/drivers/net/sxe2/sxe2_queue.c
+++ b/drivers/net/sxe2/sxe2_queue.c
@@ -39,6 +39,8 @@ int32_t sxe2_queues_init(struct rte_eth_dev *dev)
 		rxq->rx_buf_len = RTE_MIN(rxq->rx_buf_len, SXE2_RX_MAX_DATA_BUF_SIZE);
 		if (frame_size > rxq->rx_buf_len)
 			dev->data->scattered_rx = 1;
+		if (adapter->flow_ctxt.fnav_inited)
+			rxq->fnav_enable = true;
 	}
 
 	adapter->ptp_ctxt.mbuf_rx_ts_offset = -1;
-- 
2.52.0


  parent reply	other threads:[~2026-08-28  3:26 UTC|newest]

Thread overview: 207+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-08-18  2:15 [PATCH v1 00/13] net/sxe2: fix bugs liujie5
2026-08-18  2:15 ` [PATCH v1 01/13] net/sxe2: add Rx queue buffer split fill support liujie5
2026-08-18  2:15 ` [PATCH v1 02/13] net/sxe2: update switchdev repr VSI ID display format liujie5
2026-08-18  2:15 ` [PATCH v1 03/13] net/sxe2: add ACL engine event statistics support liujie5
2026-08-18  2:15 ` [PATCH v1 04/13] net/sxe2: enhance device cap and res management liujie5
2026-08-18  2:15 ` [PATCH v1 05/13] net/sxe2: improve representor device initialization liujie5
2026-08-18  2:15 ` [PATCH v1 06/13] net/sxe2: refactor flow tunnel port handling liujie5
2026-08-18  2:15 ` [PATCH v1 07/13] net/sxe2: validate IPsec key length against maximum limit liujie5
2026-08-18  2:15 ` [PATCH v1 08/13] net/sxe2: enhance repr event handling and MP code liujie5
2026-08-18  2:15 ` [PATCH v1 09/13] net/sxe2: optimize vectorized Tx/Rx path liujie5
2026-08-18  2:15 ` [PATCH v1 10/13] common/sxe2: allow munmap during kernel reset liujie5
2026-08-18  2:15 ` [PATCH v1 11/13] net/sxe2: clean up duplicate function declarations liujie5
2026-08-18  2:15 ` [PATCH v1 12/13] net/sxe2: clean up structure definitions liujie5
2026-08-18  2:15 ` [PATCH v1 13/13] doc/sxe2: add acl-stat-type parameter documentation liujie5
2026-08-26  8:53   ` [PATCH v3 00/51] net/sxe2: add Stars SXE2 net driver with fixes liujie5
2026-08-26 17:07     ` Stephen Hemminger
2026-08-26  8:53   ` [PATCH v3 01/51] common/sxe2: fix null pointer in class driver remove liujie5
2026-08-26  8:53   ` [PATCH v3 02/51] common/sxe2: allow munmap during kernel reset liujie5
2026-08-26  8:53   ` [PATCH v3 03/51] net/sxe2: fix VF PCI device ID liujie5
2026-08-26  8:54   ` [PATCH v3 04/51] net/sxe2: fix MSIX register width in PF map table liujie5
2026-08-26  8:54   ` [PATCH v3 05/51] net/sxe2: restore pf and port index caps assignment liujie5
2026-08-26  8:54   ` [PATCH v3 06/51] net/sxe2: fix VSI lifecycle management liujie5
2026-08-26  8:54   ` [PATCH v3 07/51] net/sxe2: initialize stats in representor device init liujie5
2026-08-26  8:54   ` [PATCH v3 08/51] net/sxe2: use base device name for representor naming liujie5
2026-08-26  8:54   ` [PATCH v3 09/51] net/sxe2: propagate LSC event to VF representors liujie5
2026-08-26  8:54   ` [PATCH v3 10/51] net/sxe2: validate IPsec key length against maximum limit liujie5
2026-08-26  8:54   ` [PATCH v3 11/51] net/sxe2: rename representor VSI ID fields liujie5
2026-08-26  8:54   ` [PATCH v3 12/51] net/sxe2: clean up duplicate function declarations liujie5
2026-08-26  8:54   ` [PATCH v3 13/51] net/sxe2: fix null VSI dereference in device info liujie5
2026-08-26  8:55   ` [PATCH v3 14/51] net/sxe2: fill MAC and queue counts " liujie5
2026-08-26  8:55   ` [PATCH v3 15/51] net/sxe2: fix QinQ and RSS offload capability report liujie5
2026-08-26  8:55   ` [PATCH v3 16/51] net/sxe2: use regular write for mapped registers liujie5
2026-08-26  8:55   ` [PATCH v3 17/51] net/sxe2: move PCI register read macro to common header liujie5
2026-08-26  8:55   ` [PATCH v3 18/51] net/sxe2: validate PCI map resource type liujie5
2026-08-26  8:55   ` [PATCH v3 19/51] net/sxe2: guard PCI BAR unmap when not initialized liujie5
2026-08-26  8:55   ` [PATCH v3 20/51] net/sxe2: fix null dereference in dev uninit liujie5
2026-08-26  8:55   ` [PATCH v3 21/51] net/sxe2: fix duplicated cleanup in dev close liujie5
2026-08-26  8:55   ` [PATCH v3 22/51] net/sxe2: align dev init and cleanup order liujie5
2026-08-26  8:55   ` [PATCH v3 23/51] net/sxe2: simplify switchdev representor matching liujie5
2026-08-26  8:55   ` [PATCH v3 24/51] net/sxe2: probe all requested PF ports liujie5
2026-08-26  8:56   ` [PATCH v3 25/51] net/sxe2: rename fnav cid manager symbols to flow liujie5
2026-08-26  8:56   ` [PATCH v3 26/51] net/sxe2: move tunnel port helpers into flow module liujie5
2026-08-26  8:56   ` [PATCH v3 27/51] net/sxe2: add ACL engine event statistics support liujie5
2026-08-26  8:56   ` [PATCH v3 28/51] net/sxe2: guard Rx queue event FD free in unregister liujie5
2026-08-26  8:56   ` [PATCH v3 29/51] net/sxe2: refactor primary process MP message handling liujie5
2026-08-26  8:56   ` [PATCH v3 30/51] net/sxe2: refactor Tx queue reset operations liujie5
2026-08-26  8:56   ` [PATCH v3 31/51] net/sxe2: unify vectorized Tx buffer handling liujie5
2026-08-26  8:56   ` [PATCH v3 32/51] net/sxe2: refine vectorized Tx/Rx mode setup liujie5
2026-08-26  8:56   ` [PATCH v3 33/51] net/sxe2: fix RSS action attribute validation liujie5
2026-08-26  8:56   ` [PATCH v3 34/51] net/sxe2: restore PF-only guard in udp tunnel port add liujie5
2026-08-26  8:57   ` [PATCH v3 35/51] net/sxe2: align flow meta proc priority handling with V3 liujie5
2026-08-26  8:57   ` [PATCH v3 36/51] net/sxe2: restore link update call in status query liujie5
2026-08-26  8:57   ` [PATCH v3 37/51] net/sxe2: validate representor ID against VF count liujie5
2026-08-26  8:57   ` [PATCH v3 38/51] net/sxe2: use primary VSI ID for representor VSI liujie5
2026-08-26  8:57   ` [PATCH v3 39/51] net/sxe2: wrap command params fill debug log in macro liujie5
2026-08-26  8:57   ` [PATCH v3 40/51] net/sxe2: restore Rx queue buffer split fill support liujie5
2026-08-26  8:57   ` [PATCH v3 41/51] net/sxe2: skip tunnel config fill on get failure liujie5
2026-08-26  8:57   ` [PATCH v3 42/51] net/sxe2: skip flow id assignment on filter add failure liujie5
2026-08-26  8:57   ` [PATCH v3 43/51] net/sxe2: fix command channel log messages liujie5
2026-08-26  8:57   ` [PATCH v3 44/51] net/sxe2: align command structs with historical kernel layout liujie5
2026-08-26  8:58   ` [PATCH v3 45/51] common/sxe2: fix ioctl channel log and close handling liujie5
2026-08-26  8:58   ` [PATCH v3 46/51] doc/sxe2: remove drv-sw-stats parameter documentation liujie5
2026-08-26  8:58   ` [PATCH v3 47/51] net/sxe2: harden ACL flow count resource handling liujie5
2026-08-26  8:58   ` [PATCH v3 48/51] net/sxe2: fix device init and representor matching issues liujie5
2026-08-26  8:58   ` [PATCH v3 49/51] net/sxe2: use correct loop counter type for representor LSC liujie5
2026-08-26  8:58   ` [PATCH v3 50/51] net/sxe2: restore NULL check in vectorized Tx mbuf release liujie5
2026-08-26  8:58   ` [PATCH v3 51/51] net/sxe2: simplify Rx queue buffer split fill helper liujie5
2026-08-27  2:36     ` [PATCH v4 00/44] net/sxe2: add Stars SXE2 net driver with fixes liujie5
2026-08-27 15:14       ` Stephen Hemminger
2026-08-27  2:36     ` [PATCH v4 01/44] common/sxe2: fix null pointer in class driver remove liujie5
2026-08-27  2:36     ` [PATCH v4 02/44] common/sxe2: allow munmap during kernel reset liujie5
2026-08-27  2:36     ` [PATCH v4 03/44] net/sxe2: fix VF PCI device ID liujie5
2026-08-27  2:36     ` [PATCH v4 04/44] net/sxe2: fix MSIX register width in PF map table liujie5
2026-08-27  2:36     ` [PATCH v4 05/44] net/sxe2: restore pf and port index caps assignment liujie5
2026-08-27  2:36     ` [PATCH v4 06/44] net/sxe2: fix VSI lifecycle management liujie5
2026-08-27  2:37     ` [PATCH v4 07/44] net/sxe2: initialize stats in representor device init liujie5
2026-08-27  2:37     ` [PATCH v4 08/44] net/sxe2: use base device name for representor naming liujie5
2026-08-27  2:37     ` [PATCH v4 09/44] net/sxe2: propagate LSC event to VF representors liujie5
2026-08-27  2:37     ` [PATCH v4 10/44] net/sxe2: validate IPsec key length against maximum limit liujie5
2026-08-27  2:37     ` [PATCH v4 11/44] net/sxe2: rename representor VSI ID fields liujie5
2026-08-27  2:37     ` [PATCH v4 12/44] net/sxe2: clean up duplicate function declarations liujie5
2026-08-27  2:37     ` [PATCH v4 13/44] net/sxe2: fix null VSI dereference in device info liujie5
2026-08-27  2:37     ` [PATCH v4 14/44] net/sxe2: fill MAC and queue counts " liujie5
2026-08-27  2:37     ` [PATCH v4 15/44] net/sxe2: fix QinQ and RSS offload capability report liujie5
2026-08-27  2:37     ` [PATCH v4 16/44] net/sxe2: use regular write for mapped registers liujie5
2026-08-27  2:37     ` [PATCH v4 17/44] net/sxe2: move PCI register read macro to common header liujie5
2026-08-27  2:38     ` [PATCH v4 18/44] net/sxe2: validate PCI map resource type liujie5
2026-08-27  2:38     ` [PATCH v4 19/44] net/sxe2: guard PCI BAR unmap when not initialized liujie5
2026-08-27  2:38     ` [PATCH v4 20/44] net/sxe2: fix null dereference in dev uninit liujie5
2026-08-27  2:38     ` [PATCH v4 21/44] net/sxe2: fix duplicated cleanup in dev close liujie5
2026-08-27  2:38     ` [PATCH v4 22/44] net/sxe2: align dev init and cleanup order liujie5
2026-08-27  2:38     ` [PATCH v4 23/44] net/sxe2: simplify switchdev representor matching liujie5
2026-08-27  2:38     ` [PATCH v4 24/44] net/sxe2: rename fnav cid manager symbols to flow liujie5
2026-08-27  2:38     ` [PATCH v4 25/44] net/sxe2: move tunnel port helpers into flow module liujie5
2026-08-27  2:38     ` [PATCH v4 26/44] net/sxe2: add ACL engine event statistics support liujie5
2026-08-27  2:38     ` [PATCH v4 27/44] net/sxe2: guard Rx queue event FD free in unregister liujie5
2026-08-27  2:39     ` [PATCH v4 28/44] net/sxe2: refactor primary process MP message handling liujie5
2026-08-27  2:39     ` [PATCH v4 29/44] net/sxe2: refactor Tx queue reset operations liujie5
2026-08-27  2:39     ` [PATCH v4 30/44] net/sxe2: unify vectorized Tx buffer handling liujie5
2026-08-27  2:39     ` [PATCH v4 31/44] net/sxe2: refine vectorized Tx/Rx mode setup liujie5
2026-08-27  2:39     ` [PATCH v4 32/44] net/sxe2: fix RSS action attribute validation liujie5
2026-08-27  2:39     ` [PATCH v4 33/44] net/sxe2: restore PF-only guard in udp tunnel port add liujie5
2026-08-27  2:39     ` [PATCH v4 34/44] net/sxe2: restore link update call in status query liujie5
2026-08-27  2:39     ` [PATCH v4 35/44] net/sxe2: validate representor ID against VF count liujie5
2026-08-27  2:39     ` [PATCH v4 36/44] net/sxe2: use primary VSI ID for representor VSI liujie5
2026-08-27  2:39     ` [PATCH v4 37/44] net/sxe2: wrap command params fill debug log in macro liujie5
2026-08-27  2:40     ` [PATCH v4 38/44] net/sxe2: restore Rx queue buffer split fill support liujie5
2026-08-27  2:40     ` [PATCH v4 39/44] net/sxe2: skip tunnel config fill on get failure liujie5
2026-08-27  2:40     ` [PATCH v4 40/44] net/sxe2: skip flow id assignment on filter add failure liujie5
2026-08-27  2:40     ` [PATCH v4 41/44] net/sxe2: fix command channel log messages liujie5
2026-08-27  2:40     ` [PATCH v4 42/44] net/sxe2: align command structs with historical kernel layout liujie5
2026-08-27  2:40     ` [PATCH v4 43/44] common/sxe2: fix ioctl channel log and close handling liujie5
2026-08-27  2:40     ` [PATCH v4 44/44] doc/sxe2: remove drv-sw-stats parameter documentation liujie5
2026-08-28  3:23       ` [PATCH v5 00/45] net/sxe2: add Stars SXE2 net driver with fixes liujie5
2026-08-28  3:23       ` [PATCH v5 01/45] common/sxe2: fix null pointer in class driver remove liujie5
2026-08-28  3:23       ` [PATCH v5 02/45] common/sxe2: allow munmap during kernel reset liujie5
2026-08-28  3:23       ` [PATCH v5 03/45] net/sxe2: fix VF PCI device ID liujie5
2026-08-28  3:23       ` [PATCH v5 04/45] net/sxe2: fix MSIX register width in PF map table liujie5
2026-08-28  3:23       ` [PATCH v5 05/45] net/sxe2: restore pf and port index caps assignment liujie5
2026-08-28  3:23       ` [PATCH v5 06/45] net/sxe2: fix VSI lifecycle management liujie5
2026-08-28  3:23       ` [PATCH v5 07/45] net/sxe2: initialize stats in representor device init liujie5
2026-08-28  3:23       ` [PATCH v5 08/45] net/sxe2: use base device name for representor naming liujie5
2026-08-28  3:23       ` [PATCH v5 09/45] net/sxe2: propagate LSC event to VF representors liujie5
2026-08-28  3:24       ` [PATCH v5 10/45] net/sxe2: clear security context pointer on uninit liujie5
2026-08-28  3:24       ` [PATCH v5 11/45] net/sxe2: rename representor VSI ID fields liujie5
2026-08-28  3:24       ` [PATCH v5 12/45] net/sxe2: clean up duplicate function declarations liujie5
2026-08-28  3:24       ` [PATCH v5 13/45] net/sxe2: fix null VSI dereference in device info liujie5
2026-08-28  3:24       ` [PATCH v5 14/45] net/sxe2: fill MAC and queue counts " liujie5
2026-08-28  3:24       ` [PATCH v5 15/45] net/sxe2: fix QinQ and RSS offload capability report liujie5
2026-08-28  3:24       ` [PATCH v5 16/45] net/sxe2: use regular write for mapped registers liujie5
2026-08-28  3:24       ` [PATCH v5 17/45] net/sxe2: move PCI register read macro to common header liujie5
2026-08-28  3:24       ` [PATCH v5 18/45] net/sxe2: validate PCI map resource type liujie5
2026-08-28  3:24       ` [PATCH v5 19/45] net/sxe2: guard PCI BAR unmap when not initialized liujie5
2026-08-28  3:25       ` [PATCH v5 20/45] net/sxe2: fix null dereference in dev uninit liujie5
2026-08-28  3:25       ` [PATCH v5 21/45] net/sxe2: fix duplicated cleanup in dev close liujie5
2026-08-28  3:25       ` [PATCH v5 22/45] net/sxe2: align dev init and cleanup order liujie5
2026-08-28  3:25       ` [PATCH v5 23/45] net/sxe2: simplify switchdev representor matching liujie5
2026-08-28  3:25       ` [PATCH v5 24/45] net/sxe2: rename fnav cid manager symbols to flow liujie5
2026-08-28  3:25       ` [PATCH v5 25/45] net/sxe2: move tunnel port helpers into flow module liujie5
2026-08-28  3:25       ` liujie5 [this message]
2026-08-28  3:25       ` [PATCH v5 27/45] net/sxe2: guard Rx queue event FD free in unregister liujie5
2026-08-28  3:25       ` [PATCH v5 28/45] net/sxe2: refactor primary process MP message handling liujie5
2026-08-28  3:25       ` [PATCH v5 29/45] net/sxe2: refactor Tx queue reset operations liujie5
2026-08-28  3:26       ` [PATCH v5 30/45] net/sxe2: unify vectorized Tx buffer handling liujie5
2026-08-28  3:26       ` [PATCH v5 31/45] net/sxe2: refine vectorized Tx/Rx mode setup liujie5
2026-08-28  3:26       ` [PATCH v5 32/45] net/sxe2: fix RSS action attribute validation liujie5
2026-08-28  3:26       ` [PATCH v5 33/45] net/sxe2: restore PF-only guard in udp tunnel port add liujie5
2026-08-28  3:26       ` [PATCH v5 34/45] net/sxe2: restore link update call in status query liujie5
2026-08-28  3:26       ` [PATCH v5 35/45] net/sxe2: validate representor ID against VF count liujie5
2026-08-28  3:26       ` [PATCH v5 36/45] net/sxe2: use primary VSI ID for representor VSI liujie5
2026-08-28  3:26       ` [PATCH v5 37/45] net/sxe2: wrap command params fill debug log in macro liujie5
2026-08-28  3:26       ` [PATCH v5 38/45] net/sxe2: restore Rx queue buffer split fill support liujie5
2026-08-28  3:26       ` [PATCH v5 39/45] net/sxe2: skip tunnel config fill on get failure liujie5
2026-08-28  3:27       ` [PATCH v5 40/45] net/sxe2: skip flow id assignment on filter add failure liujie5
2026-08-28  3:27       ` [PATCH v5 41/45] net/sxe2: fix command channel log messages liujie5
2026-08-28  3:27       ` [PATCH v5 42/45] net/sxe2: align command structs with historical kernel layout liujie5
2026-08-28  3:27       ` [PATCH v5 43/45] common/sxe2: fix ioctl channel log and close handling liujie5
2026-08-28  3:27       ` [PATCH v5 44/45] doc/sxe2: remove drv-sw-stats parameter documentation liujie5
2026-08-28  3:27       ` [PATCH v5 45/45] net/sxe2: remove ineffective queue counts in representor info liujie5
2026-08-28  7:36         ` [PATCH v6 00/45] net/sxe2: update SXE2 poll mode driver liujie5
2026-08-28 16:49           ` Stephen Hemminger
2026-08-28  7:36         ` [PATCH v6 01/45] common/sxe2: fix null pointer in class driver remove liujie5
2026-08-28  7:36         ` [PATCH v6 02/45] common/sxe2: allow munmap during kernel reset liujie5
2026-08-28  7:36         ` [PATCH v6 03/45] net/sxe2: fix VF PCI device ID liujie5
2026-08-28  7:37         ` [PATCH v6 04/45] net/sxe2: fix MSIX register width in PF map table liujie5
2026-08-28  7:37         ` [PATCH v6 05/45] net/sxe2: restore pf and port index caps assignment liujie5
2026-08-28  7:37         ` [PATCH v6 06/45] net/sxe2: fix VSI lifecycle management liujie5
2026-08-28  7:37         ` [PATCH v6 07/45] net/sxe2: initialize stats in representor device init liujie5
2026-08-28  7:37         ` [PATCH v6 08/45] net/sxe2: use base device name for representor naming liujie5
2026-08-28  7:37         ` [PATCH v6 09/45] net/sxe2: propagate LSC event to VF representors liujie5
2026-08-28  7:37         ` [PATCH v6 10/45] net/sxe2: clear security context pointer on uninit liujie5
2026-08-28  7:37         ` [PATCH v6 11/45] net/sxe2: rename representor VSI ID fields liujie5
2026-08-28  7:37         ` [PATCH v6 12/45] net/sxe2: clean up duplicate function declarations liujie5
2026-08-28  7:37         ` [PATCH v6 13/45] net/sxe2: fix null VSI dereference in device info liujie5
2026-08-28  7:37         ` [PATCH v6 14/45] net/sxe2: fill MAC and queue counts " liujie5
2026-08-28  7:38         ` [PATCH v6 15/45] net/sxe2: fix QinQ and RSS offload capability report liujie5
2026-08-28  7:38         ` [PATCH v6 16/45] net/sxe2: use regular write for mapped registers liujie5
2026-08-28  7:38         ` [PATCH v6 17/45] net/sxe2: move PCI register read macro to common header liujie5
2026-08-28  7:38         ` [PATCH v6 18/45] net/sxe2: validate PCI map resource type liujie5
2026-08-28  7:38         ` [PATCH v6 19/45] net/sxe2: guard PCI BAR unmap when not initialized liujie5
2026-08-28  7:38         ` [PATCH v6 20/45] net/sxe2: fix null dereference in dev uninit liujie5
2026-08-28  7:38         ` [PATCH v6 21/45] net/sxe2: fix duplicated cleanup in dev close liujie5
2026-08-28  7:38         ` [PATCH v6 22/45] net/sxe2: align dev init and cleanup order liujie5
2026-08-28  7:38         ` [PATCH v6 23/45] net/sxe2: simplify switchdev representor matching liujie5
2026-08-28  7:38         ` [PATCH v6 24/45] net/sxe2: rename fnav cid manager symbols to flow liujie5
2026-08-28  7:39         ` [PATCH v6 25/45] net/sxe2: move tunnel port helpers into flow module liujie5
2026-08-28  7:39         ` [PATCH v6 26/45] net/sxe2: add ACL engine event statistics support liujie5
2026-08-28  7:39         ` [PATCH v6 27/45] net/sxe2: guard Rx queue event FD free in unregister liujie5
2026-08-28  7:39         ` [PATCH v6 28/45] net/sxe2: refactor primary process MP message handling liujie5
2026-08-28  7:39         ` [PATCH v6 29/45] net/sxe2: refactor Tx queue reset operations liujie5
2026-08-28  7:39         ` [PATCH v6 30/45] net/sxe2: unify vectorized Tx buffer handling liujie5
2026-08-28  7:39         ` [PATCH v6 31/45] net/sxe2: refine vectorized Tx/Rx mode setup liujie5
2026-08-28  7:39         ` [PATCH v6 32/45] net/sxe2: fix RSS action attribute validation liujie5
2026-08-28  7:39         ` [PATCH v6 33/45] net/sxe2: restore PF-only guard in udp tunnel port add liujie5
2026-08-28  7:39         ` [PATCH v6 34/45] net/sxe2: restore link update call in status query liujie5
2026-08-28  7:39         ` [PATCH v6 35/45] net/sxe2: validate representor ID against VF count liujie5
2026-08-28  7:40         ` [PATCH v6 36/45] net/sxe2: use primary VSI ID for representor VSI liujie5
2026-08-28  7:40         ` [PATCH v6 37/45] net/sxe2: wrap command params fill debug log in macro liujie5
2026-08-28  7:40         ` [PATCH v6 38/45] net/sxe2: restore Rx queue buffer split fill support liujie5
2026-08-28  7:40         ` [PATCH v6 39/45] net/sxe2: skip tunnel config fill on get failure liujie5
2026-08-28  7:40         ` [PATCH v6 40/45] net/sxe2: skip flow id assignment on filter add failure liujie5
2026-08-28  7:40         ` [PATCH v6 41/45] net/sxe2: fix command channel log messages liujie5
2026-08-28  7:40         ` [PATCH v6 42/45] net/sxe2: align command structs with historical kernel layout liujie5
2026-08-28  7:40         ` [PATCH v6 43/45] common/sxe2: fix ioctl channel log and close handling liujie5
2026-08-28  7:40         ` [PATCH v6 44/45] doc/sxe2: remove drv-sw-stats parameter documentation liujie5
2026-08-28  7:40         ` [PATCH v6 45/45] net/sxe2: remove ineffective queue counts in representor info liujie5
2026-08-18 14:22 ` [PATCH v1 00/13] net/sxe2: fix bugs Stephen Hemminger

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260828032540.2107547-1-liujie5@linkdatatechnology.com \
    --to=liujie5@linkdatatechnology.com \
    --cc=dev@dpdk.org \
    --cc=stephen@networkplumber.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox