On Mon, 2018-12-10 at 19:37 -0800, James Smart wrote:
> Addition of support for if_type=6 missed several checks for interface
> type, resulting in the failure of several key management features
> such as firmware dump and loopback testing.
> 
> Correct the checks on the if_type so that both SLI4 IF_TYPE's 2 and 6
> are supported.
> 
> Signed-off-by: Dick Kennedy <[email protected]>
> Signed-off-by: James Smart <[email protected]>
> ---
>  drivers/scsi/lpfc/lpfc_attr.c    | 4 ++--
>  drivers/scsi/lpfc/lpfc_bsg.c     | 6 +++---
>  drivers/scsi/lpfc/lpfc_els.c     | 2 +-
>  drivers/scsi/lpfc/lpfc_hbadisc.c | 2 +-
>  4 files changed, 7 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/scsi/lpfc/lpfc_attr.c b/drivers/scsi/lpfc/lpfc_attr.c
> index 83924d66fd39..513ac1be861f 100644
> --- a/drivers/scsi/lpfc/lpfc_attr.c
> +++ b/drivers/scsi/lpfc/lpfc_attr.c
> @@ -1358,7 +1358,7 @@ lpfc_sli4_pdev_reg_request(struct lpfc_hba *phba, 
> uint32_t opcode)
>               return -EACCES;
>  
>       if ((phba->sli_rev < LPFC_SLI_REV4) ||
> -         (bf_get(lpfc_sli_intf_if_type, &phba->sli4_hba.sli_intf) !=
> +         (bf_get(lpfc_sli_intf_if_type, &phba->sli4_hba.sli_intf) <
>            LPFC_SLI_INTF_IF_TYPE_2))
>               return -EPERM;
>  
> @@ -4361,7 +4361,7 @@ lpfc_link_speed_store(struct device *dev, struct 
> device_attribute *attr,
>       uint32_t prev_val, if_type;
>  
>       if_type = bf_get(lpfc_sli_intf_if_type, &phba->sli4_hba.sli_intf);
> -     if (if_type == LPFC_SLI_INTF_IF_TYPE_2 &&
> +     if (if_type >= LPFC_SLI_INTF_IF_TYPE_2 &&
>           phba->hba_flag & HBA_FORCED_LINK_SPEED)
>               return -EPERM;
>  
> diff --git a/drivers/scsi/lpfc/lpfc_bsg.c b/drivers/scsi/lpfc/lpfc_bsg.c
> index cb18dac68e28..8698af86485d 100644
> --- a/drivers/scsi/lpfc/lpfc_bsg.c
> +++ b/drivers/scsi/lpfc/lpfc_bsg.c
> @@ -2222,7 +2222,7 @@ lpfc_bsg_diag_loopback_mode(struct bsg_job *job)
>  
>       if (phba->sli_rev < LPFC_SLI_REV4)
>               rc = lpfc_sli3_bsg_diag_loopback_mode(phba, job);
> -     else if (bf_get(lpfc_sli_intf_if_type, &phba->sli4_hba.sli_intf) ==
> +     else if (bf_get(lpfc_sli_intf_if_type, &phba->sli4_hba.sli_intf) >=
>                LPFC_SLI_INTF_IF_TYPE_2)
>               rc = lpfc_sli4_bsg_diag_loopback_mode(phba, job);
>       else
> @@ -2262,7 +2262,7 @@ lpfc_sli4_bsg_diag_mode_end(struct bsg_job *job)
>  
>       if (phba->sli_rev < LPFC_SLI_REV4)
>               return -ENODEV;
> -     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)
>               return -ENODEV;
>  
> @@ -2354,7 +2354,7 @@ lpfc_sli4_bsg_link_diag_test(struct bsg_job *job)
>               rc = -ENODEV;
>               goto job_error;
>       }
> -     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) {
>               rc = -ENODEV;
>               goto job_error;
> diff --git a/drivers/scsi/lpfc/lpfc_els.c b/drivers/scsi/lpfc/lpfc_els.c
> index 103ee7049633..d222baf35d15 100644
> --- a/drivers/scsi/lpfc/lpfc_els.c
> +++ b/drivers/scsi/lpfc/lpfc_els.c
> @@ -5733,7 +5733,7 @@ lpfc_els_rcv_rdp(struct lpfc_vport *vport, struct 
> lpfc_iocbq *cmdiocb,
>       struct ls_rjt stat;
>  
>       if (phba->sli_rev < LPFC_SLI_REV4 ||
> -         bf_get(lpfc_sli_intf_if_type, &phba->sli4_hba.sli_intf) !=
> +         bf_get(lpfc_sli_intf_if_type, &phba->sli4_hba.sli_intf) <
>                                               LPFC_SLI_INTF_IF_TYPE_2) {
>               rjt_err = LSRJT_UNABLE_TPC;
>               rjt_expl = LSEXP_REQ_UNSUPPORTED;
> diff --git a/drivers/scsi/lpfc/lpfc_hbadisc.c 
> b/drivers/scsi/lpfc/lpfc_hbadisc.c
> index 8857f559e6c3..91189e9c8530 100644
> --- a/drivers/scsi/lpfc/lpfc_hbadisc.c
> +++ b/drivers/scsi/lpfc/lpfc_hbadisc.c
> @@ -4850,7 +4850,7 @@ lpfc_unreg_rpi(struct lpfc_vport *vport, struct 
> lpfc_nodelist *ndlp)
>                               if (phba->sli_rev == LPFC_SLI_REV4 &&
>                                   (!(vport->load_flag & FC_UNLOADING)) &&
>                                   (bf_get(lpfc_sli_intf_if_type,
> -                                  &phba->sli4_hba.sli_intf) ==
> +                                  &phba->sli4_hba.sli_intf) >=
>                                     LPFC_SLI_INTF_IF_TYPE_2) &&
>                                   (kref_read(&ndlp->kref) > 0)) {
>                                       mbox->ctx_ndlp = lpfc_nlp_get(ndlp);

Reviewed-by: Ewan D. Milne <[email protected]>

Reply via email to