| From 93a03f429840521f8722a6b372328c083bd3557b Mon Sep 17 00:00:00 2001 |
| From: James Smart <jsmart2021@gmail.com> |
| Date: Tue, 12 Mar 2019 16:30:07 -0700 |
| Subject: scsi: lpfc: Fix SLI3 commands being issued on SLI4 devices |
| |
| [ Upstream commit c95a3b4b0fb8d351e2329a96f87c4fc96a149505 ] |
| |
| During debug, it was seen that the driver is issuing commands specific to |
| SLI3 on SLI4 devices. Although the adapter correctly rejected the command, |
| this should not be done. |
| |
| Revise the code to stop sending these commands on a SLI4 adapter. |
| |
| Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com> |
| Signed-off-by: James Smart <jsmart2021@gmail.com> |
| Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/scsi/lpfc/lpfc_hbadisc.c | 11 ++++++++++- |
| 1 file changed, 10 insertions(+), 1 deletion(-) |
| |
| diff --git a/drivers/scsi/lpfc/lpfc_hbadisc.c b/drivers/scsi/lpfc/lpfc_hbadisc.c |
| index aa4961a2caf81..676f4bf3f33a3 100644 |
| --- a/drivers/scsi/lpfc/lpfc_hbadisc.c |
| +++ b/drivers/scsi/lpfc/lpfc_hbadisc.c |
| @@ -932,7 +932,11 @@ lpfc_linkdown(struct lpfc_hba *phba) |
| } |
| } |
| lpfc_destroy_vport_work_array(phba, vports); |
| - /* Clean up any firmware default rpi's */ |
| + |
| + /* Clean up any SLI3 firmware default rpi's */ |
| + if (phba->sli_rev > LPFC_SLI_REV3) |
| + goto skip_unreg_did; |
| + |
| mb = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); |
| if (mb) { |
| lpfc_unreg_did(phba, 0xffff, LPFC_UNREG_ALL_DFLT_RPIS, mb); |
| @@ -944,6 +948,7 @@ lpfc_linkdown(struct lpfc_hba *phba) |
| } |
| } |
| |
| + skip_unreg_did: |
| /* Setup myDID for link up if we are in pt2pt mode */ |
| if (phba->pport->fc_flag & FC_PT2PT) { |
| mb = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); |
| @@ -4979,6 +4984,10 @@ lpfc_unreg_default_rpis(struct lpfc_vport *vport) |
| LPFC_MBOXQ_t *mbox; |
| int rc; |
| |
| + /* Unreg DID is an SLI3 operation. */ |
| + if (phba->sli_rev > LPFC_SLI_REV3) |
| + return; |
| + |
| mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); |
| if (mbox) { |
| lpfc_unreg_did(phba, vport->vpi, LPFC_UNREG_ALL_DFLT_RPIS, |
| -- |
| 2.20.1 |
| |