From: Guangbin Huang <huangguangb...@huawei.com>

To prevent from initializing VF NIC client in reset handling state,
this patch adds resetting check in hclgevf_init_nic_client_instance().

Signed-off-by: Guangbin Huang <huangguangb...@huawei.com>
Signed-off-by: Huazhong Tan <tanhuazh...@huawei.com>
---
 drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c 
b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c
index 32341dc..59fcb80 100644
--- a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c
@@ -2713,6 +2713,7 @@ static int hclgevf_init_nic_client_instance(struct 
hnae3_ae_dev *ae_dev,
                                            struct hnae3_client *client)
 {
        struct hclgevf_dev *hdev = ae_dev->priv;
+       int rst_cnt = hdev->rst_stats.rst_cnt;
        int ret;
 
        ret = client->ops->init_instance(&hdev->nic);
@@ -2720,6 +2721,14 @@ static int hclgevf_init_nic_client_instance(struct 
hnae3_ae_dev *ae_dev,
                return ret;
 
        set_bit(HCLGEVF_STATE_NIC_REGISTERED, &hdev->state);
+       if (test_bit(HCLGEVF_STATE_RST_HANDLING, &hdev->state) ||
+           rst_cnt != hdev->rst_stats.rst_cnt) {
+               clear_bit(HCLGEVF_STATE_NIC_REGISTERED, &hdev->state);
+
+               client->ops->uninit_instance(&hdev->nic, 0);
+               return -EBUSY;
+       }
+
        hnae3_set_client_init_flag(client, ae_dev, 1);
 
        if (netif_msg_drv(&hdev->nic))
-- 
2.7.4

Reply via email to