aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi
diff options
context:
space:
mode:
authorAndrew Vasquez <andrew.vasquez@qlogic.com>2008-05-13 01:21:09 -0400
committerJames Bottomley <James.Bottomley@HansenPartnership.com>2008-05-15 11:39:28 -0400
commit0e973a24f02ed8c627271b013d69683b4497828d (patch)
tree7e65a3b5c33a7df404b7dc8e2df332377e4f275f /drivers/scsi
parentfd9a29f03600f306acb4faf49b92ca5472f39ee8 (diff)
[SCSI] qla2xxx: Correct locking within MSI-X interrupt handlers.
Both MSI-X vector handlers attempt to acquire the HA's hardware_lock. This though requires that interrupts be disabled/enabled during acquisition and release of the spinlock. Signed-off-by: Andrew Vasquez <andrew.vasquez@qlogic.com> Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Diffstat (limited to 'drivers/scsi')
-rw-r--r--drivers/scsi/qla2xxx/qla_isr.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c
index 5d9a64a7879b..0793aa9f161f 100644
--- a/drivers/scsi/qla2xxx/qla_isr.c
+++ b/drivers/scsi/qla2xxx/qla_isr.c
@@ -1639,12 +1639,12 @@ qla24xx_msix_rsp_q(int irq, void *dev_id)
1639 ha = dev_id; 1639 ha = dev_id;
1640 reg = &ha->iobase->isp24; 1640 reg = &ha->iobase->isp24;
1641 1641
1642 spin_lock(&ha->hardware_lock); 1642 spin_lock_irq(&ha->hardware_lock);
1643 1643
1644 qla24xx_process_response_queue(ha); 1644 qla24xx_process_response_queue(ha);
1645 WRT_REG_DWORD(&reg->hccr, HCCRX_CLR_RISC_INT); 1645 WRT_REG_DWORD(&reg->hccr, HCCRX_CLR_RISC_INT);
1646 1646
1647 spin_unlock(&ha->hardware_lock); 1647 spin_unlock_irq(&ha->hardware_lock);
1648 1648
1649 return IRQ_HANDLED; 1649 return IRQ_HANDLED;
1650} 1650}
@@ -1663,7 +1663,7 @@ qla24xx_msix_default(int irq, void *dev_id)
1663 reg = &ha->iobase->isp24; 1663 reg = &ha->iobase->isp24;
1664 status = 0; 1664 status = 0;
1665 1665
1666 spin_lock(&ha->hardware_lock); 1666 spin_lock_irq(&ha->hardware_lock);
1667 do { 1667 do {
1668 stat = RD_REG_DWORD(&reg->host_status); 1668 stat = RD_REG_DWORD(&reg->host_status);
1669 if (stat & HSRX_RISC_PAUSED) { 1669 if (stat & HSRX_RISC_PAUSED) {
@@ -1716,7 +1716,7 @@ qla24xx_msix_default(int irq, void *dev_id)
1716 } 1716 }
1717 WRT_REG_DWORD(&reg->hccr, HCCRX_CLR_RISC_INT); 1717 WRT_REG_DWORD(&reg->hccr, HCCRX_CLR_RISC_INT);
1718 } while (0); 1718 } while (0);
1719 spin_unlock(&ha->hardware_lock); 1719 spin_unlock_irq(&ha->hardware_lock);
1720 1720
1721 if (test_bit(MBX_INTR_WAIT, &ha->mbx_cmd_flags) && 1721 if (test_bit(MBX_INTR_WAIT, &ha->mbx_cmd_flags) &&
1722 (status & MBX_INTERRUPT) && ha->flags.mbox_int) { 1722 (status & MBX_INTERRUPT) && ha->flags.mbox_int) {