[PATCH v3 51/51] net/sxe2: simplify Rx queue buffer split fill helper

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


From: Jie Liu <liujie5 at linkdatatechnology.com>

sxe2_rxq_buf_split_fill() re-tests the RTE_ETH_RX_OFFLOAD_BUFFER_SPLIT
offload flag even though the caller already guarantees it, leaving the
else branch dead. It also returns -1 on failure instead of a standard
errno.

Drop the redundant flag test and dead else branch, set hdr_len once
after the switch chain, and return -EINVAL for an unconfigured split
protocol and -ENOTSUP for an unsupported one.

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

diff --git a/drivers/net/sxe2/sxe2_cmd_chnl.c b/drivers/net/sxe2/sxe2_cmd_chnl.c
index b4f8b337b5..9bd6e3355f 100644
--- a/drivers/net/sxe2/sxe2_cmd_chnl.c
+++ b/drivers/net/sxe2/sxe2_cmd_chnl.c
@@ -197,97 +197,79 @@ int32_t sxe2_drv_vsi_del(struct sxe2_adapter *adapter, struct sxe2_vsi *vsi)
 static int32_t sxe2_rxq_buf_split_fill(struct sxe2_rx_queue *rxq,
 				   struct sxe2_drv_rxq_ctxt *ctxt)
 {
-	int32_t ret = 0;
 	uint32_t proto_hdr;
 
-	if (rxq->offloads & RTE_ETH_RX_OFFLOAD_BUFFER_SPLIT) {
-		proto_hdr = rxq->rx_seg[0].proto_hdr;
-		if (proto_hdr == RTE_PTYPE_UNKNOWN) {
-			PMD_LOG_ERR(RX, "Buffer split protocol must be configured");
-			ret = -1;
-			goto l_end;
-		}
+	proto_hdr = rxq->rx_seg[0].proto_hdr;
+	if (proto_hdr == RTE_PTYPE_UNKNOWN) {
+		PMD_LOG_ERR(RX, "Buffer split protocol must be configured");
+		return -EINVAL;
+	}
 
-		switch (proto_hdr & RTE_PTYPE_L4_MASK) {
-		case RTE_PTYPE_L4_TCP:
-			ctxt->split_type_mask = SXE2_PTYPE_L4_TCP;
-			ctxt->hdr_len = SXE2_RX_HDR_SIZE;
-			goto l_end;
-		case RTE_PTYPE_L4_UDP:
-			ctxt->split_type_mask = SXE2_PTYPE_L4_UDP;
-			ctxt->hdr_len = SXE2_RX_HDR_SIZE;
-			goto l_end;
-		case RTE_PTYPE_L4_SCTP:
-			ctxt->split_type_mask = SXE2_PTYPE_L4_SCTP;
-			ctxt->hdr_len = SXE2_RX_HDR_SIZE;
-			goto l_end;
-		}
+	switch (proto_hdr & RTE_PTYPE_L4_MASK) {
+	case RTE_PTYPE_L4_TCP:
+		ctxt->split_type_mask = SXE2_PTYPE_L4_TCP;
+		goto l_end;
+	case RTE_PTYPE_L4_UDP:
+		ctxt->split_type_mask = SXE2_PTYPE_L4_UDP;
+		goto l_end;
+	case RTE_PTYPE_L4_SCTP:
+		ctxt->split_type_mask = SXE2_PTYPE_L4_SCTP;
+		goto l_end;
+	}
 
-		switch (proto_hdr & RTE_PTYPE_L3_MASK) {
-		case RTE_PTYPE_L3_IPV4_EXT_UNKNOWN:
-			ctxt->split_type_mask = SXE2_PTYPE_L3_IPV4;
-			ctxt->hdr_len = SXE2_RX_HDR_SIZE;
-			goto l_end;
-		case RTE_PTYPE_L3_IPV6_EXT_UNKNOWN:
-			ctxt->split_type_mask = SXE2_PTYPE_L3_IPV6;
-			ctxt->hdr_len = SXE2_RX_HDR_SIZE;
-			goto l_end;
-		}
+	switch (proto_hdr & RTE_PTYPE_L3_MASK) {
+	case RTE_PTYPE_L3_IPV4_EXT_UNKNOWN:
+		ctxt->split_type_mask = SXE2_PTYPE_L3_IPV4;
+		goto l_end;
+	case RTE_PTYPE_L3_IPV6_EXT_UNKNOWN:
+		ctxt->split_type_mask = SXE2_PTYPE_L3_IPV6;
+		goto l_end;
+	}
 
-		switch (proto_hdr & RTE_PTYPE_L2_MASK) {
-		case RTE_PTYPE_L2_ETHER:
-			ctxt->split_type_mask = SXE2_PTYPE_L2_ETHER;
-			ctxt->hdr_len = SXE2_RX_HDR_SIZE;
-			goto l_end;
-		}
+	switch (proto_hdr & RTE_PTYPE_L2_MASK) {
+	case RTE_PTYPE_L2_ETHER:
+		ctxt->split_type_mask = SXE2_PTYPE_L2_ETHER;
+		goto l_end;
+	}
 
-		switch (proto_hdr & RTE_PTYPE_INNER_L4_MASK) {
-		case RTE_PTYPE_INNER_L4_TCP:
-			ctxt->split_type_mask = SXE2_PTYPE_INNER_L4_TCP;
-			ctxt->hdr_len = SXE2_RX_HDR_SIZE;
-			goto l_end;
-		case RTE_PTYPE_INNER_L4_UDP:
-			ctxt->split_type_mask = SXE2_PTYPE_INNER_L4_UDP;
-			ctxt->hdr_len = SXE2_RX_HDR_SIZE;
-			goto l_end;
-		case RTE_PTYPE_INNER_L4_SCTP:
-			ctxt->split_type_mask = SXE2_PTYPE_INNER_L4_SCTP;
-			ctxt->hdr_len = SXE2_RX_HDR_SIZE;
-			goto l_end;
-		}
+	switch (proto_hdr & RTE_PTYPE_INNER_L4_MASK) {
+	case RTE_PTYPE_INNER_L4_TCP:
+		ctxt->split_type_mask = SXE2_PTYPE_INNER_L4_TCP;
+		goto l_end;
+	case RTE_PTYPE_INNER_L4_UDP:
+		ctxt->split_type_mask = SXE2_PTYPE_INNER_L4_UDP;
+		goto l_end;
+	case RTE_PTYPE_INNER_L4_SCTP:
+		ctxt->split_type_mask = SXE2_PTYPE_INNER_L4_SCTP;
+		goto l_end;
+	}
 
-		switch (proto_hdr & RTE_PTYPE_INNER_L3_MASK) {
-		case RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN:
-			ctxt->split_type_mask = SXE2_PTYPE_INNER_L3_IPV4;
-			ctxt->hdr_len = SXE2_RX_HDR_SIZE;
-			goto l_end;
-		case RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN:
-			ctxt->split_type_mask = SXE2_PTYPE_INNER_L3_IPV6;
-			ctxt->hdr_len = SXE2_RX_HDR_SIZE;
-			goto l_end;
-		}
+	switch (proto_hdr & RTE_PTYPE_INNER_L3_MASK) {
+	case RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN:
+		ctxt->split_type_mask = SXE2_PTYPE_INNER_L3_IPV4;
+		goto l_end;
+	case RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN:
+		ctxt->split_type_mask = SXE2_PTYPE_INNER_L3_IPV6;
+		goto l_end;
+	}
 
-		switch (proto_hdr & RTE_PTYPE_INNER_L2_MASK) {
-		case RTE_PTYPE_INNER_L2_ETHER:
-			ctxt->split_type_mask = SXE2_PTYPE_INNER_L2_ETHER;
-			ctxt->hdr_len = SXE2_RX_HDR_SIZE;
-			goto l_end;
-		}
+	switch (proto_hdr & RTE_PTYPE_INNER_L2_MASK) {
+	case RTE_PTYPE_INNER_L2_ETHER:
+		ctxt->split_type_mask = SXE2_PTYPE_INNER_L2_ETHER;
+		goto l_end;
+	}
 
-		switch (proto_hdr & RTE_PTYPE_TUNNEL_MASK) {
-		case RTE_PTYPE_TUNNEL_GRENAT:
-			ctxt->split_type_mask = SXE2_PTYPE_TUNNEL_GRENAT;
-			ctxt->hdr_len = SXE2_RX_HDR_SIZE;
-			goto l_end;
-		}
-		PMD_LOG_ERR(RX, "Buffer split protocol is not supported");
-		ret = -1;
-	} else {
-		ctxt->hdr_len = 0;
-		ctxt->split_type_mask = 0;
+	switch (proto_hdr & RTE_PTYPE_TUNNEL_MASK) {
+	case RTE_PTYPE_TUNNEL_GRENAT:
+		ctxt->split_type_mask = SXE2_PTYPE_TUNNEL_GRENAT;
+		goto l_end;
 	}
+
+	PMD_LOG_ERR(RX, "Buffer split protocol is not supported");
+	return -ENOTSUP;
 l_end:
-	return ret;
+	ctxt->hdr_len = SXE2_RX_HDR_SIZE;
+	return 0;
 }
 
 static int32_t sxe2_rxq_ctxt_cfg_fill(struct sxe2_rx_queue *rxq,
-- 
2.52.0



More information about the dev mailing list