aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Vasquez <andrew.vasquez@qlogic.com>2013-08-27 01:37:30 -0400
committerJames Bottomley <JBottomley@Parallels.com>2013-09-03 10:28:01 -0400
commitda9b1d5cb9d408a1e634740c849187bc031929db (patch)
tree04c33b4fa27f07316c8f3ca5ccf0b913266aef6d
parente8b8b8ad6e5218e2073a9dddcd9f97d6b4fc514e (diff)
[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>
-rw-r--r--drivers/scsi/qla2xxx/qla_dbg.c17
-rw-r--r--drivers/scsi/qla2xxx/qla_def.h5
-rw-r--r--drivers/scsi/qla2xxx/qla_mbx.c18
-rw-r--r--drivers/scsi/qla2xxx/qla_mid.c2
4 files changed, 18 insertions, 24 deletions
diff --git a/drivers/scsi/qla2xxx/qla_dbg.c b/drivers/scsi/qla2xxx/qla_dbg.c
index 6ed98f933719..aa10109d5e33 100644
--- a/drivers/scsi/qla2xxx/qla_dbg.c
+++ b/drivers/scsi/qla2xxx/qla_dbg.c
@@ -527,7 +527,7 @@ qla25xx_copy_mq(struct qla_hw_data *ha, void *ptr, uint32_t **last_chain)
527 uint32_t cnt, que_idx; 527 uint32_t cnt, que_idx;
528 uint8_t que_cnt; 528 uint8_t que_cnt;
529 struct qla2xxx_mq_chain *mq = ptr; 529 struct qla2xxx_mq_chain *mq = ptr;
530 struct device_reg_25xxmq __iomem *reg; 530 device_reg_t __iomem *reg;
531 531
532 if (!ha->mqenable || IS_QLA83XX(ha)) 532 if (!ha->mqenable || IS_QLA83XX(ha))
533 return ptr; 533 return ptr;
@@ -541,13 +541,16 @@ qla25xx_copy_mq(struct qla_hw_data *ha, void *ptr, uint32_t **last_chain)
541 ha->max_req_queues : ha->max_rsp_queues; 541 ha->max_req_queues : ha->max_rsp_queues;
542 mq->count = htonl(que_cnt); 542 mq->count = htonl(que_cnt);
543 for (cnt = 0; cnt < que_cnt; cnt++) { 543 for (cnt = 0; cnt < que_cnt; cnt++) {
544 reg = (struct device_reg_25xxmq __iomem *) 544 reg = ISP_QUE_REG(ha, cnt);
545 (ha->mqiobase + cnt * QLA_QUE_PAGE);
546 que_idx = cnt * 4; 545 que_idx = cnt * 4;
547 mq->qregs[que_idx] = htonl(RD_REG_DWORD(&reg->req_q_in)); 546 mq->qregs[que_idx] =
548 mq->qregs[que_idx+1] = htonl(RD_REG_DWORD(&reg->req_q_out)); 547 htonl(RD_REG_DWORD(&reg->isp25mq.req_q_in));
549 mq->qregs[que_idx+2] = htonl(RD_REG_DWORD(&reg->rsp_q_in)); 548 mq->qregs[que_idx+1] =
550 mq->qregs[que_idx+3] = htonl(RD_REG_DWORD(&reg->rsp_q_out)); 549 htonl(RD_REG_DWORD(&reg->isp25mq.req_q_out));
550 mq->qregs[que_idx+2] =
551 htonl(RD_REG_DWORD(&reg->isp25mq.rsp_q_in));
552 mq->qregs[que_idx+3] =
553 htonl(RD_REG_DWORD(&reg->isp25mq.rsp_q_out));
551 } 554 }
552 555
553 return ptr + sizeof(struct qla2xxx_mq_chain); 556 return ptr + sizeof(struct qla2xxx_mq_chain);
diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h
index c0a1a713b564..d675860397f6 100644
--- a/drivers/scsi/qla2xxx/qla_def.h
+++ b/drivers/scsi/qla2xxx/qla_def.h
@@ -2671,9 +2671,8 @@ struct bidi_statistics {
2671#define QLA_MAX_QUEUES 256 2671#define QLA_MAX_QUEUES 256
2672#define ISP_QUE_REG(ha, id) \ 2672#define ISP_QUE_REG(ha, id) \
2673 ((ha->mqenable || IS_QLA83XX(ha)) ? \ 2673 ((ha->mqenable || IS_QLA83XX(ha)) ? \
2674 ((device_reg_t __iomem *)(ha->mqiobase) +\ 2674 ((void __iomem *)ha->mqiobase + (QLA_QUE_PAGE * id)) :\
2675 (QLA_QUE_PAGE * id)) :\ 2675 ((void __iomem *)ha->iobase))
2676 ((device_reg_t __iomem *)(ha->iobase)))
2677#define QLA_REQ_QUE_ID(tag) \ 2676#define QLA_REQ_QUE_ID(tag) \
2678 ((tag < QLA_MAX_QUEUES && tag > 0) ? tag : 0) 2677 ((tag < QLA_MAX_QUEUES && tag > 0) ? tag : 0)
2679#define QLA_DEFAULT_QUE_QOS 5 2678#define QLA_DEFAULT_QUE_QOS 5
diff --git a/drivers/scsi/qla2xxx/qla_mbx.c b/drivers/scsi/qla2xxx/qla_mbx.c
index 98e8a16edacd..bce41f4fc5fa 100644
--- a/drivers/scsi/qla2xxx/qla_mbx.c
+++ b/drivers/scsi/qla2xxx/qla_mbx.c
@@ -3574,7 +3574,6 @@ qla25xx_init_req_que(struct scsi_qla_host *vha, struct req_que *req)
3574 unsigned long flags; 3574 unsigned long flags;
3575 mbx_cmd_t mc; 3575 mbx_cmd_t mc;
3576 mbx_cmd_t *mcp = &mc; 3576 mbx_cmd_t *mcp = &mc;
3577 struct device_reg_25xxmq __iomem *reg;
3578 struct qla_hw_data *ha = vha->hw; 3577 struct qla_hw_data *ha = vha->hw;
3579 3578
3580 ql_dbg(ql_dbg_mbx + ql_dbg_verbose, vha, 0x10d3, 3579 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)
3595 if (IS_QLA83XX(ha)) 3594 if (IS_QLA83XX(ha))
3596 mcp->mb[15] = 0; 3595 mcp->mb[15] = 0;
3597 3596
3598 reg = (struct device_reg_25xxmq __iomem *)((ha->mqiobase) +
3599 QLA_QUE_PAGE * req->id);
3600
3601 mcp->mb[4] = req->id; 3597 mcp->mb[4] = req->id;
3602 /* que in ptr index */ 3598 /* que in ptr index */
3603 mcp->mb[8] = 0; 3599 mcp->mb[8] = 0;
@@ -3619,12 +3615,10 @@ qla25xx_init_req_que(struct scsi_qla_host *vha, struct req_que *req)
3619 3615
3620 spin_lock_irqsave(&ha->hardware_lock, flags); 3616 spin_lock_irqsave(&ha->hardware_lock, flags);
3621 if (!(req->options & BIT_0)) { 3617 if (!(req->options & BIT_0)) {
3622 WRT_REG_DWORD(&reg->req_q_in, 0); 3618 WRT_REG_DWORD(req->req_q_in, 0);
3623 if (!IS_QLA83XX(ha)) 3619 if (!IS_QLA83XX(ha))
3624 WRT_REG_DWORD(&reg->req_q_out, 0); 3620 WRT_REG_DWORD(req->req_q_out, 0);
3625 } 3621 }
3626 req->req_q_in = &reg->req_q_in;
3627 req->req_q_out = &reg->req_q_out;
3628 spin_unlock_irqrestore(&ha->hardware_lock, flags); 3622 spin_unlock_irqrestore(&ha->hardware_lock, flags);
3629 3623
3630 rval = qla2x00_mailbox_command(vha, mcp); 3624 rval = qla2x00_mailbox_command(vha, mcp);
@@ -3646,7 +3640,6 @@ qla25xx_init_rsp_que(struct scsi_qla_host *vha, struct rsp_que *rsp)
3646 unsigned long flags; 3640 unsigned long flags;
3647 mbx_cmd_t mc; 3641 mbx_cmd_t mc;
3648 mbx_cmd_t *mcp = &mc; 3642 mbx_cmd_t *mcp = &mc;
3649 struct device_reg_25xxmq __iomem *reg;
3650 struct qla_hw_data *ha = vha->hw; 3643 struct qla_hw_data *ha = vha->hw;
3651 3644
3652 ql_dbg(ql_dbg_mbx + ql_dbg_verbose, vha, 0x10d6, 3645 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)
3664 if (IS_QLA83XX(ha)) 3657 if (IS_QLA83XX(ha))
3665 mcp->mb[15] = 0; 3658 mcp->mb[15] = 0;
3666 3659
3667 reg = (struct device_reg_25xxmq __iomem *)((ha->mqiobase) +
3668 QLA_QUE_PAGE * rsp->id);
3669
3670 mcp->mb[4] = rsp->id; 3660 mcp->mb[4] = rsp->id;
3671 /* que in ptr index */ 3661 /* que in ptr index */
3672 mcp->mb[8] = 0; 3662 mcp->mb[8] = 0;
@@ -3690,9 +3680,9 @@ qla25xx_init_rsp_que(struct scsi_qla_host *vha, struct rsp_que *rsp)
3690 3680
3691 spin_lock_irqsave(&ha->hardware_lock, flags); 3681 spin_lock_irqsave(&ha->hardware_lock, flags);
3692 if (!(rsp->options & BIT_0)) { 3682 if (!(rsp->options & BIT_0)) {
3693 WRT_REG_DWORD(&reg->rsp_q_out, 0); 3683 WRT_REG_DWORD(rsp->rsp_q_out, 0);
3694 if (!IS_QLA83XX(ha)) 3684 if (!IS_QLA83XX(ha))
3695 WRT_REG_DWORD(&reg->rsp_q_in, 0); 3685 WRT_REG_DWORD(rsp->rsp_q_in, 0);
3696 } 3686 }
3697 3687
3698 spin_unlock_irqrestore(&ha->hardware_lock, flags); 3688 spin_unlock_irqrestore(&ha->hardware_lock, flags);
diff --git a/drivers/scsi/qla2xxx/qla_mid.c b/drivers/scsi/qla2xxx/qla_mid.c
index f868a9f98afe..a72df701fb38 100644
--- a/drivers/scsi/qla2xxx/qla_mid.c
+++ b/drivers/scsi/qla2xxx/qla_mid.c
@@ -699,6 +699,8 @@ qla25xx_create_req_que(struct qla_hw_data *ha, uint16_t options,
699 req->cnt = req->length; 699 req->cnt = req->length;
700 req->id = que_id; 700 req->id = que_id;
701 reg = ISP_QUE_REG(ha, que_id); 701 reg = ISP_QUE_REG(ha, que_id);
702 req->req_q_in = &reg->isp25mq.req_q_in;
703 req->req_q_out = &reg->isp25mq.req_q_out;
702 req->max_q_depth = ha->req_q_map[0]->max_q_depth; 704 req->max_q_depth = ha->req_q_map[0]->max_q_depth;
703 mutex_unlock(&ha->vport_lock); 705 mutex_unlock(&ha->vport_lock);
704 ql_dbg(ql_dbg_multiq, base_vha, 0xc004, 706 ql_dbg(ql_dbg_multiq, base_vha, 0xc004,