diff options
author | Andrew Vasquez <andrew.vasquez@qlogic.com> | 2009-01-05 14:18:10 -0500 |
---|---|---|
committer | James Bottomley <James.Bottomley@HansenPartnership.com> | 2009-01-07 16:51:20 -0500 |
commit | 444786d7fdd770f67e29a068ec8ee981d323f7a7 (patch) | |
tree | 48532938e4056e980c64c3a5679798b9818d50b2 /drivers | |
parent | d63ab53394f408f9e59f5b6ba0580f8c6ef2357a (diff) |
[SCSI] qla2xxx: Use proper request/response queues with MQ instantiations.
Original code would inadvertanly place I/Os on the default
request-queue. Also, correctly pass in the proper MSI-X vector
during response-queue initialization.
Signed-off-by: Andrew Vasquez <andrew.vasquez@qlogic.com>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/scsi/qla2xxx/qla_def.h | 1 | ||||
-rw-r--r-- | drivers/scsi/qla2xxx/qla_iocb.c | 12 | ||||
-rw-r--r-- | drivers/scsi/qla2xxx/qla_isr.c | 2 | ||||
-rw-r--r-- | drivers/scsi/qla2xxx/qla_mbx.c | 2 | ||||
-rw-r--r-- | drivers/scsi/qla2xxx/qla_mid.c | 4 | ||||
-rw-r--r-- | drivers/scsi/qla2xxx/qla_os.c | 3 |
6 files changed, 11 insertions, 13 deletions
diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h index c8e5af5f56a7..6b3762243689 100644 --- a/drivers/scsi/qla2xxx/qla_def.h +++ b/drivers/scsi/qla2xxx/qla_def.h | |||
@@ -187,7 +187,6 @@ struct req_que; | |||
187 | * SCSI Request Block | 187 | * SCSI Request Block |
188 | */ | 188 | */ |
189 | typedef struct srb { | 189 | typedef struct srb { |
190 | struct scsi_qla_host *vha; /* HA the SP is queued on */ | ||
191 | struct req_que *que; | 190 | struct req_que *que; |
192 | struct fc_port *fcport; | 191 | struct fc_port *fcport; |
193 | 192 | ||
diff --git a/drivers/scsi/qla2xxx/qla_iocb.c b/drivers/scsi/qla2xxx/qla_iocb.c index 5bedc9d05942..2258152b1f41 100644 --- a/drivers/scsi/qla2xxx/qla_iocb.c +++ b/drivers/scsi/qla2xxx/qla_iocb.c | |||
@@ -173,7 +173,7 @@ void qla2x00_build_scsi_iocbs_32(srb_t *sp, cmd_entry_t *cmd_pkt, | |||
173 | return; | 173 | return; |
174 | } | 174 | } |
175 | 175 | ||
176 | vha = sp->vha; | 176 | vha = sp->fcport->vha; |
177 | req = sp->que; | 177 | req = sp->que; |
178 | 178 | ||
179 | cmd_pkt->control_flags |= cpu_to_le16(qla2x00_get_cmd_direction(sp)); | 179 | cmd_pkt->control_flags |= cpu_to_le16(qla2x00_get_cmd_direction(sp)); |
@@ -234,7 +234,7 @@ void qla2x00_build_scsi_iocbs_64(srb_t *sp, cmd_entry_t *cmd_pkt, | |||
234 | return; | 234 | return; |
235 | } | 235 | } |
236 | 236 | ||
237 | vha = sp->vha; | 237 | vha = sp->fcport->vha; |
238 | req = sp->que; | 238 | req = sp->que; |
239 | 239 | ||
240 | cmd_pkt->control_flags |= cpu_to_le16(qla2x00_get_cmd_direction(sp)); | 240 | cmd_pkt->control_flags |= cpu_to_le16(qla2x00_get_cmd_direction(sp)); |
@@ -294,7 +294,7 @@ qla2x00_start_scsi(srb_t *sp) | |||
294 | 294 | ||
295 | /* Setup device pointers. */ | 295 | /* Setup device pointers. */ |
296 | ret = 0; | 296 | ret = 0; |
297 | vha = sp->vha; | 297 | vha = sp->fcport->vha; |
298 | ha = vha->hw; | 298 | ha = vha->hw; |
299 | reg = &ha->iobase->isp; | 299 | reg = &ha->iobase->isp; |
300 | cmd = sp->cmd; | 300 | cmd = sp->cmd; |
@@ -353,7 +353,6 @@ qla2x00_start_scsi(srb_t *sp) | |||
353 | /* Build command packet */ | 353 | /* Build command packet */ |
354 | req->current_outstanding_cmd = handle; | 354 | req->current_outstanding_cmd = handle; |
355 | req->outstanding_cmds[handle] = sp; | 355 | req->outstanding_cmds[handle] = sp; |
356 | sp->vha = vha; | ||
357 | sp->que = req; | 356 | sp->que = req; |
358 | sp->cmd->host_scribble = (unsigned char *)(unsigned long)handle; | 357 | sp->cmd->host_scribble = (unsigned char *)(unsigned long)handle; |
359 | req->cnt -= req_cnt; | 358 | req->cnt -= req_cnt; |
@@ -656,7 +655,7 @@ qla24xx_build_scsi_iocbs(srb_t *sp, struct cmd_type_7 *cmd_pkt, | |||
656 | return; | 655 | return; |
657 | } | 656 | } |
658 | 657 | ||
659 | vha = sp->vha; | 658 | vha = sp->fcport->vha; |
660 | req = sp->que; | 659 | req = sp->que; |
661 | 660 | ||
662 | /* Set transfer direction */ | 661 | /* Set transfer direction */ |
@@ -723,7 +722,7 @@ qla24xx_start_scsi(srb_t *sp) | |||
723 | struct req_que *req = NULL; | 722 | struct req_que *req = NULL; |
724 | struct rsp_que *rsp = NULL; | 723 | struct rsp_que *rsp = NULL; |
725 | struct scsi_cmnd *cmd = sp->cmd; | 724 | struct scsi_cmnd *cmd = sp->cmd; |
726 | struct scsi_qla_host *vha = sp->vha; | 725 | struct scsi_qla_host *vha = sp->fcport->vha; |
727 | struct qla_hw_data *ha = vha->hw; | 726 | struct qla_hw_data *ha = vha->hw; |
728 | uint16_t que_id; | 727 | uint16_t que_id; |
729 | 728 | ||
@@ -791,7 +790,6 @@ qla24xx_start_scsi(srb_t *sp) | |||
791 | /* Build command packet. */ | 790 | /* Build command packet. */ |
792 | req->current_outstanding_cmd = handle; | 791 | req->current_outstanding_cmd = handle; |
793 | req->outstanding_cmds[handle] = sp; | 792 | req->outstanding_cmds[handle] = sp; |
794 | sp->vha = vha; | ||
795 | sp->cmd->host_scribble = (unsigned char *)(unsigned long)handle; | 793 | sp->cmd->host_scribble = (unsigned char *)(unsigned long)handle; |
796 | req->cnt -= req_cnt; | 794 | req->cnt -= req_cnt; |
797 | 795 | ||
diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c index 5ff6f9453c0f..dcfec7429cc7 100644 --- a/drivers/scsi/qla2xxx/qla_isr.c +++ b/drivers/scsi/qla2xxx/qla_isr.c | |||
@@ -2026,7 +2026,7 @@ qla2x00_get_rsp_host(struct rsp_que *rsp) | |||
2026 | if (pkt && pkt->handle < MAX_OUTSTANDING_COMMANDS) { | 2026 | if (pkt && pkt->handle < MAX_OUTSTANDING_COMMANDS) { |
2027 | sp = req->outstanding_cmds[pkt->handle]; | 2027 | sp = req->outstanding_cmds[pkt->handle]; |
2028 | if (sp) | 2028 | if (sp) |
2029 | vha = sp->vha; | 2029 | vha = sp->fcport->vha; |
2030 | } | 2030 | } |
2031 | } | 2031 | } |
2032 | if (!vha) | 2032 | if (!vha) |
diff --git a/drivers/scsi/qla2xxx/qla_mbx.c b/drivers/scsi/qla2xxx/qla_mbx.c index 29bf8bc8731a..4cb679146126 100644 --- a/drivers/scsi/qla2xxx/qla_mbx.c +++ b/drivers/scsi/qla2xxx/qla_mbx.c | |||
@@ -3145,7 +3145,7 @@ qla25xx_init_rsp_que(struct scsi_qla_host *vha, struct rsp_que *rsp, | |||
3145 | mcp->mb[7] = LSW(MSD(rsp->dma)); | 3145 | mcp->mb[7] = LSW(MSD(rsp->dma)); |
3146 | mcp->mb[5] = rsp->length; | 3146 | mcp->mb[5] = rsp->length; |
3147 | mcp->mb[11] = rsp->vp_idx; | 3147 | mcp->mb[11] = rsp->vp_idx; |
3148 | mcp->mb[14] = rsp->msix->vector; | 3148 | mcp->mb[14] = rsp->msix->entry; |
3149 | mcp->mb[13] = rsp->rid; | 3149 | mcp->mb[13] = rsp->rid; |
3150 | 3150 | ||
3151 | reg = (struct device_reg_25xxmq *)((void *)(ha->mqiobase) + | 3151 | reg = (struct device_reg_25xxmq *)((void *)(ha->mqiobase) + |
diff --git a/drivers/scsi/qla2xxx/qla_mid.c b/drivers/scsi/qla2xxx/qla_mid.c index 386ffeae5b5a..886323130fcc 100644 --- a/drivers/scsi/qla2xxx/qla_mid.c +++ b/drivers/scsi/qla2xxx/qla_mid.c | |||
@@ -614,8 +614,10 @@ qla25xx_create_req_que(struct qla_hw_data *ha, uint16_t options, | |||
614 | req->vp_idx = vp_idx; | 614 | req->vp_idx = vp_idx; |
615 | req->qos = qos; | 615 | req->qos = qos; |
616 | 616 | ||
617 | if (ha->rsp_q_map[rsp_que]) | 617 | if (ha->rsp_q_map[rsp_que]) { |
618 | req->rsp = ha->rsp_q_map[rsp_que]; | 618 | req->rsp = ha->rsp_q_map[rsp_que]; |
619 | req->rsp->req = req; | ||
620 | } | ||
619 | /* Use alternate PCI bus number */ | 621 | /* Use alternate PCI bus number */ |
620 | if (MSB(req->rid)) | 622 | if (MSB(req->rid)) |
621 | options |= BIT_4; | 623 | options |= BIT_4; |
diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c index 3580c034ab0a..1b475c5fa6f4 100644 --- a/drivers/scsi/qla2xxx/qla_os.c +++ b/drivers/scsi/qla2xxx/qla_os.c | |||
@@ -438,7 +438,6 @@ qla2x00_get_new_sp(scsi_qla_host_t *vha, fc_port_t *fcport, | |||
438 | if (!sp) | 438 | if (!sp) |
439 | return sp; | 439 | return sp; |
440 | 440 | ||
441 | sp->vha = vha; | ||
442 | sp->fcport = fcport; | 441 | sp->fcport = fcport; |
443 | sp->cmd = cmd; | 442 | sp->cmd = cmd; |
444 | sp->que = ha->req_q_map[0]; | 443 | sp->que = ha->req_q_map[0]; |
@@ -1182,7 +1181,7 @@ qla2x00_abort_all_cmds(scsi_qla_host_t *vha, int res) | |||
1182 | continue; | 1181 | continue; |
1183 | for (cnt = 1; cnt < MAX_OUTSTANDING_COMMANDS; cnt++) { | 1182 | for (cnt = 1; cnt < MAX_OUTSTANDING_COMMANDS; cnt++) { |
1184 | sp = req->outstanding_cmds[cnt]; | 1183 | sp = req->outstanding_cmds[cnt]; |
1185 | if (sp && sp->vha == vha) { | 1184 | if (sp && sp->fcport->vha == vha) { |
1186 | req->outstanding_cmds[cnt] = NULL; | 1185 | req->outstanding_cmds[cnt] = NULL; |
1187 | sp->cmd->result = res; | 1186 | sp->cmd->result = res; |
1188 | qla2x00_sp_compl(ha, sp); | 1187 | qla2x00_sp_compl(ha, sp); |