[PATCH] rtas: Only sleep in rtas_busy_delay if we have useful work to do

Nishanth Aravamudan nacc at us.ibm.com
Fri Apr 8 04:11:49 EST 2011


On 07.04.2011 [21:54:07 +1000], Anton Blanchard wrote:
> 
> RTAS returns extended error codes as a hint of how long the
> OS might want to wait before retrying a call. If we have nothing
> else useful to do we may as well call back straight away.
> 
> This was found when testing the new dynamic dma window feature.
> Firmware split the zeroing of the TCE table into 32k chunks but
> returned 9901 (which is a suggested wait of 10ms). All up this took
> about 10 minutes to complete since msleep is jiffies based and will
> round 10ms up to 20ms.
> 
> With the patch below we take 3 seconds to complete the same test.
> The hint firmware is returning in the RTAS call should definitely
> be decreased, but even if we slept 1ms each iteration this would
> take 32s.
> 
> Signed-off-by: Anton Blanchard <anton at samba.org>

Acked-by: Nishanth Aravamudan <nacc at us.ibm.com>

> ---
> 
> Index: linux-2.6/arch/powerpc/kernel/rtas.c
> ===================================================================
> --- linux-2.6.orig/arch/powerpc/kernel/rtas.c	2011-04-05 11:19:35.023234011 +1000
> +++ linux-2.6/arch/powerpc/kernel/rtas.c	2011-04-07 21:25:24.646414629 +1000
> @@ -494,7 +494,7 @@ unsigned int rtas_busy_delay(int status)
> 
>  	might_sleep();
>  	ms = rtas_busy_delay_time(status);
> -	if (ms)
> +	if (ms && need_resched())
>  		msleep(ms);
> 
>  	return ms;


More information about the Linuxppc-dev mailing list