mirror of
https://github.com/torvalds/linux.git
synced 2024-11-02 02:01:29 +00:00
[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>
This commit is contained in:
parent
fd9a29f036
commit
0e973a24f0
@ -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(®->hccr, HCCRX_CLR_RISC_INT);
|
||||
|
||||
spin_unlock(&ha->hardware_lock);
|
||||
spin_unlock_irq(&ha->hardware_lock);
|
||||
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
@ -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(®->host_status);
|
||||
if (stat & HSRX_RISC_PAUSED) {
|
||||
@ -1716,7 +1716,7 @@ qla24xx_msix_default(int irq, void *dev_id)
|
||||
}
|
||||
WRT_REG_DWORD(®->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) {
|
||||
|
Loading…
Reference in New Issue
Block a user