aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/scsi')
-rw-r--r--drivers/scsi/qla4xxx/ql4_isr.c15
-rw-r--r--drivers/scsi/qla4xxx/ql4_mbx.c3
-rw-r--r--drivers/scsi/qla4xxx/ql4_nx.c4
3 files changed, 16 insertions, 6 deletions
diff --git a/drivers/scsi/qla4xxx/ql4_isr.c b/drivers/scsi/qla4xxx/ql4_isr.c
index 49032f640da1..df3fd9b4561e 100644
--- a/drivers/scsi/qla4xxx/ql4_isr.c
+++ b/drivers/scsi/qla4xxx/ql4_isr.c
@@ -1022,7 +1022,8 @@ void qla4_82xx_interrupt_service_routine(struct scsi_qla_host *ha,
1022 uint32_t intr_status) 1022 uint32_t intr_status)
1023{ 1023{
1024 /* Process response queue interrupt. */ 1024 /* Process response queue interrupt. */
1025 if (intr_status & HSRX_RISC_IOCB_INT) 1025 if ((intr_status & HSRX_RISC_IOCB_INT) &&
1026 test_bit(AF_INIT_DONE, &ha->flags))
1026 qla4xxx_process_response_queue(ha); 1027 qla4xxx_process_response_queue(ha);
1027 1028
1028 /* Process mailbox/asynch event interrupt.*/ 1029 /* Process mailbox/asynch event interrupt.*/
@@ -1399,6 +1400,7 @@ qla4_8xxx_msix_rsp_q(int irq, void *dev_id)
1399{ 1400{
1400 struct scsi_qla_host *ha = dev_id; 1401 struct scsi_qla_host *ha = dev_id;
1401 unsigned long flags; 1402 unsigned long flags;
1403 int intr_status;
1402 uint32_t ival = 0; 1404 uint32_t ival = 0;
1403 1405
1404 spin_lock_irqsave(&ha->hardware_lock, flags); 1406 spin_lock_irqsave(&ha->hardware_lock, flags);
@@ -1412,8 +1414,15 @@ qla4_8xxx_msix_rsp_q(int irq, void *dev_id)
1412 qla4xxx_process_response_queue(ha); 1414 qla4xxx_process_response_queue(ha);
1413 writel(0, &ha->qla4_83xx_reg->iocb_int_mask); 1415 writel(0, &ha->qla4_83xx_reg->iocb_int_mask);
1414 } else { 1416 } else {
1415 qla4xxx_process_response_queue(ha); 1417 intr_status = readl(&ha->qla4_82xx_reg->host_status);
1416 writel(0, &ha->qla4_82xx_reg->host_int); 1418 if (intr_status & HSRX_RISC_IOCB_INT) {
1419 qla4xxx_process_response_queue(ha);
1420 writel(0, &ha->qla4_82xx_reg->host_int);
1421 } else {
1422 ql4_printk(KERN_INFO, ha, "%s: spurious iocb interrupt...\n",
1423 __func__);
1424 goto exit_msix_rsp_q;
1425 }
1417 } 1426 }
1418 ha->isr_count++; 1427 ha->isr_count++;
1419exit_msix_rsp_q: 1428exit_msix_rsp_q:
diff --git a/drivers/scsi/qla4xxx/ql4_mbx.c b/drivers/scsi/qla4xxx/ql4_mbx.c
index 6905bad3e15c..52c0a48ab41f 100644
--- a/drivers/scsi/qla4xxx/ql4_mbx.c
+++ b/drivers/scsi/qla4xxx/ql4_mbx.c
@@ -648,9 +648,6 @@ int qla4xxx_initialize_fw_cb(struct scsi_qla_host * ha)
648 goto exit_init_fw_cb; 648 goto exit_init_fw_cb;
649 } 649 }
650 650
651 /* Initialize request and response queues. */
652 qla4xxx_init_rings(ha);
653
654 /* Fill in the request and response queue information. */ 651 /* Fill in the request and response queue information. */
655 init_fw_cb->rqq_consumer_idx = cpu_to_le16(ha->request_out); 652 init_fw_cb->rqq_consumer_idx = cpu_to_le16(ha->request_out);
656 init_fw_cb->compq_producer_idx = cpu_to_le16(ha->response_in); 653 init_fw_cb->compq_producer_idx = cpu_to_le16(ha->response_in);
diff --git a/drivers/scsi/qla4xxx/ql4_nx.c b/drivers/scsi/qla4xxx/ql4_nx.c
index cbc68f915cc6..bcf3e43e024a 100644
--- a/drivers/scsi/qla4xxx/ql4_nx.c
+++ b/drivers/scsi/qla4xxx/ql4_nx.c
@@ -3190,6 +3190,10 @@ int qla4_8xxx_load_risc(struct scsi_qla_host *ha)
3190 3190
3191 retval = qla4_8xxx_device_state_handler(ha); 3191 retval = qla4_8xxx_device_state_handler(ha);
3192 3192
3193 /* Initialize request and response queues. */
3194 if (retval == QLA_SUCCESS)
3195 qla4xxx_init_rings(ha);
3196
3193 if (retval == QLA_SUCCESS && !test_bit(AF_IRQ_ATTACHED, &ha->flags)) 3197 if (retval == QLA_SUCCESS && !test_bit(AF_IRQ_ATTACHED, &ha->flags))
3194 retval = qla4xxx_request_irqs(ha); 3198 retval = qla4xxx_request_irqs(ha);
3195 3199