Message ID | 20090504211941.10922.95964.stgit@localhost.localdomain |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
From: Jeff Kirsher <jeffrey.t.kirsher@intel.com> Date: Mon, 04 May 2009 14:19:42 -0700 > a recent fix to e1000 (commit 15b2bee2) caused KVM/QEMU/VMware based > virtualized e1000 interfaces to begin failing when resetting. > > This is because the driver in a virtual environment doesn't > get to run instructions *AT ALL* when an interrupt is asserted. > The interrupt code runs immediately and this recent bug fix > allows an interrupt to be possible when the interrupt handler > will reject it (due to the new code), when being called from > any path in the driver that holds the E1000_RESETTING flag. > > the driver should use the __E1000_DOWN flag instead of the > __E1000_RESETTING flag to prevent interrupt execution > while reconfiguring the hardware. > > Signed-off-by: Jesse Brandeburg <jesse.brandeburg@intel.com> > Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com> Applied, thanks. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/net/e1000/e1000_main.c b/drivers/net/e1000/e1000_main.c index 6a46cee..b1419e2 100644 --- a/drivers/net/e1000/e1000_main.c +++ b/drivers/net/e1000/e1000_main.c @@ -3738,7 +3738,7 @@ static irqreturn_t e1000_intr(int irq, void *data) struct e1000_hw *hw = &adapter->hw; u32 rctl, icr = er32(ICR); - if (unlikely((!icr) || test_bit(__E1000_RESETTING, &adapter->flags))) + if (unlikely((!icr) || test_bit(__E1000_DOWN, &adapter->flags))) return IRQ_NONE; /* Not our interrupt */ /* IMS will not auto-mask if INT_ASSERTED is not set, and if it is