[SCSI] qla2xxx: Correct multiqueue offset calculations.
Signed-off-by: Andrew Vasquez <andrew.vasquez@qlogic.com> Signed-off-by: Saurav Kashyap <saurav.kashyap@qlogic.com> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
This commit is contained in:
parent
e8b8b8ad6e
commit
da9b1d5cb9
@ -527,7 +527,7 @@ qla25xx_copy_mq(struct qla_hw_data *ha, void *ptr, uint32_t **last_chain)
|
||||
uint32_t cnt, que_idx;
|
||||
uint8_t que_cnt;
|
||||
struct qla2xxx_mq_chain *mq = ptr;
|
||||
struct device_reg_25xxmq __iomem *reg;
|
||||
device_reg_t __iomem *reg;
|
||||
|
||||
if (!ha->mqenable || IS_QLA83XX(ha))
|
||||
return ptr;
|
||||
@ -541,13 +541,16 @@ qla25xx_copy_mq(struct qla_hw_data *ha, void *ptr, uint32_t **last_chain)
|
||||
ha->max_req_queues : ha->max_rsp_queues;
|
||||
mq->count = htonl(que_cnt);
|
||||
for (cnt = 0; cnt < que_cnt; cnt++) {
|
||||
reg = (struct device_reg_25xxmq __iomem *)
|
||||
(ha->mqiobase + cnt * QLA_QUE_PAGE);
|
||||
reg = ISP_QUE_REG(ha, cnt);
|
||||
que_idx = cnt * 4;
|
||||
mq->qregs[que_idx] = htonl(RD_REG_DWORD(®->req_q_in));
|
||||
mq->qregs[que_idx+1] = htonl(RD_REG_DWORD(®->req_q_out));
|
||||
mq->qregs[que_idx+2] = htonl(RD_REG_DWORD(®->rsp_q_in));
|
||||
mq->qregs[que_idx+3] = htonl(RD_REG_DWORD(®->rsp_q_out));
|
||||
mq->qregs[que_idx] =
|
||||
htonl(RD_REG_DWORD(®->isp25mq.req_q_in));
|
||||
mq->qregs[que_idx+1] =
|
||||
htonl(RD_REG_DWORD(®->isp25mq.req_q_out));
|
||||
mq->qregs[que_idx+2] =
|
||||
htonl(RD_REG_DWORD(®->isp25mq.rsp_q_in));
|
||||
mq->qregs[que_idx+3] =
|
||||
htonl(RD_REG_DWORD(®->isp25mq.rsp_q_out));
|
||||
}
|
||||
|
||||
return ptr + sizeof(struct qla2xxx_mq_chain);
|
||||
|
@ -2671,9 +2671,8 @@ struct bidi_statistics {
|
||||
#define QLA_MAX_QUEUES 256
|
||||
#define ISP_QUE_REG(ha, id) \
|
||||
((ha->mqenable || IS_QLA83XX(ha)) ? \
|
||||
((device_reg_t __iomem *)(ha->mqiobase) +\
|
||||
(QLA_QUE_PAGE * id)) :\
|
||||
((device_reg_t __iomem *)(ha->iobase)))
|
||||
((void __iomem *)ha->mqiobase + (QLA_QUE_PAGE * id)) :\
|
||||
((void __iomem *)ha->iobase))
|
||||
#define QLA_REQ_QUE_ID(tag) \
|
||||
((tag < QLA_MAX_QUEUES && tag > 0) ? tag : 0)
|
||||
#define QLA_DEFAULT_QUE_QOS 5
|
||||
|
@ -3574,7 +3574,6 @@ qla25xx_init_req_que(struct scsi_qla_host *vha, struct req_que *req)
|
||||
unsigned long flags;
|
||||
mbx_cmd_t mc;
|
||||
mbx_cmd_t *mcp = &mc;
|
||||
struct device_reg_25xxmq __iomem *reg;
|
||||
struct qla_hw_data *ha = vha->hw;
|
||||
|
||||
ql_dbg(ql_dbg_mbx + ql_dbg_verbose, vha, 0x10d3,
|
||||
@ -3595,9 +3594,6 @@ qla25xx_init_req_que(struct scsi_qla_host *vha, struct req_que *req)
|
||||
if (IS_QLA83XX(ha))
|
||||
mcp->mb[15] = 0;
|
||||
|
||||
reg = (struct device_reg_25xxmq __iomem *)((ha->mqiobase) +
|
||||
QLA_QUE_PAGE * req->id);
|
||||
|
||||
mcp->mb[4] = req->id;
|
||||
/* que in ptr index */
|
||||
mcp->mb[8] = 0;
|
||||
@ -3619,12 +3615,10 @@ qla25xx_init_req_que(struct scsi_qla_host *vha, struct req_que *req)
|
||||
|
||||
spin_lock_irqsave(&ha->hardware_lock, flags);
|
||||
if (!(req->options & BIT_0)) {
|
||||
WRT_REG_DWORD(®->req_q_in, 0);
|
||||
WRT_REG_DWORD(req->req_q_in, 0);
|
||||
if (!IS_QLA83XX(ha))
|
||||
WRT_REG_DWORD(®->req_q_out, 0);
|
||||
WRT_REG_DWORD(req->req_q_out, 0);
|
||||
}
|
||||
req->req_q_in = ®->req_q_in;
|
||||
req->req_q_out = ®->req_q_out;
|
||||
spin_unlock_irqrestore(&ha->hardware_lock, flags);
|
||||
|
||||
rval = qla2x00_mailbox_command(vha, mcp);
|
||||
@ -3646,7 +3640,6 @@ qla25xx_init_rsp_que(struct scsi_qla_host *vha, struct rsp_que *rsp)
|
||||
unsigned long flags;
|
||||
mbx_cmd_t mc;
|
||||
mbx_cmd_t *mcp = &mc;
|
||||
struct device_reg_25xxmq __iomem *reg;
|
||||
struct qla_hw_data *ha = vha->hw;
|
||||
|
||||
ql_dbg(ql_dbg_mbx + ql_dbg_verbose, vha, 0x10d6,
|
||||
@ -3664,9 +3657,6 @@ qla25xx_init_rsp_que(struct scsi_qla_host *vha, struct rsp_que *rsp)
|
||||
if (IS_QLA83XX(ha))
|
||||
mcp->mb[15] = 0;
|
||||
|
||||
reg = (struct device_reg_25xxmq __iomem *)((ha->mqiobase) +
|
||||
QLA_QUE_PAGE * rsp->id);
|
||||
|
||||
mcp->mb[4] = rsp->id;
|
||||
/* que in ptr index */
|
||||
mcp->mb[8] = 0;
|
||||
@ -3690,9 +3680,9 @@ qla25xx_init_rsp_que(struct scsi_qla_host *vha, struct rsp_que *rsp)
|
||||
|
||||
spin_lock_irqsave(&ha->hardware_lock, flags);
|
||||
if (!(rsp->options & BIT_0)) {
|
||||
WRT_REG_DWORD(®->rsp_q_out, 0);
|
||||
WRT_REG_DWORD(rsp->rsp_q_out, 0);
|
||||
if (!IS_QLA83XX(ha))
|
||||
WRT_REG_DWORD(®->rsp_q_in, 0);
|
||||
WRT_REG_DWORD(rsp->rsp_q_in, 0);
|
||||
}
|
||||
|
||||
spin_unlock_irqrestore(&ha->hardware_lock, flags);
|
||||
|
@ -699,6 +699,8 @@ qla25xx_create_req_que(struct qla_hw_data *ha, uint16_t options,
|
||||
req->cnt = req->length;
|
||||
req->id = que_id;
|
||||
reg = ISP_QUE_REG(ha, que_id);
|
||||
req->req_q_in = ®->isp25mq.req_q_in;
|
||||
req->req_q_out = ®->isp25mq.req_q_out;
|
||||
req->max_q_depth = ha->req_q_map[0]->max_q_depth;
|
||||
mutex_unlock(&ha->vport_lock);
|
||||
ql_dbg(ql_dbg_multiq, base_vha, 0xc004,
|
||||
|
Loading…
Reference in New Issue
Block a user