Commit 572709e2 authored by James Smart's avatar James Smart Committed by James Bottomley

[SCSI] lpfc 8.3.41: Fixed max value of lpfc_lun_queue_depth

Signed-off-by: default avatarJames Smart <james.smart@emulex.com>
Signed-off-by: default avatarJames Bottomley <JBottomley@Parallels.com>
parent 48a5a664
...@@ -2591,9 +2591,12 @@ LPFC_VPORT_ATTR_R(enable_da_id, 1, 0, 1, ...@@ -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 # 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"); "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, ...@@ -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. # commands per target port. Value range is [10,65535]. Default value is 65535.
*/ */
LPFC_VPORT_ATTR_R(tgt_queue_depth, 65535, 10, 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 # hba_queue_depth: This parameter is used to limit the number of outstanding
......
...@@ -472,10 +472,22 @@ lpfc_config_port_post(struct lpfc_hba *phba) ...@@ -472,10 +472,22 @@ lpfc_config_port_post(struct lpfc_hba *phba)
lpfc_sli_read_link_ste(phba); lpfc_sli_read_link_ste(phba);
/* Reset the DFT_HBA_Q_DEPTH to the max xri */ /* Reset the DFT_HBA_Q_DEPTH to the max xri */
if (phba->cfg_hba_queue_depth > (mb->un.varRdConfig.max_xri+1)) i = (mb->un.varRdConfig.max_xri + 1);
phba->cfg_hba_queue_depth = if (phba->cfg_hba_queue_depth > i) {
(mb->un.varRdConfig.max_xri + 1) - lpfc_printf_log(phba, KERN_WARNING, LOG_INIT,
lpfc_sli4_get_els_iocb_cnt(phba); "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; phba->lmt = mb->un.varRdConfig.lmt;
...@@ -6664,12 +6676,14 @@ lpfc_sli4_read_config(struct lpfc_hba *phba) ...@@ -6664,12 +6676,14 @@ lpfc_sli4_read_config(struct lpfc_hba *phba)
goto read_cfg_out; goto read_cfg_out;
/* Reset the DFT_HBA_Q_DEPTH to the max xri */ /* Reset the DFT_HBA_Q_DEPTH to the max xri */
if (phba->cfg_hba_queue_depth > length = phba->sli4_hba.max_cfg_param.max_xri -
(phba->sli4_hba.max_cfg_param.max_xri - lpfc_sli4_get_els_iocb_cnt(phba);
lpfc_sli4_get_els_iocb_cnt(phba))) if (phba->cfg_hba_queue_depth > length) {
phba->cfg_hba_queue_depth = lpfc_printf_log(phba, KERN_WARNING, LOG_INIT,
phba->sli4_hba.max_cfg_param.max_xri - "3361 HBA queue depth changed from %d to %d\n",
lpfc_sli4_get_els_iocb_cnt(phba); 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) != if (bf_get(lpfc_sli_intf_if_type, &phba->sli4_hba.sli_intf) !=
LPFC_SLI_INTF_IF_TYPE_2) LPFC_SLI_INTF_IF_TYPE_2)
......
...@@ -6163,6 +6163,7 @@ lpfc_sli4_hba_setup(struct lpfc_hba *phba) ...@@ -6163,6 +6163,7 @@ lpfc_sli4_hba_setup(struct lpfc_hba *phba)
kfree(vpd); kfree(vpd);
goto out_free_mbox; goto out_free_mbox;
} }
mqe = &mboxq->u.mqe; mqe = &mboxq->u.mqe;
phba->sli_rev = bf_get(lpfc_mbx_rd_rev_sli_lvl, &mqe->un.read_rev); 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)) if (bf_get(lpfc_mbx_rd_rev_fcoe, &mqe->un.read_rev))
...@@ -6249,6 +6250,16 @@ lpfc_sli4_hba_setup(struct lpfc_hba *phba) ...@@ -6249,6 +6250,16 @@ lpfc_sli4_hba_setup(struct lpfc_hba *phba)
phba->vpd.rev.fcphHigh, phba->vpd.rev.fcphLow, phba->vpd.rev.fcphHigh, phba->vpd.rev.fcphLow,
phba->vpd.rev.feaLevelHigh, phba->vpd.rev.feaLevelLow); 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 * Discover the port's supported feature set and match it against the
* hosts requests. * hosts requests.
......
...@@ -387,6 +387,9 @@ lpfc_vport_create(struct fc_vport *fc_vport, bool disable) ...@@ -387,6 +387,9 @@ lpfc_vport_create(struct fc_vport *fc_vport, bool disable)
/* Create binary sysfs attribute for vport */ /* Create binary sysfs attribute for vport */
lpfc_alloc_sysfs_attr(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; *(struct lpfc_vport **)fc_vport->dd_data = vport;
vport->fc_vport = fc_vport; vport->fc_vport = fc_vport;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment