|
@@ -1917,6 +1917,7 @@ qla24xx_msix_rsp_q(int irq, void *dev_id)
|
|
|
struct rsp_que *rsp;
|
|
|
struct device_reg_24xx __iomem *reg;
|
|
|
struct scsi_qla_host *vha;
|
|
|
+ unsigned long flags;
|
|
|
|
|
|
rsp = (struct rsp_que *) dev_id;
|
|
|
if (!rsp) {
|
|
@@ -1927,7 +1928,7 @@ qla24xx_msix_rsp_q(int irq, void *dev_id)
|
|
|
ha = rsp->hw;
|
|
|
reg = &ha->iobase->isp24;
|
|
|
|
|
|
- spin_lock_irq(&ha->hardware_lock);
|
|
|
+ spin_lock_irqsave(&ha->hardware_lock, flags);
|
|
|
|
|
|
vha = qla25xx_get_host(rsp);
|
|
|
qla24xx_process_response_queue(vha, rsp);
|
|
@@ -1935,7 +1936,7 @@ qla24xx_msix_rsp_q(int irq, void *dev_id)
|
|
|
WRT_REG_DWORD(®->hccr, HCCRX_CLR_RISC_INT);
|
|
|
RD_REG_DWORD_RELAXED(®->hccr);
|
|
|
}
|
|
|
- spin_unlock_irq(&ha->hardware_lock);
|
|
|
+ spin_unlock_irqrestore(&ha->hardware_lock, flags);
|
|
|
|
|
|
return IRQ_HANDLED;
|
|
|
}
|
|
@@ -1946,6 +1947,7 @@ qla25xx_msix_rsp_q(int irq, void *dev_id)
|
|
|
struct qla_hw_data *ha;
|
|
|
struct rsp_que *rsp;
|
|
|
struct device_reg_24xx __iomem *reg;
|
|
|
+ unsigned long flags;
|
|
|
|
|
|
rsp = (struct rsp_que *) dev_id;
|
|
|
if (!rsp) {
|
|
@@ -1958,10 +1960,10 @@ qla25xx_msix_rsp_q(int irq, void *dev_id)
|
|
|
/* Clear the interrupt, if enabled, for this response queue */
|
|
|
if (rsp->options & ~BIT_6) {
|
|
|
reg = &ha->iobase->isp24;
|
|
|
- spin_lock_irq(&ha->hardware_lock);
|
|
|
+ spin_lock_irqsave(&ha->hardware_lock, flags);
|
|
|
WRT_REG_DWORD(®->hccr, HCCRX_CLR_RISC_INT);
|
|
|
RD_REG_DWORD_RELAXED(®->hccr);
|
|
|
- spin_unlock_irq(&ha->hardware_lock);
|
|
|
+ spin_unlock_irqrestore(&ha->hardware_lock, flags);
|
|
|
}
|
|
|
queue_work_on((int) (rsp->id - 1), ha->wq, &rsp->q_work);
|
|
|
|
|
@@ -1979,6 +1981,7 @@ qla24xx_msix_default(int irq, void *dev_id)
|
|
|
uint32_t stat;
|
|
|
uint32_t hccr;
|
|
|
uint16_t mb[4];
|
|
|
+ unsigned long flags;
|
|
|
|
|
|
rsp = (struct rsp_que *) dev_id;
|
|
|
if (!rsp) {
|
|
@@ -1990,7 +1993,7 @@ qla24xx_msix_default(int irq, void *dev_id)
|
|
|
reg = &ha->iobase->isp24;
|
|
|
status = 0;
|
|
|
|
|
|
- spin_lock_irq(&ha->hardware_lock);
|
|
|
+ spin_lock_irqsave(&ha->hardware_lock, flags);
|
|
|
vha = pci_get_drvdata(ha->pdev);
|
|
|
do {
|
|
|
stat = RD_REG_DWORD(®->host_status);
|
|
@@ -2039,7 +2042,7 @@ qla24xx_msix_default(int irq, void *dev_id)
|
|
|
}
|
|
|
WRT_REG_DWORD(®->hccr, HCCRX_CLR_RISC_INT);
|
|
|
} while (0);
|
|
|
- spin_unlock_irq(&ha->hardware_lock);
|
|
|
+ spin_unlock_irqrestore(&ha->hardware_lock, flags);
|
|
|
|
|
|
if (test_bit(MBX_INTR_WAIT, &ha->mbx_cmd_flags) &&
|
|
|
(status & MBX_INTERRUPT) && ha->flags.mbox_int) {
|