| .. | .. | 
|---|
| 542 | 542 | /* Start the hardware monitor if there is one */ | 
|---|
| 543 | 543 | efx_start_monitor(efx); | 
|---|
| 544 | 544 |  | 
|---|
|  | 545 | +	efx_selftest_async_start(efx); | 
|---|
|  | 546 | + | 
|---|
| 545 | 547 | /* Link state detection is normally event-driven; we have | 
|---|
| 546 | 548 | * to poll now because we could have missed a change | 
|---|
| 547 | 549 | */ | 
|---|
| .. | .. | 
|---|
| 897 | 899 | * have changed by now.  Now that we have the RTNL lock, | 
|---|
| 898 | 900 | * it cannot change again. | 
|---|
| 899 | 901 | */ | 
|---|
| 900 |  | -	if (efx->state == STATE_READY) | 
|---|
|  | 902 | +	if (efx_net_active(efx->state)) | 
|---|
| 901 | 903 | (void)efx_reset(efx, method); | 
|---|
| 902 | 904 |  | 
|---|
| 903 | 905 | rtnl_unlock(); | 
|---|
| .. | .. | 
|---|
| 907 | 909 | { | 
|---|
| 908 | 910 | enum reset_type method; | 
|---|
| 909 | 911 |  | 
|---|
| 910 |  | -	if (efx->state == STATE_RECOVERY) { | 
|---|
|  | 912 | +	if (efx_recovering(efx->state)) { | 
|---|
| 911 | 913 | netif_dbg(efx, drv, efx->net_dev, | 
|---|
| 912 | 914 | "recovering: skip scheduling %s reset\n", | 
|---|
| 913 | 915 | RESET_TYPE(type)); | 
|---|
| .. | .. | 
|---|
| 942 | 944 | /* If we're not READY then just leave the flags set as the cue | 
|---|
| 943 | 945 | * to abort probing or reschedule the reset later. | 
|---|
| 944 | 946 | */ | 
|---|
| 945 |  | -	if (READ_ONCE(efx->state) != STATE_READY) | 
|---|
|  | 947 | +	if (!efx_net_active(READ_ONCE(efx->state))) | 
|---|
| 946 | 948 | return; | 
|---|
| 947 | 949 |  | 
|---|
| 948 | 950 | /* efx_process_channel() will no longer read events once a | 
|---|
| .. | .. | 
|---|
| 1214 | 1216 | rtnl_lock(); | 
|---|
| 1215 | 1217 |  | 
|---|
| 1216 | 1218 | if (efx->state != STATE_DISABLED) { | 
|---|
| 1217 |  | -		efx->state = STATE_RECOVERY; | 
|---|
|  | 1219 | +		efx->state = efx_recover(efx->state); | 
|---|
| 1218 | 1220 | efx->reset_pending = 0; | 
|---|
| 1219 | 1221 |  | 
|---|
| 1220 | 1222 | efx_device_detach_sync(efx); | 
|---|
| .. | .. | 
|---|
| 1268 | 1270 | netif_err(efx, hw, efx->net_dev, | 
|---|
| 1269 | 1271 | "efx_reset failed after PCI error (%d)\n", rc); | 
|---|
| 1270 | 1272 | } else { | 
|---|
| 1271 |  | -		efx->state = STATE_READY; | 
|---|
|  | 1273 | +		efx->state = efx_recovered(efx->state); | 
|---|
| 1272 | 1274 | netif_dbg(efx, hw, efx->net_dev, | 
|---|
| 1273 | 1275 | "Done resetting and resuming IO after PCI error.\n"); | 
|---|
| 1274 | 1276 | } | 
|---|