]> git.baikalelectronics.ru Git - kernel.git/commitdiff
net: hns3: add a resetting check in hclgevf_init_nic_client_instance()
authorGuangbin Huang <huangguangbin2@huawei.com>
Wed, 27 May 2020 00:59:14 +0000 (08:59 +0800)
committerDavid S. Miller <davem@davemloft.net>
Wed, 27 May 2020 21:56:08 +0000 (14:56 -0700)
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 <huangguangbin2@huawei.com>
Signed-off-by: Huazhong Tan <tanhuazhong@huawei.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c

index 32341dcaa6c1aec77b7ab40c886b70083a619ad7..59fcb80671c88f95df982d52041176e07614015a 100644 (file)
@@ -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))