sfc: Survive ISR0=0 bug in the shared IRQ case
Signed-off-by: Ben Hutchings <bhutchings@solarflare.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
2e80340740
commit
c91f48d61c
|
@ -1384,6 +1384,15 @@ static irqreturn_t efx_legacy_interrupt(int irq, void *dev_id)
|
||||||
efx->last_irq_cpu = raw_smp_processor_id();
|
efx->last_irq_cpu = raw_smp_processor_id();
|
||||||
EFX_TRACE(efx, "IRQ %d on CPU %d status " EFX_DWORD_FMT "\n",
|
EFX_TRACE(efx, "IRQ %d on CPU %d status " EFX_DWORD_FMT "\n",
|
||||||
irq, raw_smp_processor_id(), EFX_DWORD_VAL(reg));
|
irq, raw_smp_processor_id(), EFX_DWORD_VAL(reg));
|
||||||
|
} else if (EFX_WORKAROUND_15783(efx)) {
|
||||||
|
/* We can't return IRQ_HANDLED more than once on seeing ISR0=0
|
||||||
|
* because this might be a shared interrupt, but we do need to
|
||||||
|
* check the channel every time and preemptively rearm it if
|
||||||
|
* it's idle. */
|
||||||
|
efx_for_each_channel(channel, efx) {
|
||||||
|
if (!channel->work_pending)
|
||||||
|
efx_nic_eventq_read_ack(channel);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
|
Loading…
Reference in New Issue