Update DPDK version from 19.11 to 20.11 and also support hns3 PMD for Kunpeng 920 and Kunpeng 930. Signed-off-by: speech_white <humin29@huawei.com>
77 lines
2.7 KiB
Diff
77 lines
2.7 KiB
Diff
From 50cb4151490c7814418be61cc54d45ad335c11aa Mon Sep 17 00:00:00 2001
|
|
From: Chengchang Tang <tangchengchang@huawei.com>
|
|
Date: Wed, 3 Feb 2021 20:23:55 +0800
|
|
Subject: [PATCH 041/189] net/hns3: fix firmware exceptions by concurrent
|
|
commands
|
|
|
|
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")
|
|
Cc: stable@dpdk.org
|
|
|
|
Signed-off-by: Chengchang Tang <tangchengchang@huawei.com>
|
|
Signed-off-by: Lijun Ou <oulijun@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 9393978..0590898 100644
|
|
--- a/drivers/net/hns3/hns3_cmd.c
|
|
+++ b/drivers/net/hns3/hns3_cmd.c
|
|
@@ -582,9 +582,21 @@ hns3_cmd_destroy_queue(struct hns3_hw *hw)
|
|
void
|
|
hns3_cmd_uninit(struct hns3_hw *hw)
|
|
{
|
|
+ __atomic_store_n(&hw->reset.disable_cmd, 1, __ATOMIC_RELAXED);
|
|
+
|
|
+ /*
|
|
+ * 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);
|
|
- __atomic_store_n(&hw->reset.disable_cmd, 1, __ATOMIC_RELAXED);
|
|
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 5640fe4..5010278 100644
|
|
--- a/drivers/net/hns3/hns3_cmd.h
|
|
+++ b/drivers/net/hns3/hns3_cmd.h
|
|
@@ -8,6 +8,7 @@
|
|
#include <stdint.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.7.4
|
|
|