2018-10-30 18:58:17

by Stefan Wahren

[permalink] [raw]
Subject: [PATCH] firmware: raspberrypi: Define timeout for transactions

We should never assume to get a reply from the firmware otherwise
the call could block forever and the user don't get informed. So
define a timeout of 1 sec and print a stacktrace once in the unlikely
case the timeout expired.

Signed-off-by: Stefan Wahren <[email protected]>
---
drivers/firmware/raspberrypi.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/drivers/firmware/raspberrypi.c b/drivers/firmware/raspberrypi.c
index a200a21..bf45ac4 100644
--- a/drivers/firmware/raspberrypi.c
+++ b/drivers/firmware/raspberrypi.c
@@ -56,8 +56,12 @@ rpi_firmware_transaction(struct rpi_firmware *fw, u32 chan, u32 data)
reinit_completion(&fw->c);
ret = mbox_send_message(fw->chan, &message);
if (ret >= 0) {
- wait_for_completion(&fw->c);
- ret = 0;
+ if (wait_for_completion_timeout(&fw->c, HZ)) {
+ ret = 0;
+ } else {
+ ret = -ETIMEDOUT;
+ WARN_ONCE(1, "Firmware transaction timeout");
+ }
} else {
dev_err(fw->cl.dev, "mbox_send_message returned %d\n", ret);
}
--
2.7.4



2018-10-31 17:18:01

by Eric Anholt

[permalink] [raw]
Subject: Re: [PATCH] firmware: raspberrypi: Define timeout for transactions

Stefan Wahren <[email protected]> writes:

> We should never assume to get a reply from the firmware otherwise
> the call could block forever and the user don't get informed. So
> define a timeout of 1 sec and print a stacktrace once in the unlikely
> case the timeout expired.
>
> Signed-off-by: Stefan Wahren <[email protected]>

Reviewed-by: Eric Anholt <[email protected]>


Attachments:
signature.asc (847.00 B)

2018-11-06 18:24:23

by Stefan Wahren

[permalink] [raw]
Subject: Re: [PATCH] firmware: raspberrypi: Define timeout for transactions

> Eric Anholt <[email protected]> hat am 31. Oktober 2018 um 18:16 geschrieben:
>
>
> Stefan Wahren <[email protected]> writes:
>
> > We should never assume to get a reply from the firmware otherwise
> > the call could block forever and the user don't get informed. So
> > define a timeout of 1 sec and print a stacktrace once in the unlikely
> > case the timeout expired.
> >
> > Signed-off-by: Stefan Wahren <[email protected]>
>
> Reviewed-by: Eric Anholt <[email protected]>

Applied to bcm2835-soc-next