patch 'net/txgbe: fix packet type to parse from offload flags' has been queued to stable release 20.11.8

luca.boccassi at gmail.com luca.boccassi at gmail.com
Thu Feb 23 10:36:41 CET 2023


Hi,

FYI, your patch has been queued to stable release 20.11.8

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 02/25/23. 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/1c060c633e390268f4508ea6962c65e294325dfe

Thanks.

Luca Boccassi

---
>From 1c060c633e390268f4508ea6962c65e294325dfe Mon Sep 17 00:00:00 2001
From: Jiawen Wu <jiawenwu at trustnetic.com>
Date: Thu, 2 Feb 2023 17:21:26 +0800
Subject: [PATCH] net/txgbe: fix packet type to parse from offload flags

[ upstream commit 0e32d6edd47914d38857c34d97416b9c91929020 ]

Context descriptors which contains the length of each packet layer and
the packet type are needed when Tx checksum offload or TSO is on. If the
packet type and length do not strictly match, it will cause Tx ring hang.

In some external applications, developers may fill in wrong packet_type
in rte_mbuf for Tx path. For example, they encap/decap the packets but
did not refill the packet_type. To prevent this, change it to parse from
ol_flags.

Fixes: ca46fcd753b1 ("net/txgbe: support Tx with hardware offload")

Signed-off-by: Jiawen Wu <jiawenwu at trustnetic.com>
---
 drivers/net/txgbe/txgbe_rxtx.c | 24 +++++++++++++++++-------
 1 file changed, 17 insertions(+), 7 deletions(-)

diff --git a/drivers/net/txgbe/txgbe_rxtx.c b/drivers/net/txgbe/txgbe_rxtx.c
index 82dde509a0..1196b95367 100644
--- a/drivers/net/txgbe/txgbe_rxtx.c
+++ b/drivers/net/txgbe/txgbe_rxtx.c
@@ -495,20 +495,21 @@ tx_desc_ol_flags_to_cmdtype(uint64_t ol_flags)
 	return cmdtype;
 }
 
-static inline uint8_t
-tx_desc_ol_flags_to_ptid(uint64_t oflags, uint32_t ptype)
+static inline uint32_t
+tx_desc_ol_flags_to_ptype(uint64_t oflags)
 {
+	uint32_t ptype;
 	bool tun;
 
-	if (ptype)
-		return txgbe_encode_ptype(ptype);
-
 	/* Only support flags in TXGBE_TX_OFFLOAD_MASK */
 	tun = !!(oflags & PKT_TX_TUNNEL_MASK);
 
 	/* L2 level */
 	ptype = RTE_PTYPE_L2_ETHER;
 	if (oflags & PKT_TX_VLAN)
+		ptype |= (tun ? RTE_PTYPE_INNER_L2_ETHER_VLAN : RTE_PTYPE_L2_ETHER_VLAN);
+
+	if (oflags & PKT_TX_QINQ) /* tunnel + QINQ is not supported */
 		ptype |= RTE_PTYPE_L2_ETHER_VLAN;
 
 	/* L3 level */
@@ -572,6 +573,16 @@ tx_desc_ol_flags_to_ptid(uint64_t oflags, uint32_t ptype)
 		break;
 	}
 
+	return ptype;
+}
+
+static inline uint8_t
+tx_desc_ol_flags_to_ptid(uint64_t oflags)
+{
+	uint32_t ptype;
+
+	ptype = tx_desc_ol_flags_to_ptype(oflags);
+
 	return txgbe_encode_ptype(ptype);
 }
 
@@ -731,8 +742,7 @@ txgbe_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts,
 		/* If hardware offload required */
 		tx_ol_req = ol_flags & TXGBE_TX_OFFLOAD_MASK;
 		if (tx_ol_req) {
-			tx_offload.ptid = tx_desc_ol_flags_to_ptid(tx_ol_req,
-					tx_pkt->packet_type);
+			tx_offload.ptid = tx_desc_ol_flags_to_ptid(tx_ol_req);
 			tx_offload.l2_len = tx_pkt->l2_len;
 			tx_offload.l3_len = tx_pkt->l3_len;
 			tx_offload.l4_len = tx_pkt->l4_len;
-- 
2.39.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2023-02-23 09:36:29.720632695 +0000
+++ 0037-net-txgbe-fix-packet-type-to-parse-from-offload-flag.patch	2023-02-23 09:36:28.246170308 +0000
@@ -1 +1 @@
-From 0e32d6edd47914d38857c34d97416b9c91929020 Mon Sep 17 00:00:00 2001
+From 1c060c633e390268f4508ea6962c65e294325dfe Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 0e32d6edd47914d38857c34d97416b9c91929020 ]
+
@@ -16 +17,0 @@
-Cc: stable at dpdk.org
@@ -24 +25 @@
-index ac1bba08a3..021f281fbb 100644
+index 82dde509a0..1196b95367 100644
@@ -27 +28 @@
-@@ -516,20 +516,21 @@ tx_desc_ol_flags_to_cmdtype(uint64_t ol_flags)
+@@ -495,20 +495,21 @@ tx_desc_ol_flags_to_cmdtype(uint64_t ol_flags)
@@ -43 +44 @@
- 	tun = !!(oflags & RTE_MBUF_F_TX_TUNNEL_MASK);
+ 	tun = !!(oflags & PKT_TX_TUNNEL_MASK);
@@ -47 +48 @@
- 	if (oflags & RTE_MBUF_F_TX_VLAN)
+ 	if (oflags & PKT_TX_VLAN)
@@ -50 +51 @@
-+	if (oflags & RTE_MBUF_F_TX_QINQ) /* tunnel + QINQ is not supported */
++	if (oflags & PKT_TX_QINQ) /* tunnel + QINQ is not supported */
@@ -54 +55 @@
-@@ -587,6 +588,16 @@ tx_desc_ol_flags_to_ptid(uint64_t oflags, uint32_t ptype)
+@@ -572,6 +573,16 @@ tx_desc_ol_flags_to_ptid(uint64_t oflags, uint32_t ptype)
@@ -71 +72 @@
-@@ -776,8 +787,7 @@ txgbe_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts,
+@@ -731,8 +742,7 @@ txgbe_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts,
@@ -78,2 +78,0 @@
- 			if (tx_offload.ptid & TXGBE_PTID_PKT_TUN)
- 				tx_offload.ptid |= txgbe_parse_tun_ptid(tx_pkt);
@@ -80,0 +80,2 @@
+ 			tx_offload.l3_len = tx_pkt->l3_len;
+ 			tx_offload.l4_len = tx_pkt->l4_len;


More information about the stable mailing list