Skip to content

Commit

Permalink
iwl4965: fix not correctly dealing with hotunplug
Browse files Browse the repository at this point in the history
The interrupt handler returns IRQ_NONE if it detects that the device
is gone. That's incorrect because the device may have raised the interrupt.
Not acknowledging it may trigger the spurious interrupt detection and kill
drivers sharing the interrupt line.

Signed-off-by: Oliver Neukum <oneukum@suse.de>
Signed-off-by: Zhu Yi <yi.zhu@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
  • Loading branch information
Oliver Neukum authored and John W. Linville committed Nov 15, 2007
1 parent 755a957 commit 66fbb54
Showing 1 changed file with 5 additions and 3 deletions.
8 changes: 5 additions & 3 deletions drivers/net/wireless/iwlwifi/iwl4965-base.c
Original file line number Diff line number Diff line change
Expand Up @@ -5156,18 +5156,20 @@ static irqreturn_t iwl_isr(int irq, void *data)
}

if ((inta == 0xFFFFFFFF) || ((inta & 0xFFFFFFF0) == 0xa5a5a5a0)) {
/* Hardware disappeared */
/* Hardware disappeared. It might have already raised
* an interrupt */
IWL_WARNING("HARDWARE GONE?? INTA == 0x%080x\n", inta);
goto none;
goto unplugged;
}

IWL_DEBUG_ISR("ISR inta 0x%08x, enabled 0x%08x, fh 0x%08x\n",
inta, inta_mask, inta_fh);

/* iwl_irq_tasklet() will service interrupts and re-enable them */
tasklet_schedule(&priv->irq_tasklet);
spin_unlock(&priv->lock);

unplugged:
spin_unlock(&priv->lock);
return IRQ_HANDLED;

none:
Expand Down

0 comments on commit 66fbb54

Please sign in to comment.