From: Sasha Levin <sashal@kernel.org>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: James Smart <jsmart2021@gmail.com>,
Justin Tee <justin.tee@broadcom.com>,
"Martin K . Petersen" <martin.petersen@oracle.com>,
Sasha Levin <sashal@kernel.org>,
james.smart@broadcom.com, dick.kennedy@broadcom.com,
jejb@linux.ibm.com, linux-scsi@vger.kernel.org
Subject: [PATCH AUTOSEL 5.15 21/44] scsi: lpfc: Trigger SLI4 firmware dump before doing driver cleanup
Date: Mon, 17 Jan 2022 12:01:04 -0500 [thread overview]
Message-ID: <20220117170127.1471115-21-sashal@kernel.org> (raw)
In-Reply-To: <20220117170127.1471115-1-sashal@kernel.org>
From: James Smart <jsmart2021@gmail.com>
[ Upstream commit 7dd2e2a923173d637c272e483966be8e96a72b64 ]
Extraneous teardown routines are present in the firmware dump path causing
altered states in firmware captures.
When a firmware dump is requested via sysfs, trigger the dump immediately
without tearing down structures and changing adapter state.
The driver shall rely on pre-existing firmware error state clean up
handlers to restore the adapter.
Link: https://lore.kernel.org/r/20211204002644.116455-6-jsmart2021@gmail.com
Co-developed-by: Justin Tee <justin.tee@broadcom.com>
Signed-off-by: Justin Tee <justin.tee@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.h | 2 +-
drivers/scsi/lpfc/lpfc_attr.c | 62 ++++++++++++++++++++------------
drivers/scsi/lpfc/lpfc_hbadisc.c | 8 ++++-
drivers/scsi/lpfc/lpfc_sli.c | 6 ----
4 files changed, 48 insertions(+), 30 deletions(-)
diff --git a/drivers/scsi/lpfc/lpfc.h b/drivers/scsi/lpfc/lpfc.h
index befeb7c342903..19fd9d263f47f 100644
--- a/drivers/scsi/lpfc/lpfc.h
+++ b/drivers/scsi/lpfc/lpfc.h
@@ -1022,7 +1022,6 @@ struct lpfc_hba {
#define HBA_DEVLOSS_TMO 0x2000 /* HBA in devloss timeout */
#define HBA_RRQ_ACTIVE 0x4000 /* process the rrq active list */
#define HBA_IOQ_FLUSH 0x8000 /* FCP/NVME I/O queues being flushed */
-#define HBA_FW_DUMP_OP 0x10000 /* Skips fn reset before FW dump */
#define HBA_RECOVERABLE_UE 0x20000 /* Firmware supports recoverable UE */
#define HBA_FORCED_LINK_SPEED 0x40000 /*
* Firmware supports Forced Link Speed
@@ -1038,6 +1037,7 @@ struct lpfc_hba {
#define HBA_HBEAT_TMO 0x8000000 /* HBEAT initiated after timeout */
#define HBA_FLOGI_OUTSTANDING 0x10000000 /* FLOGI is outstanding */
+ struct completion *fw_dump_cmpl; /* cmpl event tracker for fw_dump */
uint32_t fcp_ring_in_use; /* When polling test if intr-hndlr active*/
struct lpfc_dmabuf slim2p;
diff --git a/drivers/scsi/lpfc/lpfc_attr.c b/drivers/scsi/lpfc/lpfc_attr.c
index ebe417921dac0..f20c4fe1fb8b9 100644
--- a/drivers/scsi/lpfc/lpfc_attr.c
+++ b/drivers/scsi/lpfc/lpfc_attr.c
@@ -1709,25 +1709,25 @@ lpfc_sli4_pdev_reg_request(struct lpfc_hba *phba, uint32_t opcode)
before_fc_flag = phba->pport->fc_flag;
sriov_nr_virtfn = phba->cfg_sriov_nr_virtfn;
- /* Disable SR-IOV virtual functions if enabled */
- if (phba->cfg_sriov_nr_virtfn) {
- pci_disable_sriov(pdev);
- phba->cfg_sriov_nr_virtfn = 0;
- }
+ if (opcode == LPFC_FW_DUMP) {
+ init_completion(&online_compl);
+ phba->fw_dump_cmpl = &online_compl;
+ } else {
+ /* Disable SR-IOV virtual functions if enabled */
+ if (phba->cfg_sriov_nr_virtfn) {
+ pci_disable_sriov(pdev);
+ phba->cfg_sriov_nr_virtfn = 0;
+ }
- if (opcode == LPFC_FW_DUMP)
- phba->hba_flag |= HBA_FW_DUMP_OP;
+ status = lpfc_do_offline(phba, LPFC_EVT_OFFLINE);
- status = lpfc_do_offline(phba, LPFC_EVT_OFFLINE);
+ if (status != 0)
+ return status;
- if (status != 0) {
- phba->hba_flag &= ~HBA_FW_DUMP_OP;
- return status;
+ /* wait for the device to be quiesced before firmware reset */
+ msleep(100);
}
- /* wait for the device to be quiesced before firmware reset */
- msleep(100);
-
reg_val = readl(phba->sli4_hba.conf_regs_memmap_p +
LPFC_CTL_PDEV_CTL_OFFSET);
@@ -1756,24 +1756,42 @@ lpfc_sli4_pdev_reg_request(struct lpfc_hba *phba, uint32_t opcode)
lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
"3153 Fail to perform the requested "
"access: x%x\n", reg_val);
+ if (phba->fw_dump_cmpl)
+ phba->fw_dump_cmpl = NULL;
return rc;
}
/* keep the original port state */
- if (before_fc_flag & FC_OFFLINE_MODE)
- goto out;
-
- init_completion(&online_compl);
- job_posted = lpfc_workq_post_event(phba, &status, &online_compl,
- LPFC_EVT_ONLINE);
- if (!job_posted)
+ if (before_fc_flag & FC_OFFLINE_MODE) {
+ if (phba->fw_dump_cmpl)
+ phba->fw_dump_cmpl = NULL;
goto out;
+ }
- wait_for_completion(&online_compl);
+ /* Firmware dump will trigger an HA_ERATT event, and
+ * lpfc_handle_eratt_s4 routine already handles bringing the port back
+ * online.
+ */
+ if (opcode == LPFC_FW_DUMP) {
+ wait_for_completion(phba->fw_dump_cmpl);
+ } else {
+ init_completion(&online_compl);
+ job_posted = lpfc_workq_post_event(phba, &status, &online_compl,
+ LPFC_EVT_ONLINE);
+ if (!job_posted)
+ goto out;
+ wait_for_completion(&online_compl);
+ }
out:
/* in any case, restore the virtual functions enabled as before */
if (sriov_nr_virtfn) {
+ /* If fw_dump was performed, first disable to clean up */
+ if (opcode == LPFC_FW_DUMP) {
+ pci_disable_sriov(pdev);
+ phba->cfg_sriov_nr_virtfn = 0;
+ }
+
sriov_err =
lpfc_sli_probe_sriov_nr_virtfn(phba, sriov_nr_virtfn);
if (!sriov_err)
diff --git a/drivers/scsi/lpfc/lpfc_hbadisc.c b/drivers/scsi/lpfc/lpfc_hbadisc.c
index 9ccb904e35fcf..3bb7c2aa949f7 100644
--- a/drivers/scsi/lpfc/lpfc_hbadisc.c
+++ b/drivers/scsi/lpfc/lpfc_hbadisc.c
@@ -869,10 +869,16 @@ lpfc_work_done(struct lpfc_hba *phba)
if (phba->pci_dev_grp == LPFC_PCI_DEV_OC)
lpfc_sli4_post_async_mbox(phba);
- if (ha_copy & HA_ERATT)
+ if (ha_copy & HA_ERATT) {
/* Handle the error attention event */
lpfc_handle_eratt(phba);
+ if (phba->fw_dump_cmpl) {
+ complete(phba->fw_dump_cmpl);
+ phba->fw_dump_cmpl = NULL;
+ }
+ }
+
if (ha_copy & HA_MBATT)
lpfc_sli_handle_mb_event(phba);
diff --git a/drivers/scsi/lpfc/lpfc_sli.c b/drivers/scsi/lpfc/lpfc_sli.c
index 9c1f485952ef7..e5009f21d97e1 100644
--- a/drivers/scsi/lpfc/lpfc_sli.c
+++ b/drivers/scsi/lpfc/lpfc_sli.c
@@ -5043,12 +5043,6 @@ lpfc_sli4_brdreset(struct lpfc_hba *phba)
phba->fcf.fcf_flag = 0;
spin_unlock_irq(&phba->hbalock);
- /* SLI4 INTF 2: if FW dump is being taken skip INIT_PORT */
- if (phba->hba_flag & HBA_FW_DUMP_OP) {
- phba->hba_flag &= ~HBA_FW_DUMP_OP;
- return rc;
- }
-
/* Now physically reset the device */
lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
"0389 Performing PCI function reset!\n");
--
2.34.1
next prev parent reply other threads:[~2022-01-17 17:05 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-01-17 17:00 [PATCH AUTOSEL 5.15 01/44] clk: imx: Use div64_ul instead of do_div Sasha Levin
2022-01-17 17:00 ` [PATCH AUTOSEL 5.15 02/44] powerpc/6xx: add missing of_node_put Sasha Levin
2022-01-17 17:00 ` [PATCH AUTOSEL 5.15 03/44] powerpc/powernv: " Sasha Levin
2022-01-17 17:00 ` [PATCH AUTOSEL 5.15 04/44] powerpc/cell: " Sasha Levin
2022-01-17 17:00 ` [PATCH AUTOSEL 5.15 05/44] powerpc/btext: " Sasha Levin
2022-01-17 17:00 ` [PATCH AUTOSEL 5.15 06/44] powerpc/watchdog: Fix missed watchdog reset due to memory ordering race Sasha Levin
2022-01-17 17:00 ` [PATCH AUTOSEL 5.15 07/44] ASoC: imx-hdmi: add put_device() after of_find_device_by_node() Sasha Levin
2022-01-17 17:00 ` [PATCH AUTOSEL 5.15 08/44] i2c: i801: Don't silently correct invalid transfer size Sasha Levin
2022-01-17 17:00 ` [PATCH AUTOSEL 5.15 09/44] powerpc/smp: Move setup_profiling_timer() under CONFIG_PROFILING Sasha Levin
2022-01-17 17:00 ` [PATCH AUTOSEL 5.15 10/44] i2c: mpc: Correct I2C reset procedure Sasha Levin
2022-01-17 17:00 ` [PATCH AUTOSEL 5.15 11/44] clk: meson: gxbb: Fix the SDM_EN bit for MPLL0 on GXBB Sasha Levin
2022-01-17 17:00 ` [PATCH AUTOSEL 5.15 12/44] powerpc/powermac: Add missing lockdep_register_key() Sasha Levin
2022-01-17 17:00 ` [PATCH AUTOSEL 5.15 13/44] KVM: PPC: Book3S: Suppress warnings when allocating too big memory slots Sasha Levin
2022-01-17 17:00 ` [PATCH AUTOSEL 5.15 14/44] KVM: PPC: Book3S: Suppress failed alloc warning in H_COPY_TOFROM_GUEST Sasha Levin
2022-01-17 17:00 ` [PATCH AUTOSEL 5.15 15/44] w1: Misuse of get_user()/put_user() reported by sparse Sasha Levin
2022-01-17 17:00 ` [PATCH AUTOSEL 5.15 16/44] nvmem: core: set size for sysfs bin file Sasha Levin
2022-01-17 17:01 ` [PATCH AUTOSEL 5.15 17/44] dm: fix alloc_dax error handling in alloc_dev Sasha Levin
2022-01-17 17:01 ` [PATCH AUTOSEL 5.15 18/44] interconnect: qcom: rpm: Prevent integer overflow in rate Sasha Levin
2022-01-17 17:01 ` [PATCH AUTOSEL 5.15 19/44] scsi: ufs: Fix a kernel crash during shutdown Sasha Levin
2022-01-17 17:01 ` [PATCH AUTOSEL 5.15 20/44] scsi: lpfc: Fix leaked lpfc_dmabuf mbox allocations with NPIV Sasha Levin
2022-01-17 17:01 ` Sasha Levin [this message]
2022-01-17 17:01 ` [PATCH AUTOSEL 5.15 22/44] ALSA: seq: Set upper limit of processed events Sasha Levin
2022-01-17 17:01 ` [PATCH AUTOSEL 5.15 23/44] MIPS: Loongson64: Use three arguments for slti Sasha Levin
2022-01-17 17:01 ` [PATCH AUTOSEL 5.15 24/44] powerpc/40x: Map 32Mbytes of memory at startup Sasha Levin
2022-01-17 17:01 ` [PATCH AUTOSEL 5.15 25/44] selftests/powerpc/spectre_v2: Return skip code when miss_percent is high Sasha Levin
2022-01-17 17:01 ` [PATCH AUTOSEL 5.15 26/44] powerpc: handle kdump appropriately with crash_kexec_post_notifiers option Sasha Levin
2022-01-17 17:01 ` [PATCH AUTOSEL 5.15 27/44] powerpc/fadump: Fix inaccurate CPU state info in vmcore generated with panic Sasha Levin
2022-01-17 17:01 ` [PATCH AUTOSEL 5.15 28/44] udf: Fix error handling in udf_new_inode() Sasha Levin
2022-01-17 17:01 ` [PATCH AUTOSEL 5.15 29/44] MIPS: OCTEON: add put_device() after of_find_device_by_node() Sasha Levin
2022-01-17 17:01 ` [PATCH AUTOSEL 5.15 30/44] irqchip/gic-v4: Disable redistributors' view of the VPE table at boot time Sasha Levin
2022-01-17 17:01 ` [PATCH AUTOSEL 5.15 31/44] i2c: designware-pci: Fix to change data types of hcnt and lcnt parameters Sasha Levin
2022-01-17 17:01 ` [PATCH AUTOSEL 5.15 32/44] PCI/MSI: Decouple MSI[-X] disable from pcim_release() Sasha Levin
2022-01-17 17:01 ` [PATCH AUTOSEL 5.15 33/44] selftests/powerpc: Add a test of sigreturning to the kernel Sasha Levin
2022-01-17 17:01 ` [PATCH AUTOSEL 5.15 34/44] MIPS: Octeon: Fix build errors using clang Sasha Levin
2022-01-17 17:01 ` [PATCH AUTOSEL 5.15 35/44] scsi: sr: Don't use GFP_DMA Sasha Levin
2022-01-17 17:01 ` [PATCH AUTOSEL 5.15 36/44] scsi: mpi3mr: Fixes around reply request queues Sasha Levin
2022-01-17 17:01 ` [PATCH AUTOSEL 5.15 37/44] ASoC: mediatek: mt8192-mt6359: fix device_node leak Sasha Levin
2022-01-17 17:01 ` [PATCH AUTOSEL 5.15 38/44] phy: phy-mtk-tphy: add support efuse setting Sasha Levin
2022-01-17 17:01 ` [PATCH AUTOSEL 5.15 39/44] ASoC: mediatek: mt8173: fix device_node leak Sasha Levin
2022-01-17 17:01 ` [PATCH AUTOSEL 5.15 40/44] ASoC: mediatek: mt8183: " Sasha Levin
2022-01-17 17:01 ` [PATCH AUTOSEL 5.15 41/44] habanalabs: skip read fw errors if dynamic descriptor invalid Sasha Levin
2022-01-17 17:01 ` [PATCH AUTOSEL 5.15 42/44] phy: mediatek: Fix missing check in mtk_mipi_tx_probe Sasha Levin
2022-01-17 17:01 ` [PATCH AUTOSEL 5.15 43/44] mailbox: change mailbox-mpfs compatible string Sasha Levin
2022-01-17 17:01 ` [PATCH AUTOSEL 5.15 44/44] leds: leds-fsg: Drop FSG3 LED driver Sasha Levin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220117170127.1471115-21-sashal@kernel.org \
--to=sashal@kernel.org \
--cc=dick.kennedy@broadcom.com \
--cc=james.smart@broadcom.com \
--cc=jejb@linux.ibm.com \
--cc=jsmart2021@gmail.com \
--cc=justin.tee@broadcom.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=martin.petersen@oracle.com \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome