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 <dick.kennedy@xxxxxxxxxxxx> > Signed-off-by: James Smart <jsmart2021@xxxxxxxxx> > --- > 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 <emilne@xxxxxxxxxx>