Skip to content

Commit d4fa065

Browse files
Huazhong Tandavem330
authored andcommitted
net: hns3: split hclge_reset() into preparing and rebuilding part
hclge_reset() is a little bloated, and the process of PF FLR will be separated from the reset task later. So this patch splits hclge_reset() into hclge_reset_prepare() and hclge_reset_rebuild(), then FLR can also reuse these two functions. BTW, since hclge_clear_reset_cause() and hclge_reset_prepare_up() will not affect the device, so in hclge_reset_rebuild(), these functions are called without rtnl_lock. Signed-off-by: Huazhong Tan <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 6821af8 commit d4fa065

File tree

1 file changed

+34
-25
lines changed

1 file changed

+34
-25
lines changed

drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c

Lines changed: 34 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -3782,10 +3782,9 @@ static int hclge_reset_stack(struct hclge_dev *hdev)
37823782
return hclge_notify_client(hdev, HNAE3_RESTORE_CLIENT);
37833783
}
37843784

3785-
static void hclge_reset(struct hclge_dev *hdev)
3785+
static int hclge_reset_prepare(struct hclge_dev *hdev)
37863786
{
37873787
struct hnae3_ae_dev *ae_dev = pci_get_drvdata(hdev->pdev);
3788-
enum hnae3_reset_type reset_level;
37893788
int ret;
37903789

37913790
/* Initialize ae_dev reset status as well, in case enet layer wants to
@@ -3796,65 +3795,63 @@ static void hclge_reset(struct hclge_dev *hdev)
37963795
/* perform reset of the stack & ae device for a client */
37973796
ret = hclge_notify_roce_client(hdev, HNAE3_DOWN_CLIENT);
37983797
if (ret)
3799-
goto err_reset;
3798+
return ret;
38003799

38013800
ret = hclge_reset_prepare_down(hdev);
38023801
if (ret)
3803-
goto err_reset;
3802+
return ret;
38043803

38053804
rtnl_lock();
38063805
ret = hclge_notify_client(hdev, HNAE3_DOWN_CLIENT);
3807-
if (ret)
3808-
goto err_reset_lock;
3809-
38103806
rtnl_unlock();
3811-
3812-
ret = hclge_reset_prepare_wait(hdev);
38133807
if (ret)
3814-
goto err_reset;
3808+
return ret;
38153809

3816-
if (hclge_reset_wait(hdev))
3817-
goto err_reset;
3810+
return hclge_reset_prepare_wait(hdev);
3811+
}
3812+
3813+
static int hclge_reset_rebuild(struct hclge_dev *hdev)
3814+
{
3815+
struct hnae3_ae_dev *ae_dev = pci_get_drvdata(hdev->pdev);
3816+
enum hnae3_reset_type reset_level;
3817+
int ret;
38183818

38193819
hdev->rst_stats.hw_reset_done_cnt++;
38203820

38213821
ret = hclge_notify_roce_client(hdev, HNAE3_UNINIT_CLIENT);
38223822
if (ret)
3823-
goto err_reset;
3823+
return ret;
38243824

38253825
rtnl_lock();
3826-
38273826
ret = hclge_reset_stack(hdev);
3827+
rtnl_unlock();
38283828
if (ret)
3829-
goto err_reset_lock;
3829+
return ret;
38303830

38313831
hclge_clear_reset_cause(hdev);
38323832

38333833
ret = hclge_reset_prepare_up(hdev);
38343834
if (ret)
3835-
goto err_reset_lock;
3835+
return ret;
38363836

3837-
rtnl_unlock();
38383837

38393838
ret = hclge_notify_roce_client(hdev, HNAE3_INIT_CLIENT);
38403839
/* ignore RoCE notify error if it fails HCLGE_RESET_MAX_FAIL_CNT - 1
38413840
* times
38423841
*/
38433842
if (ret &&
38443843
hdev->rst_stats.reset_fail_cnt < HCLGE_RESET_MAX_FAIL_CNT - 1)
3845-
goto err_reset;
3844+
return ret;
38463845

38473846
rtnl_lock();
3848-
38493847
ret = hclge_notify_client(hdev, HNAE3_UP_CLIENT);
3850-
if (ret)
3851-
goto err_reset_lock;
3852-
38533848
rtnl_unlock();
3849+
if (ret)
3850+
return ret;
38543851

38553852
ret = hclge_notify_roce_client(hdev, HNAE3_UP_CLIENT);
38563853
if (ret)
3857-
goto err_reset;
3854+
return ret;
38583855

38593856
hdev->last_reset_time = jiffies;
38603857
hdev->rst_stats.reset_fail_cnt = 0;
@@ -3871,10 +3868,22 @@ static void hclge_reset(struct hclge_dev *hdev)
38713868
if (reset_level != HNAE3_NONE_RESET)
38723869
set_bit(reset_level, &hdev->reset_request);
38733870

3871+
return 0;
3872+
}
3873+
3874+
static void hclge_reset(struct hclge_dev *hdev)
3875+
{
3876+
if (hclge_reset_prepare(hdev))
3877+
goto err_reset;
3878+
3879+
if (hclge_reset_wait(hdev))
3880+
goto err_reset;
3881+
3882+
if (hclge_reset_rebuild(hdev))
3883+
goto err_reset;
3884+
38743885
return;
38753886

3876-
err_reset_lock:
3877-
rtnl_unlock();
38783887
err_reset:
38793888
if (hclge_reset_err_handle(hdev))
38803889
hclge_reset_task_schedule(hdev);

0 commit comments

Comments
 (0)