patch 'net/hns3: fix queue TC configuration on VF' has been queued to stable release 22.11.9

luca.boccassi at gmail.com luca.boccassi at gmail.com
Mon Jul 14 17:11:08 CEST 2025


Hi,

FYI, your patch has been queued to stable release 22.11.9

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

Thanks.

Luca Boccassi

---
>From 3a3e27e23f1b0ba93b6653e1fa90a78ee37fac3c Mon Sep 17 00:00:00 2001
From: Chengwen Feng <fengchengwen at huawei.com>
Date: Tue, 1 Jul 2025 17:09:59 +0800
Subject: [PATCH] net/hns3: fix queue TC configuration on VF

[ upstream commit a542f48bc0ec83c296ae01ad691479c17caf99b5 ]

The VF cannot configure the mapping of queue to TC by directly writing
the register. Instead, the mapping must be modified by using firmware
command.

Fixes: bba636698316 ("net/hns3: support Rx/Tx and related operations")

Signed-off-by: Chengwen Feng <fengchengwen at huawei.com>
Signed-off-by: Dengdui Huang <huangdengdui at huawei.com>
---
 drivers/net/hns3/hns3_cmd.h  |  8 ++++++++
 drivers/net/hns3/hns3_rxtx.c | 26 +++++++++++++++++++++-----
 2 files changed, 29 insertions(+), 5 deletions(-)

diff --git a/drivers/net/hns3/hns3_cmd.h b/drivers/net/hns3/hns3_cmd.h
index ae797a7692..936e6455f0 100644
--- a/drivers/net/hns3/hns3_cmd.h
+++ b/drivers/net/hns3/hns3_cmd.h
@@ -178,6 +178,7 @@ enum hns3_opcode_type {
 
 	/* TQP commands */
 	HNS3_OPC_QUERY_TX_STATUS        = 0x0B03,
+	HNS3_OPC_TQP_TX_QUEUE_TC        = 0x0B04,
 	HNS3_OPC_QUERY_RX_STATUS        = 0x0B13,
 	HNS3_OPC_CFG_COM_TQP_QUEUE      = 0x0B20,
 	HNS3_OPC_RESET_TQP_QUEUE        = 0x0B22,
@@ -942,6 +943,13 @@ struct hns3_reset_tqp_queue_cmd {
 	uint8_t rsv[19];
 };
 
+struct hns3vf_tx_ring_tc_cmd {
+	uint16_t tqp_id;
+	uint16_t rsv1;
+	uint8_t  tc_id;
+	uint8_t  rsv2[19];
+};
+
 #define HNS3_CFG_RESET_MAC_B		3
 #define HNS3_CFG_RESET_FUNC_B		7
 #define HNS3_CFG_RESET_RCB_B		1
diff --git a/drivers/net/hns3/hns3_rxtx.c b/drivers/net/hns3/hns3_rxtx.c
index 83837e5c9a..56060730b0 100644
--- a/drivers/net/hns3/hns3_rxtx.c
+++ b/drivers/net/hns3/hns3_rxtx.c
@@ -1179,12 +1179,14 @@ hns3_init_txq(struct hns3_tx_queue *txq)
 	hns3_init_tx_queue_hw(txq);
 }
 
-static void
+static int
 hns3_init_tx_ring_tc(struct hns3_adapter *hns)
 {
+	struct hns3_cmd_desc desc;
+	struct hns3vf_tx_ring_tc_cmd *req = (struct hns3vf_tx_ring_tc_cmd *)desc.data;
 	struct hns3_hw *hw = &hns->hw;
 	struct hns3_tx_queue *txq;
-	int i, num;
+	int i, num, ret;
 
 	for (i = 0; i < HNS3_MAX_TC_NUM; i++) {
 		struct hns3_tc_queue_info *tc_queue = &hw->tc_queue[i];
@@ -1199,9 +1201,24 @@ hns3_init_tx_ring_tc(struct hns3_adapter *hns)
 			if (txq == NULL)
 				continue;
 
-			hns3_write_dev(txq, HNS3_RING_TX_TC_REG, tc_queue->tc);
+			if (!hns->is_vf) {
+				hns3_write_dev(txq, HNS3_RING_TX_TC_REG, tc_queue->tc);
+				continue;
+			}
+
+			hns3_cmd_setup_basic_desc(&desc, HNS3_OPC_TQP_TX_QUEUE_TC, false);
+			req->tqp_id = rte_cpu_to_le_16(num);
+			req->tc_id  = tc_queue->tc;
+			ret = hns3_cmd_send(hw, &desc, 1);
+			if (ret != 0) {
+				hns3_err(hw, "config Tx queue (%u)'s TC failed! ret = %d.",
+					 num, ret);
+				return ret;
+			}
 		}
 	}
+
+	return 0;
 }
 
 static int
@@ -1277,9 +1294,8 @@ hns3_init_tx_queues(struct hns3_adapter *hns)
 		txq = (struct hns3_tx_queue *)hw->fkq_data.tx_queues[i];
 		hns3_init_txq(txq);
 	}
-	hns3_init_tx_ring_tc(hns);
 
-	return 0;
+	return hns3_init_tx_ring_tc(hns);
 }
 
 /*
-- 
2.47.2

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2025-07-14 16:09:41.195711707 +0100
+++ 0013-net-hns3-fix-queue-TC-configuration-on-VF.patch	2025-07-14 16:09:40.708448899 +0100
@@ -1 +1 @@
-From a542f48bc0ec83c296ae01ad691479c17caf99b5 Mon Sep 17 00:00:00 2001
+From 3a3e27e23f1b0ba93b6653e1fa90a78ee37fac3c Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit a542f48bc0ec83c296ae01ad691479c17caf99b5 ]
+
@@ -11 +12,0 @@
-Cc: stable at dpdk.org
@@ -21 +22 @@
-index 4d707c13b2..e21a2b652f 100644
+index ae797a7692..936e6455f0 100644
@@ -32 +33 @@
-@@ -970,6 +971,13 @@ struct hns3_reset_tqp_queue_cmd {
+@@ -942,6 +943,13 @@ struct hns3_reset_tqp_queue_cmd {
@@ -47 +48 @@
-index f9fde3948a..785e06db9c 100644
+index 83837e5c9a..56060730b0 100644
@@ -50 +51 @@
-@@ -1180,12 +1180,14 @@ hns3_init_txq(struct hns3_tx_queue *txq)
+@@ -1179,12 +1179,14 @@ hns3_init_txq(struct hns3_tx_queue *txq)
@@ -67 +68 @@
-@@ -1200,9 +1202,24 @@ hns3_init_tx_ring_tc(struct hns3_adapter *hns)
+@@ -1199,9 +1201,24 @@ hns3_init_tx_ring_tc(struct hns3_adapter *hns)
@@ -93 +94 @@
-@@ -1278,9 +1295,8 @@ hns3_init_tx_queues(struct hns3_adapter *hns)
+@@ -1277,9 +1294,8 @@ hns3_init_tx_queues(struct hns3_adapter *hns)


More information about the stable mailing list