ixgbe: Reorder Tx/Rx shutdown to reduce time needed to stop device
This change is meant to help reduce the time needed to shutdown the transmit and receive paths for the device. Specifically what we now do after this patch is disable the transmit path first at the netdev level, and then work on disabling the Rx. This way while we are waiting on the Rx queues to be disabled the Tx queues have an opportunity to drain out. In addition I have dropped the 10ms timeout that was left in the ixgbe_down function that seems to have been carried through from back in e1000 as far as I can tell. We shouldn't need it since we don't actually disable the Tx until much later and we have additional logic in place for verifying the Tx queues have been disabled. Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com> Tested-by: Don Buchholz <donald.buchholz@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
This commit is contained in:
parent
73017f4e05
commit
3b5f14b50e
@ -5814,6 +5814,13 @@ void ixgbe_down(struct ixgbe_adapter *adapter)
|
||||
if (test_and_set_bit(__IXGBE_DOWN, &adapter->state))
|
||||
return; /* do nothing if already down */
|
||||
|
||||
/* Shut off incoming Tx traffic */
|
||||
netif_tx_stop_all_queues(netdev);
|
||||
|
||||
/* call carrier off first to avoid false dev_watchdog timeouts */
|
||||
netif_carrier_off(netdev);
|
||||
netif_tx_disable(netdev);
|
||||
|
||||
/* disable receives */
|
||||
hw->mac.ops.disable_rx(hw);
|
||||
|
||||
@ -5822,16 +5829,9 @@ void ixgbe_down(struct ixgbe_adapter *adapter)
|
||||
/* this call also flushes the previous write */
|
||||
ixgbe_disable_rx_queue(adapter, adapter->rx_ring[i]);
|
||||
|
||||
usleep_range(10000, 20000);
|
||||
|
||||
/* synchronize_sched() needed for pending XDP buffers to drain */
|
||||
if (adapter->xdp_ring[0])
|
||||
synchronize_sched();
|
||||
netif_tx_stop_all_queues(netdev);
|
||||
|
||||
/* call carrier off first to avoid false dev_watchdog timeouts */
|
||||
netif_carrier_off(netdev);
|
||||
netif_tx_disable(netdev);
|
||||
|
||||
ixgbe_irq_disable(adapter);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user