diff options
author | Anirban Chakraborty <anirban.chakraborty@qlogic.com> | 2008-12-18 13:06:15 -0500 |
---|---|---|
committer | James Bottomley <James.Bottomley@HansenPartnership.com> | 2008-12-29 12:24:35 -0500 |
commit | 17d98630a4f2a38537618503ad0c7ec97ba461ca (patch) | |
tree | 27deaa971e7b3a95a56a0ba5cf4c92e12853a775 /drivers/scsi/qla2xxx/qla_isr.c | |
parent | 20c09df7eb9c92a40e0ecf654b6e8f14c8583b9e (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.c | 22 |
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 | |||
1446 | qla24xx_process_response_queue(struct rsp_que *rsp) | 1446 | qla24xx_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(®->isp25mq.rsp_q_out, rsp->ring_index); | ||
1505 | else | ||
1506 | WRT_REG_DWORD(®->isp24.rsp_q_out, rsp->ring_index); | ||
1507 | } | 1503 | } |
1508 | 1504 | ||
1509 | static void | 1505 | static 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 | ||
2076 | void | ||
2077 | qla25xx_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(®->isp25mq.rsp_q_out, index); | ||
2081 | } | ||
2082 | |||
2083 | void | ||
2084 | qla24xx_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(®->isp24.rsp_q_out, index); | ||
2088 | } | ||
2089 | |||