aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/message/fusion/mptbase.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/message/fusion/mptbase.c')
-rw-r--r--drivers/message/fusion/mptbase.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/drivers/message/fusion/mptbase.c b/drivers/message/fusion/mptbase.c
index 8ac77caf9337..20609966c2a9 100644
--- a/drivers/message/fusion/mptbase.c
+++ b/drivers/message/fusion/mptbase.c
@@ -369,20 +369,21 @@ static irqreturn_t
369mpt_interrupt(int irq, void *bus_id, struct pt_regs *r) 369mpt_interrupt(int irq, void *bus_id, struct pt_regs *r)
370{ 370{
371 MPT_ADAPTER *ioc = bus_id; 371 MPT_ADAPTER *ioc = bus_id;
372 u32 pa; 372 u32 pa = CHIPREG_READ32_dmasync(&ioc->chip->ReplyFifo);
373
374 if (pa == 0xFFFFFFFF)
375 return IRQ_NONE;
373 376
374 /* 377 /*
375 * Drain the reply FIFO! 378 * Drain the reply FIFO!
376 */ 379 */
377 while (1) { 380 do {
378 pa = CHIPREG_READ32_dmasync(&ioc->chip->ReplyFifo); 381 if (pa & MPI_ADDRESS_REPLY_A_BIT)
379 if (pa == 0xFFFFFFFF)
380 return IRQ_HANDLED;
381 else if (pa & MPI_ADDRESS_REPLY_A_BIT)
382 mpt_reply(ioc, pa); 382 mpt_reply(ioc, pa);
383 else 383 else
384 mpt_turbo_reply(ioc, pa); 384 mpt_turbo_reply(ioc, pa);
385 } 385 pa = CHIPREG_READ32_dmasync(&ioc->chip->ReplyFifo);
386 } while (pa != 0xFFFFFFFF);
386 387
387 return IRQ_HANDLED; 388 return IRQ_HANDLED;
388} 389}