Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0e973a24 authored by Andrew Vasquez's avatar Andrew Vasquez Committed by James Bottomley
Browse files

[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: default avatarAndrew Vasquez <andrew.vasquez@qlogic.com>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@HansenPartnership.com>
parent fd9a29f0
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -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;
}
@@ -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) {
@@ -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) {