|
@@ -2470,14 +2470,17 @@ static void hclge_reset(struct hclge_dev *hdev)
|
|
handle = &hdev->vport[0].nic;
|
|
handle = &hdev->vport[0].nic;
|
|
rtnl_lock();
|
|
rtnl_lock();
|
|
hclge_notify_client(hdev, HNAE3_DOWN_CLIENT);
|
|
hclge_notify_client(hdev, HNAE3_DOWN_CLIENT);
|
|
|
|
+ rtnl_unlock();
|
|
|
|
|
|
if (!hclge_reset_wait(hdev)) {
|
|
if (!hclge_reset_wait(hdev)) {
|
|
|
|
+ rtnl_lock();
|
|
hclge_notify_client(hdev, HNAE3_UNINIT_CLIENT);
|
|
hclge_notify_client(hdev, HNAE3_UNINIT_CLIENT);
|
|
hclge_reset_ae_dev(hdev->ae_dev);
|
|
hclge_reset_ae_dev(hdev->ae_dev);
|
|
hclge_notify_client(hdev, HNAE3_INIT_CLIENT);
|
|
hclge_notify_client(hdev, HNAE3_INIT_CLIENT);
|
|
|
|
|
|
hclge_clear_reset_cause(hdev);
|
|
hclge_clear_reset_cause(hdev);
|
|
} else {
|
|
} else {
|
|
|
|
+ rtnl_lock();
|
|
/* schedule again to check pending resets later */
|
|
/* schedule again to check pending resets later */
|
|
set_bit(hdev->reset_type, &hdev->reset_pending);
|
|
set_bit(hdev->reset_type, &hdev->reset_pending);
|
|
hclge_reset_task_schedule(hdev);
|
|
hclge_reset_task_schedule(hdev);
|