aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/sfc/nic.c
diff options
context:
space:
mode:
authorGuido Barzini <gbarzini@solarflare.com>2010-02-03 04:31:24 -0500
committerDavid S. Miller <davem@davemloft.net>2010-02-03 22:12:45 -0500
commitc91f48d61c5b6fb36a6fc50de923db4db009b0dc (patch)
tree204514756abc60e91df45caf10203eba6d2d6f6b /drivers/net/sfc/nic.c
parent2e803407400efe592e5294993a5b1e8251f6dd49 (diff)
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>
Diffstat (limited to 'drivers/net/sfc/nic.c')
-rw-r--r--drivers/net/sfc/nic.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/net/sfc/nic.c b/drivers/net/sfc/nic.c
index db44224ed2ca..8d9696a38edf 100644
--- a/drivers/net/sfc/nic.c
+++ b/drivers/net/sfc/nic.c
@@ -1384,6 +1384,15 @@ static irqreturn_t efx_legacy_interrupt(int irq, void *dev_id)
1384 efx->last_irq_cpu = raw_smp_processor_id(); 1384 efx->last_irq_cpu = raw_smp_processor_id();
1385 EFX_TRACE(efx, "IRQ %d on CPU %d status " EFX_DWORD_FMT "\n", 1385 EFX_TRACE(efx, "IRQ %d on CPU %d status " EFX_DWORD_FMT "\n",
1386 irq, raw_smp_processor_id(), EFX_DWORD_VAL(reg)); 1386 irq, raw_smp_processor_id(), EFX_DWORD_VAL(reg));
1387 } else if (EFX_WORKAROUND_15783(efx)) {
1388 /* We can't return IRQ_HANDLED more than once on seeing ISR0=0
1389 * because this might be a shared interrupt, but we do need to
1390 * check the channel every time and preemptively rearm it if
1391 * it's idle. */
1392 efx_for_each_channel(channel, efx) {
1393 if (!channel->work_pending)
1394 efx_nic_eventq_read_ack(channel);
1395 }
1387 } 1396 }
1388 1397
1389 return result; 1398 return result;