@@ -410,7 +410,7 @@ void ncsi_free_request(struct ncsi_request *nr)
410
410
driven = !!(nr -> flags & NCSI_REQ_FLAG_EVENT_DRIVEN );
411
411
spin_unlock_irqrestore (& ndp -> lock , flags );
412
412
413
- if (driven && cmd && -- ndp -> pending_req_num == 0 )
413
+ if (driven && cmd && -- ndp -> pending_req_num == 0 && !( ndp -> flags & NCSI_DEV_SHUTDOWN ) )
414
414
schedule_work (& ndp -> work );
415
415
416
416
/* Release command and response */
@@ -1055,7 +1055,7 @@ static void ncsi_configure_channel(struct ncsi_dev_priv *ndp)
1055
1055
ret = ncsi_gma_handler (& nca , nc -> version .mf_id );
1056
1056
#endif /* CONFIG_NCSI_OEM_CMD_GET_MAC */
1057
1057
1058
- if (ret < 0 )
1058
+ if (ret < 0 && !( ndp -> flags & NCSI_DEV_SHUTDOWN ) )
1059
1059
schedule_work (& ndp -> work );
1060
1060
1061
1061
break ;
@@ -1079,7 +1079,8 @@ static void ncsi_configure_channel(struct ncsi_dev_priv *ndp)
1079
1079
ret = clear_one_vid (ndp , nc , & nca );
1080
1080
if (ret ) {
1081
1081
nd -> state = ncsi_dev_state_config_svf ;
1082
- schedule_work (& ndp -> work );
1082
+ if (!(ndp -> flags & NCSI_DEV_SHUTDOWN ))
1083
+ schedule_work (& ndp -> work );
1083
1084
break ;
1084
1085
}
1085
1086
/* Repeat */
@@ -1089,7 +1090,8 @@ static void ncsi_configure_channel(struct ncsi_dev_priv *ndp)
1089
1090
ret = set_one_vid (ndp , nc , & nca );
1090
1091
if (ret ) {
1091
1092
nd -> state = ncsi_dev_state_config_ev ;
1092
- schedule_work (& ndp -> work );
1093
+ if (!(ndp -> flags & NCSI_DEV_SHUTDOWN ))
1094
+ schedule_work (& ndp -> work );
1093
1095
break ;
1094
1096
}
1095
1097
/* Repeat */
@@ -1396,15 +1398,17 @@ static void ncsi_probe_channel(struct ncsi_dev_priv *ndp)
1396
1398
if (!ndp -> active_package ) {
1397
1399
/* No response */
1398
1400
nd -> state = ncsi_dev_state_probe_dp ;
1399
- schedule_work (& ndp -> work );
1401
+ if (!(ndp -> flags & NCSI_DEV_SHUTDOWN ))
1402
+ schedule_work (& ndp -> work );
1400
1403
break ;
1401
1404
}
1402
1405
nd -> state = ncsi_dev_state_probe_cis ;
1403
1406
if (IS_ENABLED (CONFIG_NCSI_OEM_CMD_GET_MAC ) &&
1404
1407
ndp -> mlx_multi_host )
1405
1408
nd -> state = ncsi_dev_state_probe_mlx_gma ;
1406
1409
1407
- schedule_work (& ndp -> work );
1410
+ if (!(ndp -> flags & NCSI_DEV_SHUTDOWN ))
1411
+ schedule_work (& ndp -> work );
1408
1412
break ;
1409
1413
#if IS_ENABLED (CONFIG_NCSI_OEM_CMD_GET_MAC )
1410
1414
case ncsi_dev_state_probe_mlx_gma :
@@ -1825,7 +1829,8 @@ int ncsi_start_dev(struct ncsi_dev *nd)
1825
1829
if (!(ndp -> flags & NCSI_DEV_PROBED )) {
1826
1830
ndp -> package_probe_id = 0 ;
1827
1831
nd -> state = ncsi_dev_state_probe ;
1828
- schedule_work (& ndp -> work );
1832
+ if (!(ndp -> flags & NCSI_DEV_SHUTDOWN ))
1833
+ schedule_work (& ndp -> work );
1829
1834
return 0 ;
1830
1835
}
1831
1836
@@ -1947,7 +1952,8 @@ int ncsi_reset_dev(struct ncsi_dev *nd)
1947
1952
spin_unlock_irqrestore (& ndp -> lock , flags );
1948
1953
1949
1954
nd -> state = ncsi_dev_state_suspend ;
1950
- schedule_work (& ndp -> work );
1955
+ if (!(ndp -> flags & NCSI_DEV_SHUTDOWN ))
1956
+ schedule_work (& ndp -> work );
1951
1957
return 0 ;
1952
1958
}
1953
1959
@@ -1966,6 +1972,7 @@ void ncsi_unregister_dev(struct ncsi_dev *nd)
1966
1972
list_del_rcu (& ndp -> node );
1967
1973
spin_unlock_irqrestore (& ncsi_dev_lock , flags );
1968
1974
1975
+ ndp -> flags |= NCSI_DEV_SHUTDOWN ;
1969
1976
cancel_work_sync (& ndp -> work );
1970
1977
1971
1978
kfree (ndp );
0 commit comments