diff options
author | Andrew Vasquez <andrew.vasquez@qlogic.com> | 2008-05-13 01:21:09 -0400 |
---|---|---|
committer | James Bottomley <James.Bottomley@HansenPartnership.com> | 2008-05-15 11:39:28 -0400 |
commit | 0e973a24f02ed8c627271b013d69683b4497828d (patch) | |
tree | 7e65a3b5c33a7df404b7dc8e2df332377e4f275f /drivers/scsi/qla2xxx | |
parent | fd9a29f03600f306acb4faf49b92ca5472f39ee8 (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/qla2xxx')
-rw-r--r-- | drivers/scsi/qla2xxx/qla_isr.c | 8 |
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(®->hccr, HCCRX_CLR_RISC_INT); | 1645 | WRT_REG_DWORD(®->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(®->host_status); | 1668 | stat = RD_REG_DWORD(®->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(®->hccr, HCCRX_CLR_RISC_INT); | 1717 | WRT_REG_DWORD(®->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) { |