Commit 3f38b2a4 authored by Ranjan Kumar's avatar Ranjan Kumar Committed by baogen shang
Browse files

scsi: mpt3sas: Diag-Reset when Doorbell-In-Use bit is set during driver load time

stable inclusion
from stable-v5.10.233
commit f37f301d84ea5a9c95e6057b576fc154cdbd1446
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/IBG4YH
CVE: NA
Reference: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=linux-5.10.y&id=f37f301d84ea5a9c95e6057b576fc154cdbd1446



-------------------------

[ Upstream commit 3f5eb062e8aa335643181c480e6c590c6cedfd22 ]

Issue a Diag-Reset when the "Doorbell-In-Use" bit is set during the
driver load/initialization.

Signed-off-by: default avatarRanjan Kumar <ranjan.kumar@broadcom.com>
Link: https://lore.kernel.org/r/20241110173341.11595-2-ranjan.kumar@broadcom.com


Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent 08e54ea5
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -6008,11 +6008,12 @@ _base_handshake_req_reply_wait(struct MPT3SAS_ADAPTER *ioc, int request_bytes,
	int i;
	u8 failed;
	__le32 *mfp;
	int ret_val;

	/* make sure doorbell is not in use */
	if ((ioc->base_readl_ext_retry(&ioc->chip->Doorbell) & MPI2_DOORBELL_USED)) {
		ioc_err(ioc, "doorbell is in use (line=%d)\n", __LINE__);
		return -EFAULT;
		goto doorbell_diag_reset;
	}

	/* clear pending doorbell interrupts from previous state changes */
@@ -6102,6 +6103,10 @@ _base_handshake_req_reply_wait(struct MPT3SAS_ADAPTER *ioc, int request_bytes,
			    le32_to_cpu(mfp[i]));
	}
	return 0;

doorbell_diag_reset:
	ret_val = _base_diag_reset(ioc);
	return ret_val;
}

/**