diff options
Diffstat (limited to 'drivers/net/e1000/e1000_main.c')
| -rw-r--r-- | drivers/net/e1000/e1000_main.c | 10 | 
1 files changed, 9 insertions, 1 deletions
diff --git a/drivers/net/e1000/e1000_main.c b/drivers/net/e1000/e1000_main.c index 4ff88a683f6..e332aee386f 100644 --- a/drivers/net/e1000/e1000_main.c +++ b/drivers/net/e1000/e1000_main.c @@ -3478,9 +3478,17 @@ static irqreturn_t e1000_intr(int irq, void *data)  	struct e1000_hw *hw = &adapter->hw;  	u32 icr = er32(ICR); -	if (unlikely((!icr) || test_bit(__E1000_DOWN, &adapter->flags))) +	if (unlikely((!icr)))  		return IRQ_NONE;  /* Not our interrupt */ +	/* +	 * we might have caused the interrupt, but the above +	 * read cleared it, and just in case the driver is +	 * down there is nothing to do so return handled +	 */ +	if (unlikely(test_bit(__E1000_DOWN, &adapter->flags))) +		return IRQ_HANDLED; +  	if (unlikely(icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC))) {  		hw->get_link_status = 1;  		/* guard against interrupt when we're going down */  |