Commit 8931f7b2 authored by Zhang Lixu's avatar Zhang Lixu Committed by Jiri Kosina
Browse files

HID: intel-ish-ipc: Remove redundant ready check after timeout function



timed_wait_for_timeout() internally checks for ish_is_input_ready() and
ishtp_fw_is_ready() based on the provided parameters. If
timed_wait_for_timeout() returns 0, it indicates the status is ready. In
rare cases, another thread may send a message immediately after
timed_wait_for_timeout() returns, causing a subsequent ish_is_input_ready()
check to fail. Since the return value of timed_wait_for_timeout() is
sufficient to determine readiness, the additional ready check is
unnecessary and may introduce issues.

This patch removes the redundant check and relies solely on the return
value of timed_wait_for_timeout().

Fixes: ae02e5d4 ("HID: intel-ish-hid: ipc layer")
Signed-off-by: default avatarZhang Lixu <lixu.zhang@intel.com>
Acked-by: default avatarSrinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Signed-off-by: default avatarJiri Kosina <jkosina@suse.com>
parent 02d6eeed
Loading
Loading
Loading
Loading
+9 −8
Original line number Diff line number Diff line
@@ -498,6 +498,7 @@ static int ish_fw_reset_handler(struct ishtp_device *dev)
{
	uint32_t	reset_id;
	unsigned long	flags;
	int ret;

	/* Read reset ID */
	reset_id = ish_reg_read(dev, IPC_REG_ISH2HOST_MSG) & 0xFFFF;
@@ -510,12 +511,11 @@ static int ish_fw_reset_handler(struct ishtp_device *dev)
	/* ISHTP notification in IPC_RESET */
	ishtp_reset_handler(dev);

	if (!ish_is_input_ready(dev))
		timed_wait_for_timeout(dev, WAIT_FOR_INPUT_RDY,
			TIME_SLICE_FOR_INPUT_RDY_MS, TIMEOUT_FOR_INPUT_RDY_MS);

	ret = timed_wait_for_timeout(dev, WAIT_FOR_INPUT_RDY,
				     TIME_SLICE_FOR_INPUT_RDY_MS,
				     TIMEOUT_FOR_INPUT_RDY_MS);
	/* ISH FW is dead */
	if (!ish_is_input_ready(dev))
	if (ret)
		return	-EPIPE;

	/* Send clock sync at once after reset */
@@ -531,9 +531,10 @@ static int ish_fw_reset_handler(struct ishtp_device *dev)
			 sizeof(uint32_t));

	/* Wait for ISH FW'es ILUP and ISHTP_READY */
	timed_wait_for_timeout(dev, WAIT_FOR_FW_RDY,
			TIME_SLICE_FOR_FW_RDY_MS, TIMEOUT_FOR_FW_RDY_MS);
	if (!ishtp_fw_is_ready(dev)) {
	ret = timed_wait_for_timeout(dev, WAIT_FOR_FW_RDY,
				     TIME_SLICE_FOR_FW_RDY_MS,
				     TIMEOUT_FOR_FW_RDY_MS);
	if (ret) {
		/* ISH FW is dead */
		uint32_t	ish_status;