summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBruce Allan <bruce.w.allan@intel.com>2013-04-20 05:37:29 +0000
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>2013-04-25 18:39:56 -0700
commita3b87a4c69619f5366b7225aafbf7983eed31a9a (patch)
tree00f2ca9dd83a136c47d2d4d93a753d0f822f304e
parent73e3dd6b45c4c870fc2641eb04c24e3f12dab1e0 (diff)
downloadop-kernel-dev-a3b87a4c69619f5366b7225aafbf7983eed31a9a.zip
op-kernel-dev-a3b87a4c69619f5366b7225aafbf7983eed31a9a.tar.gz
e1000e: panic caused by Rx traffic arriving while interface going down
An "unable to handle kernel paging request" panic can occur when receiving traffic while the interface is going down. Wait for NAPI to be done with current context after disabling interrupts and then disable NAPI. See https://bugzilla.vyatta.com/show_bug.cgi?id=8837. Reported-by: Stephen Hemminger <stephen@networkplumber.org> Signed-off-by: Bruce Allan <bruce.w.allan@intel.com> Tested-by: Aaron Brown <aaron.f.brown@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
-rw-r--r--drivers/net/ethernet/intel/e1000e/netdev.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c
index da7f2fa..a27e3bc 100644
--- a/drivers/net/ethernet/intel/e1000e/netdev.c
+++ b/drivers/net/ethernet/intel/e1000e/netdev.c
@@ -4016,6 +4016,8 @@ void e1000e_down(struct e1000_adapter *adapter)
e1000_irq_disable(adapter);
+ napi_synchronize(&adapter->napi);
+
del_timer_sync(&adapter->watchdog_timer);
del_timer_sync(&adapter->phy_info_timer);
@@ -4372,12 +4374,13 @@ static int e1000_close(struct net_device *netdev)
pm_runtime_get_sync(&pdev->dev);
- napi_disable(&adapter->napi);
-
if (!test_bit(__E1000_DOWN, &adapter->state)) {
e1000e_down(adapter);
e1000_free_irq(adapter);
}
+
+ napi_disable(&adapter->napi);
+
e1000_power_down_phy(adapter);
e1000e_free_tx_resources(adapter->tx_ring);
OpenPOWER on IntegriCloud