From: Guojia Liao <liaoguo...@huawei.com>

When device is resetting or reset failed, firmware is unable to
handle mailbox. VLAN should not be configured in this case.

Fixes: fe4144d47eef ("net: hns3: sync VLAN filter entries when kill VLAN ID 
failed")
Signed-off-by: Guojia Liao <liaoguo...@huawei.com>
Signed-off-by: Huazhong Tan <tanhuazh...@huawei.com>
---
 drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c   |  7 ++++---
 drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c | 10 ++++++----
 2 files changed, 10 insertions(+), 7 deletions(-)

diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c 
b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
index cee84e7..36575e7 100644
--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
@@ -9042,11 +9042,12 @@ int hclge_set_vlan_filter(struct hnae3_handle *handle, 
__be16 proto,
        bool writen_to_tbl = false;
        int ret = 0;
 
-       /* When device is resetting, firmware is unable to handle
-        * mailbox. Just record the vlan id, and remove it after
+       /* When device is resetting or reset failed, firmware is unable to
+        * handle mailbox. Just record the vlan id, and remove it after
         * reset finished.
         */
-       if (test_bit(HCLGE_STATE_RST_HANDLING, &hdev->state) && is_kill) {
+       if ((test_bit(HCLGE_STATE_RST_HANDLING, &hdev->state) ||
+            test_bit(HCLGE_STATE_RST_FAIL, &hdev->state)) && is_kill) {
                set_bit(vlan_id, vport->vlan_del_fail_bmap);
                return -EBUSY;
        }
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c 
b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c
index b8b72ac..9162856d 100644
--- a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c
@@ -1592,11 +1592,12 @@ static int hclgevf_set_vlan_filter(struct hnae3_handle 
*handle,
        if (proto != htons(ETH_P_8021Q))
                return -EPROTONOSUPPORT;
 
-       /* When device is resetting, firmware is unable to handle
-        * mailbox. Just record the vlan id, and remove it after
+       /* When device is resetting or reset failed, firmware is unable to
+        * handle mailbox. Just record the vlan id, and remove it after
         * reset finished.
         */
-       if (test_bit(HCLGEVF_STATE_RST_HANDLING, &hdev->state) && is_kill) {
+       if ((test_bit(HCLGEVF_STATE_RST_HANDLING, &hdev->state) ||
+            test_bit(HCLGEVF_STATE_RST_FAIL, &hdev->state)) && is_kill) {
                set_bit(vlan_id, hdev->vlan_del_fail_bmap);
                return -EBUSY;
        }
@@ -3443,7 +3444,8 @@ void hclgevf_update_port_base_vlan_info(struct 
hclgevf_dev *hdev, u16 state,
 
        rtnl_lock();
 
-       if (test_bit(HCLGEVF_STATE_RST_HANDLING, &hdev->state)) {
+       if (test_bit(HCLGEVF_STATE_RST_HANDLING, &hdev->state) ||
+           test_bit(HCLGEVF_STATE_RST_FAIL, &hdev->state)) {
                dev_warn(&hdev->pdev->dev,
                         "is resetting when updating port based vlan info\n");
                rtnl_unlock();
-- 
2.7.4

Reply via email to