aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/qla2xxx/qla_isr.c
diff options
context:
space:
mode:
authorAnirban Chakraborty <anirban.chakraborty@qlogic.com>2008-12-18 13:06:15 -0500
committerJames Bottomley <James.Bottomley@HansenPartnership.com>2008-12-29 12:24:35 -0500
commit17d98630a4f2a38537618503ad0c7ec97ba461ca (patch)
tree27deaa971e7b3a95a56a0ba5cf4c92e12853a775 /drivers/scsi/qla2xxx/qla_isr.c
parent20c09df7eb9c92a40e0ecf654b6e8f14c8583b9e (diff)
[SCSI] qla2xxx: changes in multiq code
Following changes have been made: 1. Scan outstanding commands only in the queue where it is submitted 2. Update queue registers directly in the fast path 3. Queue specific BAR is remapped only for multiq capable adapters Signed-off-by: Anirban Chakraborty <anirban.chakraborty@qlogic.com> Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Diffstat (limited to 'drivers/scsi/qla2xxx/qla_isr.c')
-rw-r--r--drivers/scsi/qla2xxx/qla_isr.c22
1 files changed, 16 insertions, 6 deletions
diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c
index eb4b43d7697f..d5fb79a88001 100644
--- a/drivers/scsi/qla2xxx/qla_isr.c
+++ b/drivers/scsi/qla2xxx/qla_isr.c
@@ -1446,7 +1446,6 @@ void
1446qla24xx_process_response_queue(struct rsp_que *rsp) 1446qla24xx_process_response_queue(struct rsp_que *rsp)
1447{ 1447{
1448 struct qla_hw_data *ha = rsp->hw; 1448 struct qla_hw_data *ha = rsp->hw;
1449 device_reg_t __iomem *reg = ISP_QUE_REG(ha, rsp->id);
1450 struct sts_entry_24xx *pkt; 1449 struct sts_entry_24xx *pkt;
1451 struct scsi_qla_host *vha; 1450 struct scsi_qla_host *vha;
1452 1451
@@ -1500,10 +1499,7 @@ qla24xx_process_response_queue(struct rsp_que *rsp)
1500 } 1499 }
1501 1500
1502 /* Adjust ring index */ 1501 /* Adjust ring index */
1503 if (ha->mqenable) 1502 ha->isp_ops->wrt_rsp_reg(ha, rsp->id, rsp->ring_index);
1504 WRT_REG_DWORD(&reg->isp25mq.rsp_q_out, rsp->ring_index);
1505 else
1506 WRT_REG_DWORD(&reg->isp24.rsp_q_out, rsp->ring_index);
1507} 1503}
1508 1504
1509static void 1505static void
@@ -1702,7 +1698,7 @@ qla25xx_msix_rsp_q(int irq, void *dev_id)
1702 if (!rsp->id) 1698 if (!rsp->id)
1703 msix_disabled_hccr &= __constant_cpu_to_le32(BIT_22); 1699 msix_disabled_hccr &= __constant_cpu_to_le32(BIT_22);
1704 else 1700 else
1705 msix_disabled_hccr &= BIT_6; 1701 msix_disabled_hccr &= __constant_cpu_to_le32(BIT_6);
1706 1702
1707 qla24xx_process_response_queue(rsp); 1703 qla24xx_process_response_queue(rsp);
1708 1704
@@ -2077,3 +2073,17 @@ int qla25xx_request_irq(struct rsp_que *rsp)
2077 return ret; 2073 return ret;
2078} 2074}
2079 2075
2076void
2077qla25xx_wrt_rsp_reg(struct qla_hw_data *ha, uint16_t id, uint16_t index)
2078{
2079 device_reg_t __iomem *reg = (void *) ha->mqiobase + QLA_QUE_PAGE * id;
2080 WRT_REG_DWORD(&reg->isp25mq.rsp_q_out, index);
2081}
2082
2083void
2084qla24xx_wrt_rsp_reg(struct qla_hw_data *ha, uint16_t id, uint16_t index)
2085{
2086 device_reg_t __iomem *reg = (void *) ha->iobase;
2087 WRT_REG_DWORD(&reg->isp24.rsp_q_out, index);
2088}
2089