diff --git a/0112-net-hns3-fix-VLAN-tag-loss-for-short-tunnel-frame.patch b/0112-net-hns3-fix-VLAN-tag-loss-for-short-tunnel-frame.patch new file mode 100644 index 0000000000000000000000000000000000000000..d6ecfce3a7f0df562123f45c712c864bc898d11b --- /dev/null +++ b/0112-net-hns3-fix-VLAN-tag-loss-for-short-tunnel-frame.patch @@ -0,0 +1,102 @@ +From 2262fc29485bd863db55e820a194bf1e4be8a87c Mon Sep 17 00:00:00 2001 +From: Xingui Yang +Date: Mon, 29 Sep 2025 19:35:53 +0800 +Subject: [PATCH] net/hns3: fix VLAN tag loss for short tunnel frame + +[ upstream commit 2262fc29485bd863db55e820a194bf1e4be8a87c ] + +When the hardware handles short tunnel frames below 65 bytes, the VLAN tag +will be lost if VLAN insert or QinQ insert is enabled. Therefore, the +packet size of the tunnel frame is padded to 65 bytes to fix this issue. + +Fixes: de620754a109 ("net/hns3: fix sending packets less than 60 bytes") +Cc: stable@dpdk.org + +Signed-off-by: Xingui Yang +Signed-off-by: Donghua Huang +--- + drivers/net/hns3/hns3_ethdev.h | 1 + + drivers/net/hns3/hns3_rxtx.c | 48 +++++++++++++++++++++++----------- + 2 files changed, 34 insertions(+), 15 deletions(-) + +diff --git a/drivers/net/hns3/hns3_ethdev.h b/drivers/net/hns3/hns3_ethdev.h +index f6bb1b5d43..209b042816 100644 +--- a/drivers/net/hns3/hns3_ethdev.h ++++ b/drivers/net/hns3/hns3_ethdev.h +@@ -75,6 +75,7 @@ + #define HNS3_DEFAULT_MTU 1500UL + #define HNS3_DEFAULT_FRAME_LEN (HNS3_DEFAULT_MTU + HNS3_ETH_OVERHEAD) + #define HNS3_HIP08_MIN_TX_PKT_LEN 33 ++#define HNS3_MIN_TUN_PKT_LEN 65 + + #define HNS3_BITS_PER_BYTE 8 + +diff --git a/drivers/net/hns3/hns3_rxtx.c b/drivers/net/hns3/hns3_rxtx.c +index aa7ee6f3e8..df703134be 100644 +--- a/drivers/net/hns3/hns3_rxtx.c ++++ b/drivers/net/hns3/hns3_rxtx.c +@@ -4219,6 +4219,37 @@ hns3_tx_fill_hw_ring(struct hns3_tx_queue *txq, + } + } + ++static bool ++hns3_tx_pktmbuf_append(struct hns3_tx_queue *txq, ++ struct rte_mbuf *tx_pkt) ++{ ++ uint16_t add_len = 0; ++ uint32_t ptype; ++ char *appended; ++ ++ if (unlikely(tx_pkt->ol_flags & (RTE_MBUF_F_TX_VLAN | RTE_MBUF_F_TX_QINQ) && ++ rte_pktmbuf_pkt_len(tx_pkt) < HNS3_MIN_TUN_PKT_LEN)) { ++ ptype = rte_net_get_ptype(tx_pkt, NULL, RTE_PTYPE_L2_MASK | ++ RTE_PTYPE_L3_MASK | RTE_PTYPE_L4_MASK | ++ RTE_PTYPE_TUNNEL_MASK); ++ if (ptype & RTE_PTYPE_TUNNEL_MASK) ++ add_len = HNS3_MIN_TUN_PKT_LEN - rte_pktmbuf_pkt_len(tx_pkt); ++ } else if (unlikely(rte_pktmbuf_pkt_len(tx_pkt) < txq->min_tx_pkt_len)) { ++ add_len = txq->min_tx_pkt_len - rte_pktmbuf_pkt_len(tx_pkt); ++ } ++ ++ if (unlikely(add_len > 0)) { ++ appended = rte_pktmbuf_append(tx_pkt, add_len); ++ if (appended == NULL) { ++ txq->dfx_stats.pkt_padding_fail_cnt++; ++ return false; ++ } ++ memset(appended, 0, add_len); ++ } ++ ++ return true; ++} ++ + uint16_t + hns3_xmit_pkts_simple(void *tx_queue, + struct rte_mbuf **tx_pkts, +@@ -4296,21 +4327,8 @@ hns3_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts) + * by hardware in Tx direction, driver need to pad it to avoid + * error. + */ +- if (unlikely(rte_pktmbuf_pkt_len(tx_pkt) < +- txq->min_tx_pkt_len)) { +- uint16_t add_len; +- char *appended; +- +- add_len = txq->min_tx_pkt_len - +- rte_pktmbuf_pkt_len(tx_pkt); +- appended = rte_pktmbuf_append(tx_pkt, add_len); +- if (appended == NULL) { +- txq->dfx_stats.pkt_padding_fail_cnt++; +- break; +- } +- +- memset(appended, 0, add_len); +- } ++ if (!hns3_tx_pktmbuf_append(txq, tx_pkt)) ++ break; + + m_seg = tx_pkt; + +-- +2.33.0 + diff --git a/dpdk.spec b/dpdk.spec index a70990791d12af45569c4cf2591f27c2bfad9de1..78cde81daa506ccb7a685e72a927cbab8a672225 100644 --- a/dpdk.spec +++ b/dpdk.spec @@ -11,7 +11,7 @@ Name: dpdk Version: 23.11 -Release: 36 +Release: 37 URL: http://dpdk.org Source: https://fast.dpdk.org/rel/dpdk-%{version}.tar.xz @@ -144,6 +144,7 @@ Patch6108: 0108-config-arm-adapt-RTE_MAX_NUMA_NODES-to-16.patch Patch6109: 0109-net-hns3-fix-inconsistent-lock.patch Patch6110: 0110-net-hns3-fix-overwrite-mbuf-in-vector-path.patch Patch6111: 0111-net-hns3-fix-unrelease-VLAN-resource-when-init-fail.patch +Patch6112: 0112-net-hns3-fix-VLAN-tag-loss-for-short-tunnel-frame.patch BuildRequires: meson BuildRequires: python3-pyelftools @@ -348,6 +349,10 @@ fi /usr/sbin/depmod %changelog +* Mon Nov 03 2025 huangdonghua - 23.11-37 + Fix unrelease VLAN resource when init fail: + - net/hns3: fix unrelease VLAN resource when init fail + * Fri Sep 19 2025 huangdonghua - 23.11-36 Unify locks, fix Rx path and resource release: - net/hns3: fix inconsistent lock