* [net-2.6 PATCH] e1000: fix screaming IRQ
@ 2010-11-21 10:48 Jeff Kirsher
2010-11-21 17:54 ` David Miller
0 siblings, 1 reply; 2+ messages in thread
From: Jeff Kirsher @ 2010-11-21 10:48 UTC (permalink / raw)
To: davem
Cc: netdev, gospo, bphilips, Anupam Chanda, stable kernel,
Jesse Brandeburg, Jeff Kirsher
From: Anupam Chanda <anupamc@vmware.com>
VMWare reports that the e1000 driver has a bug when bringing down the
interface, such that interrupts are not disabled in the hardware but the
driver stops reporting that it consumed the interrupt.
The fix is to set the driver's "down" flag later in the routine,
after all the timers and such have exited, preventing the interrupt
handler from being called and exiting early without handling the
interrupt.
CC: Anupam Chanda <anupamc@vmware.com>
CC: stable kernel <stable@kernel.org>
Signed-off-by: Jesse Brandeburg <jesse.brandeburg@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
---
drivers/net/e1000/e1000_main.c | 12 ++++++++----
1 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/drivers/net/e1000/e1000_main.c b/drivers/net/e1000/e1000_main.c
index 4686c39..4d62f7b 100644
--- a/drivers/net/e1000/e1000_main.c
+++ b/drivers/net/e1000/e1000_main.c
@@ -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);
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [net-2.6 PATCH] e1000: fix screaming IRQ
2010-11-21 10:48 [net-2.6 PATCH] e1000: fix screaming IRQ Jeff Kirsher
@ 2010-11-21 17:54 ` David Miller
0 siblings, 0 replies; 2+ messages in thread
From: David Miller @ 2010-11-21 17:54 UTC (permalink / raw)
To: jeffrey.t.kirsher
Cc: netdev, gospo, bphilips, anupamc, stable, jesse.brandeburg
From: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Date: Sun, 21 Nov 2010 02:48:28 -0800
> From: Anupam Chanda <anupamc@vmware.com>
>
> VMWare reports that the e1000 driver has a bug when bringing down the
> interface, such that interrupts are not disabled in the hardware but the
> driver stops reporting that it consumed the interrupt.
>
> The fix is to set the driver's "down" flag later in the routine,
> after all the timers and such have exited, preventing the interrupt
> handler from being called and exiting early without handling the
> interrupt.
>
> CC: Anupam Chanda <anupamc@vmware.com>
> CC: stable kernel <stable@kernel.org>
> Signed-off-by: Jesse Brandeburg <jesse.brandeburg@intel.com>
> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Applied.
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2010-11-21 17:54 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-11-21 10:48 [net-2.6 PATCH] e1000: fix screaming IRQ Jeff Kirsher
2010-11-21 17:54 ` David Miller
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).