提交 66fbb541 编写于 作者: O Oliver Neukum 提交者: John W. Linville

iwl4965: fix not correctly dealing with hotunplug

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: NOliver Neukum <oneukum@suse.de>
Signed-off-by: NZhu Yi <yi.zhu@intel.com>
Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
上级 755a957d
......@@ -5156,9 +5156,10 @@ 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",
......@@ -5166,8 +5167,9 @@ static irqreturn_t iwl_isr(int irq, void *data)
/* 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:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册