Commit 21c5ffb4 authored by Heiko Stuebner's avatar Heiko Stuebner Committed by Lee Jones
Browse files

mfd: qnap-mcu: Convert to guard(mutex) in qnap_mcu_exec



guard() makes sure that the mutex gets unlocked when the function returns
and thus removes the need for unlock gotos or similar mechanisms and
therefore allows for a simpler function structure.

So convert the qnap_mcu_exec function to use it.

Signed-off-by: default avatarHeiko Stuebner <heiko@sntech.de>
Link: https://lore.kernel.org/r/20250804130726.3180806-4-heiko@sntech.de


Signed-off-by: default avatarLee Jones <lee@kernel.org>
parent bf2de430
Loading
Loading
Loading
Loading
+5 −8
Original line number Diff line number Diff line
@@ -156,7 +156,7 @@ int qnap_mcu_exec(struct qnap_mcu *mcu,
		return -EINVAL;
	}

	mutex_lock(&mcu->bus_lock);
	guard(mutex)(&mcu->bus_lock);

	reply->data = rx;
	reply->length = length;
@@ -164,30 +164,27 @@ int qnap_mcu_exec(struct qnap_mcu *mcu,
	reinit_completion(&reply->done);

	ret = qnap_mcu_write(mcu, cmd_data, cmd_data_size);
	if (ret < 0) {
		mutex_unlock(&mcu->bus_lock);
	if (ret < 0)
		return ret;
	}

	serdev_device_wait_until_sent(mcu->serdev, msecs_to_jiffies(QNAP_MCU_TIMEOUT_MS));

	if (!wait_for_completion_timeout(&reply->done, msecs_to_jiffies(QNAP_MCU_TIMEOUT_MS))) {
		dev_err(&mcu->serdev->dev, "Command timeout\n");
		ret = -ETIMEDOUT;
		return -ETIMEDOUT;
	} else {
		u8 crc = qnap_mcu_csum(rx, reply_data_size);

		if (crc != rx[reply_data_size]) {
			dev_err(&mcu->serdev->dev,
				"Invalid Checksum received\n");
			ret = -EIO;
			return -EIO;
		} else {
			memcpy(reply_data, rx, reply_data_size);
		}
	}

	mutex_unlock(&mcu->bus_lock);
	return ret;
	return 0;
}
EXPORT_SYMBOL_GPL(qnap_mcu_exec);