diff mbox series

[v2,3/3] arm: apple: Increase RTKit timeouts

Message ID 20220614070909.8458-4-j@jannau.net
State Accepted
Commit 942b54b4ee9ad6509a144bb78093f4ee376b7762
Delegated to: Tom Rini
Headers show
Series Improve robustness of NVMe suuport for Apple silicon devices | expand

Commit Message

Janne Grunau June 14, 2022, 7:09 a.m. UTC
Timeouts are not expected to happen and are handled as fatal errors.
Increase all timeouts to 1 second as defensive measure to avoid relying
on the timing behaviour of certain firmware versions or configurations.

Signed-off-by: Janne Grunau <j@jannau.net>
---

(no changes since v1)

 arch/arm/mach-apple/rtkit.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

Comments

Mark Kettenis June 14, 2022, 8:24 a.m. UTC | #1
> From: Janne Grunau <j@jannau.net>
> Date: Tue, 14 Jun 2022 09:09:09 +0200
> 
> Timeouts are not expected to happen and are handled as fatal errors.
> Increase all timeouts to 1 second as defensive measure to avoid relying
> on the timing behaviour of certain firmware versions or configurations.
> 
> Signed-off-by: Janne Grunau <j@jannau.net>

Reviewed-by: Mark Kettenis <kettenis@openbsd.org>
Tested-by: Mark Kettenis <kettenis@openbsd.org>

> ---
> 
> (no changes since v1)
> 
>  arch/arm/mach-apple/rtkit.c | 10 ++++++----
>  1 file changed, 6 insertions(+), 4 deletions(-)
> 
> diff --git a/arch/arm/mach-apple/rtkit.c b/arch/arm/mach-apple/rtkit.c
> index da7771844230..a550b553b663 100644
> --- a/arch/arm/mach-apple/rtkit.c
> +++ b/arch/arm/mach-apple/rtkit.c
> @@ -52,6 +52,8 @@
>  #define APPLE_RTKIT_BUFFER_REQUEST_SIZE GENMASK(51, 44)
>  #define APPLE_RTKIT_BUFFER_REQUEST_IOVA GENMASK(41, 0)
>  
> +#define TIMEOUT_1SEC_US 1000000
> +
>  struct apple_rtkit {
>  	struct mbox_chan *chan;
>  	void *cookie;
> @@ -168,7 +170,7 @@ int apple_rtkit_boot(struct apple_rtkit *rtk)
>  		return ret;
>  
>  	/* Wait for protocol version negotiation message. */
> -	ret = mbox_recv(rtk->chan, &msg, 10000);
> +	ret = mbox_recv(rtk->chan, &msg, TIMEOUT_1SEC_US);
>  	if (ret < 0)
>  		return ret;
>  
> @@ -210,7 +212,7 @@ int apple_rtkit_boot(struct apple_rtkit *rtk)
>  
>  wait_epmap:
>  	/* Wait for endpoint map message. */
> -	ret = mbox_recv(rtk->chan, &msg, 10000);
> +	ret = mbox_recv(rtk->chan, &msg, TIMEOUT_1SEC_US);
>  	if (ret < 0)
>  		return ret;
>  
> @@ -275,7 +277,7 @@ wait_epmap:
>  
>  	pwrstate = APPLE_RTKIT_PWR_STATE_SLEEP;
>  	while (pwrstate != APPLE_RTKIT_PWR_STATE_ON) {
> -		ret = mbox_recv(rtk->chan, &msg, 100000);
> +		ret = mbox_recv(rtk->chan, &msg, TIMEOUT_1SEC_US);
>  		if (ret < 0)
>  			return ret;
>  
> @@ -330,7 +332,7 @@ int apple_rtkit_shutdown(struct apple_rtkit *rtk, int pwrstate)
>  	if (ret < 0)
>  		return ret;
>  
> -	ret = mbox_recv(rtk->chan, &msg, 100000);
> +	ret = mbox_recv(rtk->chan, &msg, TIMEOUT_1SEC_US);
>  	if (ret < 0)
>  		return ret;
>  
> -- 
> 2.35.1
> 
>
Tom Rini June 23, 2022, 3:28 p.m. UTC | #2
On Tue, Jun 14, 2022 at 09:09:09AM +0200, Janne Grunau wrote:

> Timeouts are not expected to happen and are handled as fatal errors.
> Increase all timeouts to 1 second as defensive measure to avoid relying
> on the timing behaviour of certain firmware versions or configurations.
> 
> Signed-off-by: Janne Grunau <j@jannau.net>
> Reviewed-by: Mark Kettenis <kettenis@openbsd.org>
> Tested-by: Mark Kettenis <kettenis@openbsd.org>

Applied to u-boot/master, thanks!
diff mbox series

Patch

diff --git a/arch/arm/mach-apple/rtkit.c b/arch/arm/mach-apple/rtkit.c
index da7771844230..a550b553b663 100644
--- a/arch/arm/mach-apple/rtkit.c
+++ b/arch/arm/mach-apple/rtkit.c
@@ -52,6 +52,8 @@ 
 #define APPLE_RTKIT_BUFFER_REQUEST_SIZE GENMASK(51, 44)
 #define APPLE_RTKIT_BUFFER_REQUEST_IOVA GENMASK(41, 0)
 
+#define TIMEOUT_1SEC_US 1000000
+
 struct apple_rtkit {
 	struct mbox_chan *chan;
 	void *cookie;
@@ -168,7 +170,7 @@  int apple_rtkit_boot(struct apple_rtkit *rtk)
 		return ret;
 
 	/* Wait for protocol version negotiation message. */
-	ret = mbox_recv(rtk->chan, &msg, 10000);
+	ret = mbox_recv(rtk->chan, &msg, TIMEOUT_1SEC_US);
 	if (ret < 0)
 		return ret;
 
@@ -210,7 +212,7 @@  int apple_rtkit_boot(struct apple_rtkit *rtk)
 
 wait_epmap:
 	/* Wait for endpoint map message. */
-	ret = mbox_recv(rtk->chan, &msg, 10000);
+	ret = mbox_recv(rtk->chan, &msg, TIMEOUT_1SEC_US);
 	if (ret < 0)
 		return ret;
 
@@ -275,7 +277,7 @@  wait_epmap:
 
 	pwrstate = APPLE_RTKIT_PWR_STATE_SLEEP;
 	while (pwrstate != APPLE_RTKIT_PWR_STATE_ON) {
-		ret = mbox_recv(rtk->chan, &msg, 100000);
+		ret = mbox_recv(rtk->chan, &msg, TIMEOUT_1SEC_US);
 		if (ret < 0)
 			return ret;
 
@@ -330,7 +332,7 @@  int apple_rtkit_shutdown(struct apple_rtkit *rtk, int pwrstate)
 	if (ret < 0)
 		return ret;
 
-	ret = mbox_recv(rtk->chan, &msg, 100000);
+	ret = mbox_recv(rtk->chan, &msg, TIMEOUT_1SEC_US);
 	if (ret < 0)
 		return ret;