[dpdk-stable] patch 'net/hns3: fix firmware exceptions by concurrent commands' has been queued to stable release 19.11.7

Christian Ehrhardt christian.ehrhardt at canonical.com
Mon Feb 8 12:14:22 CET 2021


Hi,

FYI, your patch has been queued to stable release 19.11.7

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/10/21. 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/cpaelzer/dpdk-stable-queue

This queued commit can be viewed at:
https://github.com/cpaelzer/dpdk-stable-queue/commit/209e4839a3a8164c9f7b0ab346fdbdd1744920f2

Thanks.

Christian Ehrhardt <christian.ehrhardt at canonical.com>

---
>From 209e4839a3a8164c9f7b0ab346fdbdd1744920f2 Mon Sep 17 00:00:00 2001
From: Chengchang Tang <tangchengchang at huawei.com>
Date: Wed, 3 Feb 2021 20:23:55 +0800
Subject: [PATCH] net/hns3: fix firmware exceptions by concurrent commands

[ upstream commit 5ef63df1286861530d23da828415411a4c0a48a5 ]

There are two scenarios that command queue uninit performed
concurrently with the firmware command: asynchronous command
and timeout command.

For asynchronous command, if a large number of functions send
commands, these commands may need to be queued to wait for
firmware processing. If a function is uninited suddenly, CMDQ
clearing and firmware processing may be performed concurrently.

For timeout command, if the command failed due to busy scheduling
of firmware, this command will be processed in the next scheduling.
And this may lead to concurrency.

The preceding concurrency may lead to a firmware exceptions.

This patch add a waiting time to ensure the firmware complete the
processing of left over command when PMD uninit.

Fixes: 737f30e1c3ab ("net/hns3: support command interface with firmware")

Signed-off-by: Chengchang Tang <tangchengchang at huawei.com>
Signed-off-by: Lijun Ou <oulijun at huawei.com>
---
 drivers/net/hns3/hns3_cmd.c | 14 +++++++++++++-
 drivers/net/hns3/hns3_cmd.h |  1 +
 2 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/drivers/net/hns3/hns3_cmd.c b/drivers/net/hns3/hns3_cmd.c
index c7993634e3..dc2473a0f7 100644
--- a/drivers/net/hns3/hns3_cmd.c
+++ b/drivers/net/hns3/hns3_cmd.c
@@ -553,9 +553,21 @@ hns3_cmd_destroy_queue(struct hns3_hw *hw)
 void
 hns3_cmd_uninit(struct hns3_hw *hw)
 {
+	rte_atomic16_set(&hw->reset.disable_cmd, 1);
+
+	/*
+	 * A delay is added to ensure that the register cleanup operations
+	 * will not be performed concurrently with the firmware command and
+	 * ensure that all the reserved commands are executed.
+	 * Concurrency may occur in two scenarios: asynchronous command and
+	 * timeout command. If the command fails to be executed due to busy
+	 * scheduling, the command will be processed in the next scheduling
+	 * of the firmware.
+	 */
+	rte_delay_ms(HNS3_CMDQ_CLEAR_WAIT_TIME);
+
 	rte_spinlock_lock(&hw->cmq.csq.lock);
 	rte_spinlock_lock(&hw->cmq.crq.lock);
-	rte_atomic16_set(&hw->reset.disable_cmd, 1);
 	hns3_cmd_clear_regs(hw);
 	rte_spinlock_unlock(&hw->cmq.crq.lock);
 	rte_spinlock_unlock(&hw->cmq.csq.lock);
diff --git a/drivers/net/hns3/hns3_cmd.h b/drivers/net/hns3/hns3_cmd.h
index e7a220364d..5a7b7a44e0 100644
--- a/drivers/net/hns3/hns3_cmd.h
+++ b/drivers/net/hns3/hns3_cmd.h
@@ -6,6 +6,7 @@
 #define _HNS3_CMD_H_
 
 #define HNS3_CMDQ_TX_TIMEOUT		30000
+#define HNS3_CMDQ_CLEAR_WAIT_TIME	200
 #define HNS3_CMDQ_RX_INVLD_B		0
 #define HNS3_CMDQ_RX_OUTVLD_B		1
 #define HNS3_CMD_DESC_ALIGNMENT		4096
-- 
2.30.0

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2021-02-08 12:04:29.920749136 +0100
+++ 0010-net-hns3-fix-firmware-exceptions-by-concurrent-comma.patch	2021-02-08 12:04:29.539496793 +0100
@@ -1 +1 @@
-From 5ef63df1286861530d23da828415411a4c0a48a5 Mon Sep 17 00:00:00 2001
+From 209e4839a3a8164c9f7b0ab346fdbdd1744920f2 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 5ef63df1286861530d23da828415411a4c0a48a5 ]
+
@@ -25 +26,0 @@
-Cc: stable at dpdk.org
@@ -35 +36 @@
-index 3d6ffc090f..32cd56b478 100644
+index c7993634e3..dc2473a0f7 100644
@@ -38 +39 @@
-@@ -582,9 +582,21 @@ hns3_cmd_destroy_queue(struct hns3_hw *hw)
+@@ -553,9 +553,21 @@ hns3_cmd_destroy_queue(struct hns3_hw *hw)
@@ -42 +43 @@
-+	__atomic_store_n(&hw->reset.disable_cmd, 1, __ATOMIC_RELAXED);
++	rte_atomic16_set(&hw->reset.disable_cmd, 1);
@@ -57 +58 @@
--	__atomic_store_n(&hw->reset.disable_cmd, 1, __ATOMIC_RELAXED);
+-	rte_atomic16_set(&hw->reset.disable_cmd, 1);
@@ -62 +63 @@
-index 5640fe4ead..5010278e22 100644
+index e7a220364d..5a7b7a44e0 100644
@@ -65,2 +66,2 @@
-@@ -8,6 +8,7 @@
- #include <stdint.h>
+@@ -6,6 +6,7 @@
+ #define _HNS3_CMD_H_


More information about the stable mailing list