Skip to content

Commit

Permalink
e1000e: do not schedule the Tx queue until ready
Browse files Browse the repository at this point in the history
Start the Tx queue when the interface is brought up in e1000e_up() but do
not schedule the queue until link is up as detected in the watchdog task
which sets netif_carrier_on.

Also flush the descriptors and clean the Tx and Rx rings before resetting
the hardware when bringing the interface down otherwise there is a small
window where the watchdog task can be triggered with netif_carrier_off
and the Tx ring not yet empty which causes an additional and unnecessary
reset.

Signed-off-by: Bruce Allan <bruce.w.allan@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
  • Loading branch information
Bruce Allan authored and Jeff Kirsher committed Jun 10, 2011
1 parent c5caf48 commit 400484f
Showing 1 changed file with 5 additions and 6 deletions.
11 changes: 5 additions & 6 deletions drivers/net/e1000e/netdev.c
Original file line number Diff line number Diff line change
Expand Up @@ -3347,7 +3347,7 @@ int e1000e_up(struct e1000_adapter *adapter)
e1000_configure_msix(adapter);
e1000_irq_enable(adapter);

netif_wake_queue(adapter->netdev);
netif_start_queue(adapter->netdev);

/* fire a link change interrupt to start the watchdog */
if (adapter->msix_entries)
Expand Down Expand Up @@ -3414,17 +3414,16 @@ void e1000e_down(struct e1000_adapter *adapter)
e1000e_update_stats(adapter);
spin_unlock(&adapter->stats64_lock);

e1000e_flush_descriptors(adapter);
e1000_clean_tx_ring(adapter);
e1000_clean_rx_ring(adapter);

adapter->link_speed = 0;
adapter->link_duplex = 0;

if (!pci_channel_offline(adapter->pdev))
e1000e_reset(adapter);

e1000e_flush_descriptors(adapter);

e1000_clean_tx_ring(adapter);
e1000_clean_rx_ring(adapter);

/*
* TODO: for power management, we could drop the link and
* pci_disable_device here.
Expand Down

0 comments on commit 400484f

Please sign in to comment.