From f9ce1485b3c48eb729afa0218565a84e7265d35d Mon Sep 17 00:00:00 2001 From: Guido Barzini Date: Wed, 3 Feb 2010 09:31:24 +0000 Subject: [PATCH] --- yaml --- r: 183803 b: refs/heads/master c: c91f48d61c5b6fb36a6fc50de923db4db009b0dc h: refs/heads/master i: 183801: abaa48ea3b5fb1de519396e6dba1454695a80881 183799: 2450984d14ff9d7775fc9430562c141dab983bcc v: v3 --- [refs] | 2 +- trunk/drivers/net/sfc/nic.c | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 236c161b051f..a3767a50bfa9 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 2e803407400efe592e5294993a5b1e8251f6dd49 +refs/heads/master: c91f48d61c5b6fb36a6fc50de923db4db009b0dc diff --git a/trunk/drivers/net/sfc/nic.c b/trunk/drivers/net/sfc/nic.c index db44224ed2ca..8d9696a38edf 100644 --- a/trunk/drivers/net/sfc/nic.c +++ b/trunk/drivers/net/sfc/nic.c @@ -1384,6 +1384,15 @@ static irqreturn_t efx_legacy_interrupt(int irq, void *dev_id) efx->last_irq_cpu = raw_smp_processor_id(); EFX_TRACE(efx, "IRQ %d on CPU %d status " EFX_DWORD_FMT "\n", 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;