[SCSI] lpfc 8.3.41: Fixed max value of lpfc_lun_queue_depth
authorJames Smart <james.smart@emulex.com>
Mon, 15 Jul 2013 22:32:43 +0000 (18:32 -0400)
committerJames Bottomley <JBottomley@Parallels.com>
Fri, 23 Aug 2013 17:16:36 +0000 (13:16 -0400)
Signed-off-by: James Smart <james.smart@emulex.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
drivers/scsi/lpfc/lpfc_attr.c
drivers/scsi/lpfc/lpfc_init.c
drivers/scsi/lpfc/lpfc_sli.c
drivers/scsi/lpfc/lpfc_vport.c

index 5cb08ae3e8c2eba3668cd92e6aa7dc6b10bf2d5b..9937e572efdb7816a0e5e56a9181ab438d512d79 100644 (file)
@@ -2591,9 +2591,12 @@ LPFC_VPORT_ATTR_R(enable_da_id, 1, 0, 1,
 
 /*
 # lun_queue_depth:  This parameter is used to limit the number of outstanding
-# commands per FCP LUN. Value range is [1,128]. Default value is 30.
+# commands per FCP LUN. Value range is [1,512]. Default value is 30.
+# If this parameter value is greater than 1/8th the maximum number of exchanges
+# supported by the HBA port, then the lun queue depth will be reduced to
+# 1/8th the maximum number of exchanges.
 */
-LPFC_VPORT_ATTR_R(lun_queue_depth, 30, 1, 128,
+LPFC_VPORT_ATTR_R(lun_queue_depth, 30, 1, 512,
                  "Max number of FCP commands we can queue to a specific LUN");
 
 /*
@@ -2601,7 +2604,7 @@ LPFC_VPORT_ATTR_R(lun_queue_depth, 30, 1, 128,
 # commands per target port. Value range is [10,65535]. Default value is 65535.
 */
 LPFC_VPORT_ATTR_R(tgt_queue_depth, 65535, 10, 65535,
-       "Max number of FCP commands we can queue to a specific target port");
+                 "Max number of FCP commands we can queue to a specific target port");
 
 /*
 # hba_queue_depth:  This parameter is used to limit the number of outstanding
index e0b20fad8502117758a95876907dac4d485a29d9..a7f3328424f8fe4fbf43033068dd3ff5c762f4cb 100644 (file)
@@ -472,10 +472,22 @@ lpfc_config_port_post(struct lpfc_hba *phba)
        lpfc_sli_read_link_ste(phba);
 
        /* Reset the DFT_HBA_Q_DEPTH to the max xri  */
-       if (phba->cfg_hba_queue_depth > (mb->un.varRdConfig.max_xri+1))
-               phba->cfg_hba_queue_depth =
-                       (mb->un.varRdConfig.max_xri + 1) -
-                                       lpfc_sli4_get_els_iocb_cnt(phba);
+       i = (mb->un.varRdConfig.max_xri + 1);
+       if (phba->cfg_hba_queue_depth > i) {
+               lpfc_printf_log(phba, KERN_WARNING, LOG_INIT,
+                               "3359 HBA queue depth changed from %d to %d\n",
+                               phba->cfg_hba_queue_depth, i);
+               phba->cfg_hba_queue_depth = i;
+       }
+
+       /* Reset the DFT_LUN_Q_DEPTH to (max xri >> 3)  */
+       i = (mb->un.varRdConfig.max_xri >> 3);
+       if (phba->pport->cfg_lun_queue_depth > i) {
+               lpfc_printf_log(phba, KERN_WARNING, LOG_INIT,
+                               "3360 LUN queue depth changed from %d to %d\n",
+                               phba->pport->cfg_lun_queue_depth, i);
+               phba->pport->cfg_lun_queue_depth = i;
+       }
 
        phba->lmt = mb->un.varRdConfig.lmt;
 
@@ -6664,12 +6676,14 @@ lpfc_sli4_read_config(struct lpfc_hba *phba)
                goto read_cfg_out;
 
        /* Reset the DFT_HBA_Q_DEPTH to the max xri  */
-       if (phba->cfg_hba_queue_depth >
-               (phba->sli4_hba.max_cfg_param.max_xri -
-                       lpfc_sli4_get_els_iocb_cnt(phba)))
-               phba->cfg_hba_queue_depth =
-                       phba->sli4_hba.max_cfg_param.max_xri -
-                               lpfc_sli4_get_els_iocb_cnt(phba);
+       length = phba->sli4_hba.max_cfg_param.max_xri -
+                       lpfc_sli4_get_els_iocb_cnt(phba);
+       if (phba->cfg_hba_queue_depth > length) {
+               lpfc_printf_log(phba, KERN_WARNING, LOG_INIT,
+                               "3361 HBA queue depth changed from %d to %d\n",
+                               phba->cfg_hba_queue_depth, length);
+               phba->cfg_hba_queue_depth = length;
+       }
 
        if (bf_get(lpfc_sli_intf_if_type, &phba->sli4_hba.sli_intf) !=
            LPFC_SLI_INTF_IF_TYPE_2)
index 230f9eddb797267209ecb4994875f67af7b9c2c6..a4e3f47574052d7f070faac2e3162c25c9594400 100644 (file)
@@ -6163,6 +6163,7 @@ lpfc_sli4_hba_setup(struct lpfc_hba *phba)
                kfree(vpd);
                goto out_free_mbox;
        }
+
        mqe = &mboxq->u.mqe;
        phba->sli_rev = bf_get(lpfc_mbx_rd_rev_sli_lvl, &mqe->un.read_rev);
        if (bf_get(lpfc_mbx_rd_rev_fcoe, &mqe->un.read_rev))
@@ -6249,6 +6250,16 @@ lpfc_sli4_hba_setup(struct lpfc_hba *phba)
                        phba->vpd.rev.fcphHigh, phba->vpd.rev.fcphLow,
                        phba->vpd.rev.feaLevelHigh, phba->vpd.rev.feaLevelLow);
 
+       /* Reset the DFT_LUN_Q_DEPTH to (max xri >> 3)  */
+       rc = (phba->sli4_hba.max_cfg_param.max_xri >> 3);
+       if (phba->pport->cfg_lun_queue_depth > rc) {
+               lpfc_printf_log(phba, KERN_WARNING, LOG_INIT,
+                               "3362 LUN queue depth changed from %d to %d\n",
+                               phba->pport->cfg_lun_queue_depth, rc);
+               phba->pport->cfg_lun_queue_depth = rc;
+       }
+
+
        /*
         * Discover the port's supported feature set and match it against the
         * hosts requests.
index e28e431564b08f5b90693c3dc49c5d218e67a262..6b9f9bdb6c987545796582c8d412b1a0a76abbd7 100644 (file)
@@ -387,6 +387,9 @@ lpfc_vport_create(struct fc_vport *fc_vport, bool disable)
        /* Create binary sysfs attribute for vport */
        lpfc_alloc_sysfs_attr(vport);
 
+       /* Set the DFT_LUN_Q_DEPTH accordingly */
+       vport->cfg_lun_queue_depth  = phba->pport->cfg_lun_queue_depth;
+
        *(struct lpfc_vport **)fc_vport->dd_data = vport;
        vport->fc_vport = fc_vport;