]> git.proxmox.com Git - pve-kernel.git/commitdiff
Revert "scsi: lpfc: Fix broken Credit Recovery after driver load"
authorThomas Lamprecht <t.lamprecht@proxmox.com>
Fri, 15 May 2020 12:48:32 +0000 (14:48 +0200)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Fri, 15 May 2020 12:50:07 +0000 (14:50 +0200)
https://forum.proxmox.com/threads/proxmox-6-2-lpfc-error-port-type-wrong.69680/#post-312491
https://lore.kernel.org/linux-scsi/20200512212855.36q2ut2io2cdtagn@zeha.at/

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
patches/kernel/0006-Revert-scsi-lpfc-Fix-broken-Credit-Recovery-after-dr.patch [new file with mode: 0644]

diff --git a/patches/kernel/0006-Revert-scsi-lpfc-Fix-broken-Credit-Recovery-after-dr.patch b/patches/kernel/0006-Revert-scsi-lpfc-Fix-broken-Credit-Recovery-after-dr.patch
new file mode 100644 (file)
index 0000000..dbc0186
--- /dev/null
@@ -0,0 +1,129 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Thomas Lamprecht <t.lamprecht@proxmox.com>
+Date: Fri, 15 May 2020 14:43:37 +0200
+Subject: [PATCH] Revert "scsi: lpfc: Fix broken Credit Recovery after driver
+ load"
+
+This reverts commit 77d5805eafdb5c42bdfe78f058ad9c40ee1278b4.
+We got some reports that this causes some lpfcs to report FLOGI
+errors[0][1] and while the real fix is naturally something else, it
+is nonexistent for now, so workaround with this revert.
+
+[0]: https://forum.proxmox.com/threads/proxmox-6-2-lpfc-error-port-type-wrong.69680/#post-312491
+[1]: https://lore.kernel.org/linux-scsi/20200512212855.36q2ut2io2cdtagn@zeha.at/
+---
+ drivers/scsi/lpfc/lpfc.h         |  1 -
+ drivers/scsi/lpfc/lpfc_hbadisc.c | 59 +++++++++++---------------------
+ 2 files changed, 20 insertions(+), 40 deletions(-)
+
+diff --git a/drivers/scsi/lpfc/lpfc.h b/drivers/scsi/lpfc/lpfc.h
+index 357fdec06bae..cd5525f28556 100644
+--- a/drivers/scsi/lpfc/lpfc.h
++++ b/drivers/scsi/lpfc/lpfc.h
+@@ -748,7 +748,6 @@ struct lpfc_hba {
+                                        * capability
+                                        */
+ #define HBA_FLOGI_ISSUED      0x100000 /* FLOGI was issued */
+-#define HBA_DEFER_FLOGI               0x800000 /* Defer FLOGI till read_sparm cmpl */
+       uint32_t fcp_ring_in_use; /* When polling test if intr-hndlr active*/
+       struct lpfc_dmabuf slim2p;
+diff --git a/drivers/scsi/lpfc/lpfc_hbadisc.c b/drivers/scsi/lpfc/lpfc_hbadisc.c
+index 789eecbf32eb..95566e382b48 100644
+--- a/drivers/scsi/lpfc/lpfc_hbadisc.c
++++ b/drivers/scsi/lpfc/lpfc_hbadisc.c
+@@ -1163,16 +1163,13 @@ lpfc_mbx_cmpl_local_config_link(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb)
+       }
+       /* Start discovery by sending a FLOGI. port_state is identically
+-       * LPFC_FLOGI while waiting for FLOGI cmpl. Check if sending
+-       * the FLOGI is being deferred till after MBX_READ_SPARAM completes.
++       * LPFC_FLOGI while waiting for FLOGI cmpl
+        */
+-      if (vport->port_state != LPFC_FLOGI) {
+-              if (!(phba->hba_flag & HBA_DEFER_FLOGI))
+-                      lpfc_initial_flogi(vport);
+-      } else {
+-              if (vport->fc_flag & FC_PT2PT)
+-                      lpfc_disc_start(vport);
+-      }
++      if (vport->port_state != LPFC_FLOGI)
++              lpfc_initial_flogi(vport);
++      else if (vport->fc_flag & FC_PT2PT)
++              lpfc_disc_start(vport);
++
+       return;
+ out:
+@@ -3097,14 +3094,6 @@ lpfc_mbx_cmpl_read_sparam(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb)
+       lpfc_mbuf_free(phba, mp->virt, mp->phys);
+       kfree(mp);
+       mempool_free(pmb, phba->mbox_mem_pool);
+-
+-      /* Check if sending the FLOGI is being deferred to after we get
+-       * up to date CSPs from MBX_READ_SPARAM.
+-       */
+-      if (phba->hba_flag & HBA_DEFER_FLOGI) {
+-              lpfc_initial_flogi(vport);
+-              phba->hba_flag &= ~HBA_DEFER_FLOGI;
+-      }
+       return;
+ out:
+@@ -3235,23 +3224,6 @@ lpfc_mbx_process_link_up(struct lpfc_hba *phba, struct lpfc_mbx_read_top *la)
+       }
+       lpfc_linkup(phba);
+-      sparam_mbox = NULL;
+-
+-      if (!(phba->hba_flag & HBA_FCOE_MODE)) {
+-              cfglink_mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
+-              if (!cfglink_mbox)
+-                      goto out;
+-              vport->port_state = LPFC_LOCAL_CFG_LINK;
+-              lpfc_config_link(phba, cfglink_mbox);
+-              cfglink_mbox->vport = vport;
+-              cfglink_mbox->mbox_cmpl = lpfc_mbx_cmpl_local_config_link;
+-              rc = lpfc_sli_issue_mbox(phba, cfglink_mbox, MBX_NOWAIT);
+-              if (rc == MBX_NOT_FINISHED) {
+-                      mempool_free(cfglink_mbox, phba->mbox_mem_pool);
+-                      goto out;
+-              }
+-      }
+-
+       sparam_mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
+       if (!sparam_mbox)
+               goto out;
+@@ -3272,7 +3244,20 @@ lpfc_mbx_process_link_up(struct lpfc_hba *phba, struct lpfc_mbx_read_top *la)
+               goto out;
+       }
+-      if (phba->hba_flag & HBA_FCOE_MODE) {
++      if (!(phba->hba_flag & HBA_FCOE_MODE)) {
++              cfglink_mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
++              if (!cfglink_mbox)
++                      goto out;
++              vport->port_state = LPFC_LOCAL_CFG_LINK;
++              lpfc_config_link(phba, cfglink_mbox);
++              cfglink_mbox->vport = vport;
++              cfglink_mbox->mbox_cmpl = lpfc_mbx_cmpl_local_config_link;
++              rc = lpfc_sli_issue_mbox(phba, cfglink_mbox, MBX_NOWAIT);
++              if (rc == MBX_NOT_FINISHED) {
++                      mempool_free(cfglink_mbox, phba->mbox_mem_pool);
++                      goto out;
++              }
++      } else {
+               vport->port_state = LPFC_VPORT_UNKNOWN;
+               /*
+                * Add the driver's default FCF record at FCF index 0 now. This
+@@ -3329,10 +3314,6 @@ lpfc_mbx_process_link_up(struct lpfc_hba *phba, struct lpfc_mbx_read_top *la)
+               }
+               /* Reset FCF roundrobin bmask for new discovery */
+               lpfc_sli4_clear_fcf_rr_bmask(phba);
+-      } else {
+-              if (phba->bbcredit_support && phba->cfg_enable_bbcr &&
+-                  !(phba->link_flag & LS_LOOPBACK_MODE))
+-                      phba->hba_flag |= HBA_DEFER_FLOGI;
+       }
+       /* Prepare for LINK up registrations */