DPDK patches and discussions
 help / color / mirror / Atom feed
* [PATCH 0/2] bugfix for hns3
@ 2025-09-29 11:35 Xingui Yang
  2025-09-29 11:35 ` [PATCH 1/2] net/hns3: fix VLAN tag loss for short tunnel frame Xingui Yang
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Xingui Yang @ 2025-09-29 11:35 UTC (permalink / raw)
  To: dev
  Cc: stephen, david.marchand, liuyonglong, kangfenglong, fengchengwen,
	lihuisong

This patchset fixes some bugs.

Xingui Yang (2):
  net/hns3: fix VLAN tag loss for short tunnel frame
  net/hns3: print invalid MAC address from firmware

 drivers/net/hns3/hns3_common.c |  6 ++---
 drivers/net/hns3/hns3_ethdev.h |  1 +
 drivers/net/hns3/hns3_rxtx.c   | 48 +++++++++++++++++++++++-----------
 3 files changed, 37 insertions(+), 18 deletions(-)

-- 
2.33.0


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH 1/2] net/hns3: fix VLAN tag loss for short tunnel frame
  2025-09-29 11:35 [PATCH 0/2] bugfix for hns3 Xingui Yang
@ 2025-09-29 11:35 ` Xingui Yang
  2025-09-29 11:35 ` [PATCH 2/2] net/hns3: print invalid MAC address from firmware Xingui Yang
  2025-09-29 23:57 ` [PATCH 0/2] bugfix for hns3 Stephen Hemminger
  2 siblings, 0 replies; 4+ messages in thread
From: Xingui Yang @ 2025-09-29 11:35 UTC (permalink / raw)
  To: dev
  Cc: stephen, david.marchand, liuyonglong, kangfenglong, fengchengwen,
	lihuisong

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 <yangxingui@huawei.com>
---
 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


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH 2/2] net/hns3: print invalid MAC address from firmware
  2025-09-29 11:35 [PATCH 0/2] bugfix for hns3 Xingui Yang
  2025-09-29 11:35 ` [PATCH 1/2] net/hns3: fix VLAN tag loss for short tunnel frame Xingui Yang
@ 2025-09-29 11:35 ` Xingui Yang
  2025-09-29 23:57 ` [PATCH 0/2] bugfix for hns3 Stephen Hemminger
  2 siblings, 0 replies; 4+ messages in thread
From: Xingui Yang @ 2025-09-29 11:35 UTC (permalink / raw)
  To: dev
  Cc: stephen, david.marchand, liuyonglong, kangfenglong, fengchengwen,
	lihuisong

The default MAC address from the firmware is usually valid. Print the
default MAC address when it's invalid to locate the problem.

Signed-off-by: Xingui Yang <yangxingui@huawei.com>
---
 drivers/net/hns3/hns3_common.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/net/hns3/hns3_common.c b/drivers/net/hns3/hns3_common.c
index 6709d7a70b..28d7e94ffb 100644
--- a/drivers/net/hns3/hns3_common.c
+++ b/drivers/net/hns3/hns3_common.c
@@ -723,12 +723,12 @@ hns3_init_mac_addrs(struct rte_eth_dev *dev)
 	eth_addr = (struct rte_ether_addr *)hw->mac.mac_addr;
 	if (!hns->is_vf) {
 		if (!rte_is_valid_assigned_ether_addr(eth_addr)) {
+			hns3_warn(hw, "MAC address " RTE_ETHER_ADDR_PRT_FMT " from firmware is invalid",
+				  RTE_ETHER_ADDR_BYTES(eth_addr));
 			rte_eth_random_addr(hw->mac.mac_addr);
 			hns3_ether_format_addr(mac_str, RTE_ETHER_ADDR_FMT_SIZE,
 				(struct rte_ether_addr *)hw->mac.mac_addr);
-			hns3_warn(hw, "default mac_addr from firmware is an invalid "
-				  "unicast address, using random MAC address %s",
-				  mac_str);
+			hns3_warn(hw, "using random MAC address %s", mac_str);
 		}
 	} else {
 		/*
-- 
2.33.0


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH 0/2] bugfix for hns3
  2025-09-29 11:35 [PATCH 0/2] bugfix for hns3 Xingui Yang
  2025-09-29 11:35 ` [PATCH 1/2] net/hns3: fix VLAN tag loss for short tunnel frame Xingui Yang
  2025-09-29 11:35 ` [PATCH 2/2] net/hns3: print invalid MAC address from firmware Xingui Yang
@ 2025-09-29 23:57 ` Stephen Hemminger
  2 siblings, 0 replies; 4+ messages in thread
From: Stephen Hemminger @ 2025-09-29 23:57 UTC (permalink / raw)
  To: Xingui Yang
  Cc: dev, david.marchand, liuyonglong, kangfenglong, fengchengwen, lihuisong

On Mon, 29 Sep 2025 19:35:52 +0800
Xingui Yang <yangxingui@huawei.com> wrote:

> This patchset fixes some bugs.
> 
> Xingui Yang (2):
>   net/hns3: fix VLAN tag loss for short tunnel frame
>   net/hns3: print invalid MAC address from firmware
> 
>  drivers/net/hns3/hns3_common.c |  6 ++---
>  drivers/net/hns3/hns3_ethdev.h |  1 +
>  drivers/net/hns3/hns3_rxtx.c   | 48 +++++++++++++++++++++++-----------
>  3 files changed, 37 insertions(+), 18 deletions(-)
> 

Queued to next-net

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2025-09-29 23:57 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-09-29 11:35 [PATCH 0/2] bugfix for hns3 Xingui Yang
2025-09-29 11:35 ` [PATCH 1/2] net/hns3: fix VLAN tag loss for short tunnel frame Xingui Yang
2025-09-29 11:35 ` [PATCH 2/2] net/hns3: print invalid MAC address from firmware Xingui Yang
2025-09-29 23:57 ` [PATCH 0/2] bugfix for hns3 Stephen Hemminger

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).