|
@@ -31,7 +31,7 @@
|
|
|
|
|
|
char e1000_driver_name[] = "e1000";
|
|
|
static char e1000_driver_string[] = "Intel(R) PRO/1000 Network Driver";
|
|
|
-#define DRV_VERSION "7.3.21-k6-NAPI"
|
|
|
+#define DRV_VERSION "7.3.21-k8-NAPI"
|
|
|
const char e1000_driver_version[] = DRV_VERSION;
|
|
|
static const char e1000_copyright[] = "Copyright (c) 1999-2006 Intel Corporation.";
|
|
|
|
|
@@ -485,9 +485,6 @@ void e1000_down(struct e1000_adapter *adapter)
|
|
|
struct net_device *netdev = adapter->netdev;
|
|
|
u32 rctl, tctl;
|
|
|
|
|
|
- /* signal that we're down so the interrupt handler does not
|
|
|
- * reschedule our watchdog timer */
|
|
|
- set_bit(__E1000_DOWN, &adapter->flags);
|
|
|
|
|
|
/* disable receives in the hardware */
|
|
|
rctl = er32(RCTL);
|
|
@@ -508,6 +505,13 @@ void e1000_down(struct e1000_adapter *adapter)
|
|
|
|
|
|
e1000_irq_disable(adapter);
|
|
|
|
|
|
+ /*
|
|
|
+ * Setting DOWN must be after irq_disable to prevent
|
|
|
+ * a screaming interrupt. Setting DOWN also prevents
|
|
|
+ * timers and tasks from rescheduling.
|
|
|
+ */
|
|
|
+ set_bit(__E1000_DOWN, &adapter->flags);
|
|
|
+
|
|
|
del_timer_sync(&adapter->tx_fifo_stall_timer);
|
|
|
del_timer_sync(&adapter->watchdog_timer);
|
|
|
del_timer_sync(&adapter->phy_info_timer);
|