@@ -3782,10 +3782,9 @@ static int hclge_reset_stack(struct hclge_dev *hdev)
3782
3782
return hclge_notify_client (hdev , HNAE3_RESTORE_CLIENT );
3783
3783
}
3784
3784
3785
- static void hclge_reset (struct hclge_dev * hdev )
3785
+ static int hclge_reset_prepare (struct hclge_dev * hdev )
3786
3786
{
3787
3787
struct hnae3_ae_dev * ae_dev = pci_get_drvdata (hdev -> pdev );
3788
- enum hnae3_reset_type reset_level ;
3789
3788
int ret ;
3790
3789
3791
3790
/* 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)
3796
3795
/* perform reset of the stack & ae device for a client */
3797
3796
ret = hclge_notify_roce_client (hdev , HNAE3_DOWN_CLIENT );
3798
3797
if (ret )
3799
- goto err_reset ;
3798
+ return ret ;
3800
3799
3801
3800
ret = hclge_reset_prepare_down (hdev );
3802
3801
if (ret )
3803
- goto err_reset ;
3802
+ return ret ;
3804
3803
3805
3804
rtnl_lock ();
3806
3805
ret = hclge_notify_client (hdev , HNAE3_DOWN_CLIENT );
3807
- if (ret )
3808
- goto err_reset_lock ;
3809
-
3810
3806
rtnl_unlock ();
3811
-
3812
- ret = hclge_reset_prepare_wait (hdev );
3813
3807
if (ret )
3814
- goto err_reset ;
3808
+ return ret ;
3815
3809
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 ;
3818
3818
3819
3819
hdev -> rst_stats .hw_reset_done_cnt ++ ;
3820
3820
3821
3821
ret = hclge_notify_roce_client (hdev , HNAE3_UNINIT_CLIENT );
3822
3822
if (ret )
3823
- goto err_reset ;
3823
+ return ret ;
3824
3824
3825
3825
rtnl_lock ();
3826
-
3827
3826
ret = hclge_reset_stack (hdev );
3827
+ rtnl_unlock ();
3828
3828
if (ret )
3829
- goto err_reset_lock ;
3829
+ return ret ;
3830
3830
3831
3831
hclge_clear_reset_cause (hdev );
3832
3832
3833
3833
ret = hclge_reset_prepare_up (hdev );
3834
3834
if (ret )
3835
- goto err_reset_lock ;
3835
+ return ret ;
3836
3836
3837
- rtnl_unlock ();
3838
3837
3839
3838
ret = hclge_notify_roce_client (hdev , HNAE3_INIT_CLIENT );
3840
3839
/* ignore RoCE notify error if it fails HCLGE_RESET_MAX_FAIL_CNT - 1
3841
3840
* times
3842
3841
*/
3843
3842
if (ret &&
3844
3843
hdev -> rst_stats .reset_fail_cnt < HCLGE_RESET_MAX_FAIL_CNT - 1 )
3845
- goto err_reset ;
3844
+ return ret ;
3846
3845
3847
3846
rtnl_lock ();
3848
-
3849
3847
ret = hclge_notify_client (hdev , HNAE3_UP_CLIENT );
3850
- if (ret )
3851
- goto err_reset_lock ;
3852
-
3853
3848
rtnl_unlock ();
3849
+ if (ret )
3850
+ return ret ;
3854
3851
3855
3852
ret = hclge_notify_roce_client (hdev , HNAE3_UP_CLIENT );
3856
3853
if (ret )
3857
- goto err_reset ;
3854
+ return ret ;
3858
3855
3859
3856
hdev -> last_reset_time = jiffies ;
3860
3857
hdev -> rst_stats .reset_fail_cnt = 0 ;
@@ -3871,10 +3868,22 @@ static void hclge_reset(struct hclge_dev *hdev)
3871
3868
if (reset_level != HNAE3_NONE_RESET )
3872
3869
set_bit (reset_level , & hdev -> reset_request );
3873
3870
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
+
3874
3885
return ;
3875
3886
3876
- err_reset_lock :
3877
- rtnl_unlock ();
3878
3887
err_reset :
3879
3888
if (hclge_reset_err_handle (hdev ))
3880
3889
hclge_reset_task_schedule (hdev );
0 commit comments