Skip to content

Commit

Permalink
[SCSI] qla2xxx: Correct locking within MSI-X interrupt handlers.
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Andrew Vasquez authored and James Bottomley committed May 15, 2008
1 parent fd9a29f commit 0e973a2
Showing 1 changed file with 4 additions and 4 deletions.
8 changes: 4 additions & 4 deletions drivers/scsi/qla2xxx/qla_isr.c
Original file line number Diff line number Diff line change
Expand Up @@ -1639,12 +1639,12 @@ qla24xx_msix_rsp_q(int irq, void *dev_id)
ha = dev_id;
reg = &ha->iobase->isp24;

spin_lock(&ha->hardware_lock);
spin_lock_irq(&ha->hardware_lock);

qla24xx_process_response_queue(ha);
WRT_REG_DWORD(&reg->hccr, HCCRX_CLR_RISC_INT);

spin_unlock(&ha->hardware_lock);
spin_unlock_irq(&ha->hardware_lock);

return IRQ_HANDLED;
}
Expand All @@ -1663,7 +1663,7 @@ qla24xx_msix_default(int irq, void *dev_id)
reg = &ha->iobase->isp24;
status = 0;

spin_lock(&ha->hardware_lock);
spin_lock_irq(&ha->hardware_lock);
do {
stat = RD_REG_DWORD(&reg->host_status);
if (stat & HSRX_RISC_PAUSED) {
Expand Down Expand Up @@ -1716,7 +1716,7 @@ qla24xx_msix_default(int irq, void *dev_id)
}
WRT_REG_DWORD(&reg->hccr, HCCRX_CLR_RISC_INT);
} while (0);
spin_unlock(&ha->hardware_lock);
spin_unlock_irq(&ha->hardware_lock);

if (test_bit(MBX_INTR_WAIT, &ha->mbx_cmd_flags) &&
(status & MBX_INTERRUPT) && ha->flags.mbox_int) {
Expand Down

0 comments on commit 0e973a2

Please sign in to comment.