Commit c91f48d6 authored by Guido Barzini's avatar Guido Barzini Committed by David S. Miller

sfc: Survive ISR0=0 bug in the shared IRQ case

Signed-off-by: default avatarBen Hutchings <bhutchings@solarflare.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 2e803407
...@@ -1384,6 +1384,15 @@ static irqreturn_t efx_legacy_interrupt(int irq, void *dev_id) ...@@ -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;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment