[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