[SCSI] lpfc 8.3.44: Fixed IO hang when in msi mode.
authorJames Smart <james.smart@emulex.com>
Wed, 18 Dec 2013 01:29:01 +0000 (20:29 -0500)
committerJames Bottomley <JBottomley@Parallels.com>
Sat, 15 Mar 2014 17:18:54 +0000 (10:18 -0700)
Signed-off-by: James Smart <james.smart@emulex.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
drivers/scsi/lpfc/lpfc_scsi.c
drivers/scsi/lpfc/lpfc_sli.c

index b2ede05a5f0a61bbdeb3ffea4d3d7c263262031d..0b08188598cdd3421552255ea2958edf1017b553 100644 (file)
@@ -4782,6 +4782,24 @@ lpfc_queuecommand(struct Scsi_Host *shost, struct scsi_cmnd *cmnd)
                                  &lpfc_cmd->cur_iocbq, SLI_IOCB_RET_IOCB);
        if (err) {
                atomic_dec(&ndlp->cmd_pending);
+               lpfc_printf_vlog(vport, KERN_INFO, LOG_FCP,
+                                "3376 FCP could not issue IOCB err %x"
+                                "FCP cmd x%x <%d/%d> "
+                                "sid: x%x did: x%x oxid: x%x "
+                                "Data: x%x x%x x%x x%x\n",
+                                err, cmnd->cmnd[0],
+                                cmnd->device ? cmnd->device->id : 0xffff,
+                                cmnd->device ? cmnd->device->lun : 0xffff,
+                                vport->fc_myDID, ndlp->nlp_DID,
+                                phba->sli_rev == LPFC_SLI_REV4 ?
+                                lpfc_cmd->cur_iocbq.sli4_xritag : 0xffff,
+                                lpfc_cmd->cur_iocbq.iocb.ulpContext,
+                                lpfc_cmd->cur_iocbq.iocb.ulpIoTag,
+                                lpfc_cmd->cur_iocbq.iocb.ulpTimeout,
+                                (uint32_t)
+                                (cmnd->request->timeout / 1000));
+
+
                goto out_host_busy_free_buf;
        }
        if (phba->cfg_poll & ENABLE_FCP_RING_POLLING) {
index 8f580fda443f9de493544ac5f75ac381f5990db9..838e5b991851cdc08cb40907c05421cc75936a9f 100644 (file)
@@ -8032,7 +8032,8 @@ lpfc_sli4_scmd_to_wqidx_distr(struct lpfc_hba *phba)
        struct lpfc_vector_map_info *cpup;
        int chann, cpu;
 
-       if (phba->cfg_fcp_io_sched == LPFC_FCP_SCHED_BY_CPU) {
+       if (phba->cfg_fcp_io_sched == LPFC_FCP_SCHED_BY_CPU
+           && phba->cfg_fcp_io_channel > 1) {
                cpu = smp_processor_id();
                if (cpu < phba->sli4_hba.num_present_cpu) {
                        cpup = phba->sli4_hba.cpu_map;