[dpdk-stable] patch 'net/hns3: skip VF register access when PF in FLR' has been queued to stable release 19.11.6

luca.boccassi at gmail.com luca.boccassi at gmail.com
Wed Oct 28 11:43:55 CET 2020


Hi,

FYI, your patch has been queued to stable release 19.11.6

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

Thanks.

Luca Boccassi

---
>From 393a0611c7e389abb87c5deeb6790fb388decc22 Mon Sep 17 00:00:00 2001
From: Hongbo Zheng <zhenghongbo3 at huawei.com>
Date: Tue, 22 Sep 2020 20:03:18 +0800
Subject: [PATCH] net/hns3: skip VF register access when PF in FLR

[ upstream commit 0eb7334f4034c08cbf2f23352bec0d35356872f1 ]

According to the protocol of PCIe, FLR to a PF device resets the PF state
as well as the SR-IOV extended capability including VF Enable which means
that VFs no longer exist.

When PF device is in FLR reset stage, at this time, the register state
of VF device is not reliable, so VF device's register state detection
is not carried out in PF FLR.

In this case, we just ignore the register states to avoid accessing
nonexistent register and return false in the internal function named
hns3vf_is_reset_pending to indicate that there are no other reset states
that need to be processed by PMD driver.

Fixes: 2790c6464725 ("net/hns3: support device reset")

Signed-off-by: Hongbo Zheng <zhenghongbo3 at huawei.com>
Signed-off-by: Wei Hu (Xavier) <xavier.huwei at huawei.com>
---
 drivers/net/hns3/hns3_ethdev.h    |  7 +++++++
 drivers/net/hns3/hns3_ethdev_vf.c | 15 +++++++++++++++
 2 files changed, 22 insertions(+)

diff --git a/drivers/net/hns3/hns3_ethdev.h b/drivers/net/hns3/hns3_ethdev.h
index 35e64aa5ae..6e9173abd4 100644
--- a/drivers/net/hns3/hns3_ethdev.h
+++ b/drivers/net/hns3/hns3_ethdev.h
@@ -256,6 +256,13 @@ enum hns3_reset_level {
 	 * Kernel PF driver use mailbox to inform DPDK VF to do reset, the value
 	 * of the reset level and the one defined in kernel driver should be
 	 * same.
+	 *
+	 * According to the protocol of PCIe, FLR to a PF resets the PF state as
+	 * well as the SR-IOV extended capability including VF Enable which
+	 * means that VFs no longer exist.
+	 *
+	 * In PF FLR, the register state of VF is not reliable, VF's driver
+	 * should not access the registers of the VF device.
 	 */
 	HNS3_VF_FULL_RESET = 3,
 	HNS3_FLR_RESET,     /* A VF perform FLR reset */
diff --git a/drivers/net/hns3/hns3_ethdev_vf.c b/drivers/net/hns3/hns3_ethdev_vf.c
index e30e9f65c4..37c7d33f59 100644
--- a/drivers/net/hns3/hns3_ethdev_vf.c
+++ b/drivers/net/hns3/hns3_ethdev_vf.c
@@ -1840,6 +1840,21 @@ hns3vf_is_reset_pending(struct hns3_adapter *hns)
 	struct hns3_hw *hw = &hns->hw;
 	enum hns3_reset_level reset;
 
+	/*
+	 * According to the protocol of PCIe, FLR to a PF device resets the PF
+	 * state as well as the SR-IOV extended capability including VF Enable
+	 * which means that VFs no longer exist.
+	 *
+	 * HNS3_VF_FULL_RESET means PF device is in FLR reset. when PF device
+	 * is in FLR stage, the register state of VF device is not reliable,
+	 * so register states detection can not be carried out. In this case,
+	 * we just ignore the register states and return false to indicate that
+	 * there are no other reset states that need to be processed by driver.
+	 */
+	if (hw->reset.level == HNS3_VF_FULL_RESET)
+		return false;
+
+	/* Check the registers to confirm whether there is reset pending */
 	hns3vf_check_event_cause(hns, NULL);
 	reset = hns3vf_get_reset_level(hw, &hw->reset.pending);
 	if (hw->reset.level != HNS3_NONE_RESET && hw->reset.level < reset) {
-- 
2.20.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2020-10-28 10:35:14.136886055 +0000
+++ 0076-net-hns3-skip-VF-register-access-when-PF-in-FLR.patch	2020-10-28 10:35:11.584831201 +0000
@@ -1,8 +1,10 @@
-From 0eb7334f4034c08cbf2f23352bec0d35356872f1 Mon Sep 17 00:00:00 2001
+From 393a0611c7e389abb87c5deeb6790fb388decc22 Mon Sep 17 00:00:00 2001
 From: Hongbo Zheng <zhenghongbo3 at huawei.com>
 Date: Tue, 22 Sep 2020 20:03:18 +0800
 Subject: [PATCH] net/hns3: skip VF register access when PF in FLR
 
+[ upstream commit 0eb7334f4034c08cbf2f23352bec0d35356872f1 ]
+
 According to the protocol of PCIe, FLR to a PF device resets the PF state
 as well as the SR-IOV extended capability including VF Enable which means
 that VFs no longer exist.
@@ -17,7 +19,6 @@
 that need to be processed by PMD driver.
 
 Fixes: 2790c6464725 ("net/hns3: support device reset")
-Cc: stable at dpdk.org
 
 Signed-off-by: Hongbo Zheng <zhenghongbo3 at huawei.com>
 Signed-off-by: Wei Hu (Xavier) <xavier.huwei at huawei.com>
@@ -27,10 +28,10 @@
  2 files changed, 22 insertions(+)
 
 diff --git a/drivers/net/hns3/hns3_ethdev.h b/drivers/net/hns3/hns3_ethdev.h
-index f170df9176..3f3f973c72 100644
+index 35e64aa5ae..6e9173abd4 100644
 --- a/drivers/net/hns3/hns3_ethdev.h
 +++ b/drivers/net/hns3/hns3_ethdev.h
-@@ -275,6 +275,13 @@ enum hns3_reset_level {
+@@ -256,6 +256,13 @@ enum hns3_reset_level {
  	 * Kernel PF driver use mailbox to inform DPDK VF to do reset, the value
  	 * of the reset level and the one defined in kernel driver should be
  	 * same.
@@ -45,10 +46,10 @@
  	HNS3_VF_FULL_RESET = 3,
  	HNS3_FLR_RESET,     /* A VF perform FLR reset */
 diff --git a/drivers/net/hns3/hns3_ethdev_vf.c b/drivers/net/hns3/hns3_ethdev_vf.c
-index 565cf60e76..cb2747b132 100644
+index e30e9f65c4..37c7d33f59 100644
 --- a/drivers/net/hns3/hns3_ethdev_vf.c
 +++ b/drivers/net/hns3/hns3_ethdev_vf.c
-@@ -2191,6 +2191,21 @@ hns3vf_is_reset_pending(struct hns3_adapter *hns)
+@@ -1840,6 +1840,21 @@ hns3vf_is_reset_pending(struct hns3_adapter *hns)
  	struct hns3_hw *hw = &hns->hw;
  	enum hns3_reset_level reset;
  


More information about the stable mailing list