* [PATCH] mpt_interrupt() should return IRQ_NONE when appropriate
@ 2006-04-26 13:58 Jan Beulich
0 siblings, 0 replies; only message in thread
From: Jan Beulich @ 2006-04-26 13:58 UTC (permalink / raw)
To: mpt_linux_developer; +Cc: linux-kernel
The way mpt_interrupt() was coded, it was impossible for the unhandled
interrupt detection logic to ever trigger. All interrupt handlers should
return IRQ_NONE when they have nothing to do.
Signed-off-by: Jan Beulich <jbeulich@novell.com>
diff -Npru /home/jbeulich/tmp/linux-2.6.17-rc2/drivers/message/fusion/mptbase.c
2.6.17-rc2-mpt_interrupt/drivers/message/fusion/mptbase.c
--- /home/jbeulich/tmp/linux-2.6.17-rc2/drivers/message/fusion/mptbase.c 2006-04-26 11:50:44.000000000 +0200
+++ 2.6.17-rc2-mpt_interrupt/drivers/message/fusion/mptbase.c 2006-04-25 15:04:48.000000000 +0200
@@ -372,20 +372,21 @@ static irqreturn_t
mpt_interrupt(int irq, void *bus_id, struct pt_regs *r)
{
MPT_ADAPTER *ioc = bus_id;
- u32 pa;
+ u32 pa = CHIPREG_READ32_dmasync(&ioc->chip->ReplyFifo);
+
+ if (pa == 0xFFFFFFFF)
+ return IRQ_NONE;
/*
* Drain the reply FIFO!
*/
- while (1) {
- pa = CHIPREG_READ32_dmasync(&ioc->chip->ReplyFifo);
- if (pa == 0xFFFFFFFF)
- return IRQ_HANDLED;
- else if (pa & MPI_ADDRESS_REPLY_A_BIT)
+ do {
+ if (pa & MPI_ADDRESS_REPLY_A_BIT)
mpt_reply(ioc, pa);
else
mpt_turbo_reply(ioc, pa);
- }
+ pa = CHIPREG_READ32_dmasync(&ioc->chip->ReplyFifo);
+ } while (pa != 0xFFFFFFFF);
return IRQ_HANDLED;
}
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2006-04-26 13:58 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-04-26 13:58 [PATCH] mpt_interrupt() should return IRQ_NONE when appropriate Jan Beulich
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome