mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-05 13:29:17 -04:00
scsi: mpi3mr: Invoke soft reset upon TSU or event ack time out
When a timestamp update or an event acknowledgment command times out, the driver invokes the soft reset handler to recover the controller while holding a mutex lock. The soft reset handler also tries to acquire the same mutex to send initialization commands to the controller which leads to a deadlock scenario. To resolve the issue the driver will check thestatus and if this indicates the controller is operational, the driver will issue a diagnostic fault reset and exit out of the command processing function. If the controller is already faulted or asynchronously reset, then the driver will just exit the command processing function. Signed-off-by: Ranjan Kumar <ranjan.kumar@broadcom.com> Link: https://lore.kernel.org/r/20230804104248.118924-2-ranjan.kumar@broadcom.com Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
committed by
Martin K. Petersen
parent
06c2afb862
commit
9134211f7b
@@ -2343,8 +2343,8 @@ static int mpi3mr_sync_timestamp(struct mpi3mr_ioc *mrioc)
|
||||
ioc_err(mrioc, "Issue IOUCTL time_stamp: command timed out\n");
|
||||
mrioc->init_cmds.is_waiting = 0;
|
||||
if (!(mrioc->init_cmds.state & MPI3MR_CMD_RESET))
|
||||
mpi3mr_soft_reset_handler(mrioc,
|
||||
MPI3MR_RESET_FROM_TSU_TIMEOUT, 1);
|
||||
mpi3mr_check_rh_fault_ioc(mrioc,
|
||||
MPI3MR_RESET_FROM_TSU_TIMEOUT);
|
||||
retval = -1;
|
||||
goto out_unlock;
|
||||
}
|
||||
@@ -3359,8 +3359,8 @@ int mpi3mr_process_event_ack(struct mpi3mr_ioc *mrioc, u8 event,
|
||||
if (!(mrioc->init_cmds.state & MPI3MR_CMD_COMPLETE)) {
|
||||
ioc_err(mrioc, "Issue EvtNotify: command timed out\n");
|
||||
if (!(mrioc->init_cmds.state & MPI3MR_CMD_RESET))
|
||||
mpi3mr_soft_reset_handler(mrioc,
|
||||
MPI3MR_RESET_FROM_EVTACK_TIMEOUT, 1);
|
||||
mpi3mr_check_rh_fault_ioc(mrioc,
|
||||
MPI3MR_RESET_FROM_EVTACK_TIMEOUT);
|
||||
retval = -1;
|
||||
goto out_unlock;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user