diff options
author | Cristian Marussi <cristian.marussi@arm.com> | 2022-10-28 15:08:28 +0100 |
---|---|---|
committer | Sudeep Holla <sudeep.holla@arm.com> | 2022-11-01 11:33:24 +0000 |
commit | 59172b212ec0dbb97ceb5671d912e6e61fa802d5 (patch) | |
tree | 4b4d06b583c20fe992f388835a5b6e21acb4efaf /drivers/firmware/arm_scmi/mailbox.c | |
parent | fd96fbc8fad35d6b1872c90df8a2f5d721f14d91 (diff) | |
download | linux-59172b212ec0dbb97ceb5671d912e6e61fa802d5.tar.gz linux-59172b212ec0dbb97ceb5671d912e6e61fa802d5.tar.bz2 linux-59172b212ec0dbb97ceb5671d912e6e61fa802d5.zip |
firmware: arm_scmi: Make tx_prepare time out eventually
SCMI transports based on shared memory, at start of transmissions, have
to wait for the shared Tx channel area to be eventually freed by the
SCMI platform before accessing the channel. In fact the channel is owned
by the SCMI platform until marked as free by the platform itself and,
as such, cannot be used by the agent until relinquished.
As a consequence a badly misbehaving SCMI platform firmware could lock
the channel indefinitely and make the kernel side SCMI stack loop
forever waiting for such channel to be freed, possibly hanging the
whole boot sequence.
Add a timeout to the existent Tx waiting spin-loop so that, when the
system ends up in this situation, the SCMI stack can at least bail-out,
nosily warn the user, and abort the transmission.
Reported-by: YaxiongTian <iambestgod@outlook.com>
Suggested-by: YaxiongTian <iambestgod@outlook.com>
Cc: Vincent Guittot <vincent.guittot@linaro.org>
Cc: Etienne Carriere <etienne.carriere@linaro.org>
Cc: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: Cristian Marussi <cristian.marussi@arm.com>
Link: https://lore.kernel.org/r/20221028140833.280091-3-cristian.marussi@arm.com
Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
Diffstat (limited to 'drivers/firmware/arm_scmi/mailbox.c')
-rw-r--r-- | drivers/firmware/arm_scmi/mailbox.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/firmware/arm_scmi/mailbox.c b/drivers/firmware/arm_scmi/mailbox.c index 08ff4d110beb..1e40cb035044 100644 --- a/drivers/firmware/arm_scmi/mailbox.c +++ b/drivers/firmware/arm_scmi/mailbox.c @@ -36,7 +36,7 @@ static void tx_prepare(struct mbox_client *cl, void *m) { struct scmi_mailbox *smbox = client_to_scmi_mailbox(cl); - shmem_tx_prepare(smbox->shmem, m); + shmem_tx_prepare(smbox->shmem, m, smbox->cinfo); } static void rx_callback(struct mbox_client *cl, void *m) |