[PATCH v3 48/51] net/sxe2: fix device init and representor matching issues

liujie5 at linkdatatechnology.com liujie5 at linkdatatechnology.com
Wed Aug 26 10:58:19 CEST 2026


From: Jie Liu <liujie5 at linkdatatechnology.com>

- sxe2_dev_init(): move the init_rss_err label above
  sxe2_security_uinit() so an RSS init failure still unwinds the
  security context instead of leaking it.
- sxe2_buffer_split_supported_hdr_ptypes_get(): exclude the trailing
  RTE_PTYPE_UNKNOWN terminator from no_of_elements so applications do
  not receive a bogus ptype entry.
- sxe2_switchdev_repr_match(): match the PF when the adapter's pf_num
  is among the requested ports instead of requiring every requested
  port to equal pf_num, which could never succeed with multiple ports.

Cc: stable at dpdk.org
Cc: stephen at networkplumber.org
Signed-off-by: Jie Liu <liujie5 at linkdatatechnology.com>
---
 drivers/net/sxe2/sxe2_ethdev.c | 18 ++++++++++--------
 1 file changed, 10 insertions(+), 8 deletions(-)

diff --git a/drivers/net/sxe2/sxe2_ethdev.c b/drivers/net/sxe2/sxe2_ethdev.c
index 88fe43298a..f4e65852d4 100644
--- a/drivers/net/sxe2/sxe2_ethdev.c
+++ b/drivers/net/sxe2/sxe2_ethdev.c
@@ -986,7 +986,7 @@ sxe2_buffer_split_supported_hdr_ptypes_get(struct rte_eth_dev *dev __rte_unused,
 
 		RTE_PTYPE_UNKNOWN
 	};
-	*no_of_elements = RTE_DIM(ptypes);
+	*no_of_elements = RTE_DIM(ptypes) - 1;
 
 	return ptypes;
 }
@@ -2028,8 +2028,8 @@ static int32_t sxe2_dev_init(struct rte_eth_dev *dev,
 init_fc_state_err:
 	(void)sxe2_flow_uninit(dev);
 init_flow_err:
-	sxe2_security_uinit(dev);
 init_rss_err:
+	sxe2_security_uinit(dev);
 init_security_err:
 	sxe2_intr_uninit(dev);
 init_irq_err:
@@ -2198,12 +2198,14 @@ static bool sxe2_switchdev_repr_match(struct sxe2_adapter *adapter,
 	}
 
 	for (port_idx = 0; port_idx < req_eth_da->nb_ports; ++port_idx) {
-		if (adapter->switchdev_info.pf_num != req_eth_da->ports[port_idx]) {
-			PMD_DEV_LOG_DEBUG(adapter, DRV, "switchdev pf %u not match req pf %u",
-				adapter->switchdev_info.pf_num, req_eth_da->ports[port_idx]);
-			rte_errno = EBUSY;
-			return false;
-		}
+		if (adapter->switchdev_info.pf_num == req_eth_da->ports[port_idx])
+			break;
+	}
+	if (port_idx == req_eth_da->nb_ports) {
+		PMD_DEV_LOG_DEBUG(adapter, DRV, "switchdev pf %u not match req pf",
+			adapter->switchdev_info.pf_num);
+		rte_errno = EBUSY;
+		return false;
 	}
 
 	for (repr_idx = 0; repr_idx < req_eth_da->nb_representor_ports; ++repr_idx) {
-- 
2.52.0



More information about the dev mailing list