|
@@ -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:
|