|
Hannes Reinecke |
e7cee2 |
From: James Smart <jsmart2021@gmail.com>
|
|
Hannes Reinecke |
e7cee2 |
Date: Thu, 24 May 2018 21:09:01 -0700
|
|
Johannes Thumshirn |
0ee922 |
Subject: scsi: lpfc: Fix port initialization failure.
|
|
Johannes Thumshirn |
0ee922 |
Patch-mainline: v4.18-rc1
|
|
Johannes Thumshirn |
0ee922 |
Git-commit: b92dc72df3c6b46d2d085b56dcc764f798323e7c
|
|
Hannes Reinecke |
e7cee2 |
References: bsc#1093290
|
|
Hannes Reinecke |
e7cee2 |
|
|
Hannes Reinecke |
e7cee2 |
The driver exits port setup after failing the
|
|
Hannes Reinecke |
e7cee2 |
lpfc_sli4_get_parameters command (messages 0356, 2541, & 1412).
|
|
Hannes Reinecke |
e7cee2 |
|
|
Hannes Reinecke |
e7cee2 |
The older CNA adapters do not support the MBX command. In the past
|
|
Hannes Reinecke |
e7cee2 |
the code was allowed to fail and continue on with initialization.
|
|
Hannes Reinecke |
e7cee2 |
However a nvme change moved a closing bracket and now makes all
|
|
Hannes Reinecke |
e7cee2 |
failures terminal.
|
|
Hannes Reinecke |
e7cee2 |
|
|
Hannes Reinecke |
e7cee2 |
Revise the logic so that terminal failure only occurs if the command
|
|
Hannes Reinecke |
e7cee2 |
failed on the newer adapters. Additionally, if parameters are set
|
|
Hannes Reinecke |
e7cee2 |
that require information from the command and the command failed,
|
|
Hannes Reinecke |
e7cee2 |
the parameters are erroneous and port set up should fail even on
|
|
Hannes Reinecke |
e7cee2 |
the older adapters.
|
|
Hannes Reinecke |
e7cee2 |
|
|
Hannes Reinecke |
e7cee2 |
Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
|
|
Hannes Reinecke |
e7cee2 |
Signed-off-by: James Smart <james.smart@broadcom.com>
|
|
Hannes Reinecke |
e7cee2 |
Acked-by: Hannes Reinecke <hare@suse.com>
|
|
Johannes Thumshirn |
0ee922 |
Reviewed-by: Hannes Reinecke <hare@suse.com>
|
|
Johannes Thumshirn |
0ee922 |
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
|
|
Johannes Thumshirn |
0ee922 |
Acked-by: Johannes Thumshirn <jthumshirn@suse.de>
|
|
Hannes Reinecke |
e7cee2 |
---
|
|
Hannes Reinecke |
e7cee2 |
drivers/scsi/lpfc/lpfc_init.c | 21 ++++++++++++++++++---
|
|
Hannes Reinecke |
e7cee2 |
1 file changed, 18 insertions(+), 3 deletions(-)
|
|
Hannes Reinecke |
e7cee2 |
|
|
Hannes Reinecke |
e7cee2 |
diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c
|
|
Hannes Reinecke |
e7cee2 |
index 856ad25c71dc..d8eebb539e11 100644
|
|
Hannes Reinecke |
e7cee2 |
--- a/drivers/scsi/lpfc/lpfc_init.c
|
|
Hannes Reinecke |
e7cee2 |
+++ b/drivers/scsi/lpfc/lpfc_init.c
|
|
Hannes Reinecke |
e7cee2 |
@@ -5845,6 +5845,8 @@ lpfc_sli4_driver_resource_setup(struct lpfc_hba *phba)
|
|
Hannes Reinecke |
e7cee2 |
int fof_vectors = 0;
|
|
Hannes Reinecke |
e7cee2 |
int extra;
|
|
Hannes Reinecke |
e7cee2 |
uint64_t wwn;
|
|
Hannes Reinecke |
e7cee2 |
+ u32 if_type;
|
|
Hannes Reinecke |
e7cee2 |
+ u32 if_fam;
|
|
Hannes Reinecke |
e7cee2 |
|
|
Hannes Reinecke |
e7cee2 |
phba->sli4_hba.num_online_cpu = num_online_cpus();
|
|
Hannes Reinecke |
e7cee2 |
phba->sli4_hba.num_present_cpu = lpfc_present_cpu;
|
|
Hannes Reinecke |
e7cee2 |
@@ -6167,15 +6169,28 @@ lpfc_sli4_driver_resource_setup(struct lpfc_hba *phba)
|
|
Hannes Reinecke |
e7cee2 |
*/
|
|
Hannes Reinecke |
e7cee2 |
rc = lpfc_get_sli4_parameters(phba, mboxq);
|
|
Hannes Reinecke |
e7cee2 |
if (rc) {
|
|
Hannes Reinecke |
e7cee2 |
+ if_type = bf_get(lpfc_sli_intf_if_type,
|
|
Hannes Reinecke |
e7cee2 |
+ &phba->sli4_hba.sli_intf);
|
|
Hannes Reinecke |
e7cee2 |
+ if_fam = bf_get(lpfc_sli_intf_sli_family,
|
|
Hannes Reinecke |
e7cee2 |
+ &phba->sli4_hba.sli_intf);
|
|
Hannes Reinecke |
e7cee2 |
if (phba->sli4_hba.extents_in_use &&
|
|
Hannes Reinecke |
e7cee2 |
phba->sli4_hba.rpi_hdrs_in_use) {
|
|
Hannes Reinecke |
e7cee2 |
lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
|
|
Hannes Reinecke |
e7cee2 |
"2999 Unsupported SLI4 Parameters "
|
|
Hannes Reinecke |
e7cee2 |
"Extents and RPI headers enabled.\n");
|
|
Hannes Reinecke |
e7cee2 |
+ if (if_type == LPFC_SLI_INTF_IF_TYPE_0 &&
|
|
Hannes Reinecke |
e7cee2 |
+ if_fam == LPFC_SLI_INTF_FAMILY_BE2) {
|
|
Hannes Reinecke |
e7cee2 |
+ mempool_free(mboxq, phba->mbox_mem_pool);
|
|
Hannes Reinecke |
e7cee2 |
+ rc = -EIO;
|
|
Hannes Reinecke |
e7cee2 |
+ goto out_free_bsmbx;
|
|
Hannes Reinecke |
e7cee2 |
+ }
|
|
Hannes Reinecke |
e7cee2 |
+ }
|
|
Hannes Reinecke |
e7cee2 |
+ if (!(if_type == LPFC_SLI_INTF_IF_TYPE_0 &&
|
|
Hannes Reinecke |
e7cee2 |
+ if_fam == LPFC_SLI_INTF_FAMILY_BE2)) {
|
|
Hannes Reinecke |
e7cee2 |
+ mempool_free(mboxq, phba->mbox_mem_pool);
|
|
Hannes Reinecke |
e7cee2 |
+ rc = -EIO;
|
|
Hannes Reinecke |
e7cee2 |
+ goto out_free_bsmbx;
|
|
Hannes Reinecke |
e7cee2 |
}
|
|
Hannes Reinecke |
e7cee2 |
- mempool_free(mboxq, phba->mbox_mem_pool);
|
|
Hannes Reinecke |
e7cee2 |
- rc = -EIO;
|
|
Hannes Reinecke |
e7cee2 |
- goto out_free_bsmbx;
|
|
Hannes Reinecke |
e7cee2 |
}
|
|
Hannes Reinecke |
e7cee2 |
|
|
Hannes Reinecke |
e7cee2 |
mempool_free(mboxq, phba->mbox_mem_pool);
|
|
Hannes Reinecke |
e7cee2 |
--
|
|
Hannes Reinecke |
e7cee2 |
2.12.3
|
|
Hannes Reinecke |
e7cee2 |
|