i40vf: don't stop me now
authorMitch Williams <mitch.a.williams@intel.com>
Fri, 27 Feb 2015 09:18:31 +0000 (09:18 +0000)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Mon, 9 Mar 2015 12:20:45 +0000 (05:20 -0700)
If a reset occurs when the netdev is closed, the reset task will hang in
napi_disable, causing deadlocks and general grumpiness.

Check to make sure the device is actually running before stopping
everything. This allows the reset task to complete and have a real good
time.

Change-ID: Iaaea84acbcb9b3810c216b14c3326e4287b75b58
Signed-off-by: Mitch Williams <mitch.a.williams@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
drivers/net/ethernet/intel/i40evf/i40evf_main.c

index f44911df286acac2c6beb797b5e02a72e1895547..32d0a99ad2a9989e889863b819824cb07408b27c 100644 (file)
@@ -1578,13 +1578,14 @@ continue_reset:
        adapter->flags &= ~I40EVF_FLAG_RESET_PENDING;
 
        i40evf_irq_disable(adapter);
-       i40evf_napi_disable_all(adapter);
-
-       netif_tx_disable(netdev);
 
-       netif_tx_stop_all_queues(netdev);
+       if (netif_running(adapter->netdev)) {
+               i40evf_napi_disable_all(adapter);
+               netif_tx_disable(netdev);
+               netif_tx_stop_all_queues(netdev);
+               netif_carrier_off(netdev);
+       }
 
-       netif_carrier_off(netdev);
        adapter->state = __I40EVF_RESETTING;
 
        /* kill and reinit the admin queue */