| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
- From: Thomas Lamprecht <[email protected]>
- 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/[email protected]/
- ---
- 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 */
|