[SCSI] qla2xxx: Fix a bug that clears the interrupt status register for the base...
authorAnirban Chakraborty <anirban.chakraborty@qlogic.com>
Tue, 4 Aug 2009 23:12:13 +0000 (16:12 -0700)
committerJames Bottomley <James.Bottomley@suse.de>
Sat, 22 Aug 2009 22:52:19 +0000 (17:52 -0500)
The interrupt handler clears the interrupt status register for response
updates in the base queue while working in the multique mode. This could lead
to missing interrupt for async events, mail box completions etc. as these are
also handled in the base queue.  The fix ensures that the interrupt bit is not
cleared for response updates in the ISR when the driver is working in
multiqueue mode.

Signed-off-by: Anirban Chakraborty <anirban.chakraborty@qlogic.com>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
drivers/scsi/qla2xxx/qla_isr.c

index 40014f3407b909cd93a44286b70c009c5bbe4705..74fa6f9920419d5fe222e516c54623ecb7e8d7f7 100644 (file)
@@ -1769,8 +1769,10 @@ qla24xx_msix_rsp_q(int irq, void *dev_id)
 
        vha = qla25xx_get_host(rsp);
        qla24xx_process_response_queue(vha, rsp);
-       WRT_REG_DWORD(&reg->hccr, HCCRX_CLR_RISC_INT);
-
+       if (!ha->mqenable) {
+               WRT_REG_DWORD(&reg->hccr, HCCRX_CLR_RISC_INT);
+               RD_REG_DWORD_RELAXED(&reg->hccr);
+       }
        spin_unlock_irq(&ha->hardware_lock);
 
        return IRQ_HANDLED;