mirror of
https://github.com/torvalds/linux.git
synced 2026-03-08 03:04:51 +01:00
scsi: mpi3mr: Avoid redundant diag-fault resets
Update reset handling to invoke diag-save only for diag-fault resets. Skip issuing a diagnostic reset if the IOC is already in FAULT state, preventing repeated fault handling and improving reset stability. Signed-off-by: Ranjan Kumar <ranjan.kumar@broadcom.com> Link: https://patch.msgid.link/20260116060719.32937-4-ranjan.kumar@broadcom.com Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
d0d19250ed
commit
7a67d92622
1 changed files with 10 additions and 3 deletions
|
|
@ -1707,6 +1707,8 @@ static int mpi3mr_issue_reset(struct mpi3mr_ioc *mrioc, u16 reset_type,
|
|||
MPI3MR_RESET_REASON_OSTYPE_SHIFT) | (mrioc->facts.ioc_num <<
|
||||
MPI3MR_RESET_REASON_IOCNUM_SHIFT) | reset_reason);
|
||||
writel(reset_reason, &mrioc->sysif_regs->scratchpad[0]);
|
||||
if (reset_type == MPI3_SYSIF_HOST_DIAG_RESET_ACTION_DIAG_FAULT)
|
||||
mpi3mr_set_diagsave(mrioc);
|
||||
writel(host_diagnostic | reset_type,
|
||||
&mrioc->sysif_regs->host_diagnostic);
|
||||
switch (reset_type) {
|
||||
|
|
@ -5404,6 +5406,7 @@ int mpi3mr_soft_reset_handler(struct mpi3mr_ioc *mrioc,
|
|||
{
|
||||
int retval = 0, i;
|
||||
unsigned long flags;
|
||||
enum mpi3mr_iocstate ioc_state;
|
||||
u32 host_diagnostic, timeout = MPI3_SYSIF_DIAG_SAVE_TIMEOUT * 10;
|
||||
union mpi3mr_trigger_data trigger_data;
|
||||
|
||||
|
|
@ -5462,7 +5465,6 @@ int mpi3mr_soft_reset_handler(struct mpi3mr_ioc *mrioc,
|
|||
mrioc->io_admin_reset_sync = 1;
|
||||
|
||||
if (snapdump) {
|
||||
mpi3mr_set_diagsave(mrioc);
|
||||
retval = mpi3mr_issue_reset(mrioc,
|
||||
MPI3_SYSIF_HOST_DIAG_RESET_ACTION_DIAG_FAULT, reset_reason);
|
||||
if (!retval) {
|
||||
|
|
@ -5564,8 +5566,13 @@ out:
|
|||
if (mrioc->pel_enabled)
|
||||
atomic64_inc(&event_counter);
|
||||
} else {
|
||||
mpi3mr_issue_reset(mrioc,
|
||||
MPI3_SYSIF_HOST_DIAG_RESET_ACTION_DIAG_FAULT, reset_reason);
|
||||
dprint_reset(mrioc,
|
||||
"soft_reset_handler failed, marking controller as unrecoverable\n");
|
||||
ioc_state = mpi3mr_get_iocstate(mrioc);
|
||||
|
||||
if (ioc_state != MRIOC_STATE_FAULT)
|
||||
mpi3mr_issue_reset(mrioc,
|
||||
MPI3_SYSIF_HOST_DIAG_RESET_ACTION_DIAG_FAULT, reset_reason);
|
||||
mrioc->device_refresh_on = 0;
|
||||
mrioc->unrecoverable = 1;
|
||||
mrioc->reset_in_progress = 0;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue