aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDon Skidmore <donald.c.skidmore@intel.com>2012-03-17 01:51:52 -0400
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>2012-05-03 06:02:43 -0400
commitab6039a70bb559b2fb5f363934da67d864ccda2a (patch)
tree4d5530f6cd86d1f255691add0d1be18a44a20f72
parent5a8887d39e1ba5ee2d4ccb94b14d6f2dce5ddfca (diff)
ixgbe: fix race condition with shutdown
It was possible for shutdown to pull the rug out from other driver entry points. Now we just grab the rtnl lock before taking everything apart. Thanks to Hariharan for noticing this tight race condition. Signed-off-by: Don Skidmore <donald.c.skidmore@intel.com> Cc: Hariharan Nagarajan <hanagara@cisco.com> Tested-by: Phil Schmitt <phillip.j.schmitt@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
-rw-r--r--drivers/net/ethernet/intel/ixgbe/ixgbe_main.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
index 88f6b2e9b72d..d9dbf871abb8 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
@@ -4866,10 +4866,12 @@ static int __ixgbe_shutdown(struct pci_dev *pdev, bool *enable_wake)
4866 netif_device_detach(netdev); 4866 netif_device_detach(netdev);
4867 4867
4868 if (netif_running(netdev)) { 4868 if (netif_running(netdev)) {
4869 rtnl_lock();
4869 ixgbe_down(adapter); 4870 ixgbe_down(adapter);
4870 ixgbe_free_irq(adapter); 4871 ixgbe_free_irq(adapter);
4871 ixgbe_free_all_tx_resources(adapter); 4872 ixgbe_free_all_tx_resources(adapter);
4872 ixgbe_free_all_rx_resources(adapter); 4873 ixgbe_free_all_rx_resources(adapter);
4874 rtnl_unlock();
4873 } 4875 }
4874 4876
4875 ixgbe_clear_interrupt_scheme(adapter); 4877 ixgbe_clear_interrupt_scheme(adapter);