Re: [PATCH] Teach RCU that idle task is not quiscent state at boot

From: Ingo Molnar
Date: Mon Feb 23 2009 - 12:14:11 EST



* Paul E. McKenney <paulmck@xxxxxxxxxxxxxxxxxx> wrote:

> This patch fixes a bug located by Vegard Nossum with the aid of
> kmemcheck.
>
> The boot CPU runs in the context of its idle thread during boot-up.
> During this time, idle_cpu(0) will always return nonzero, which will
> fool Classic and Hierarchical RCU into deciding that a large chunk of
> the boot-up sequence is a big long quiescent state. This in turn causes
> RCU to prematurely end grace periods during this time.
>
> This patch changes the rcutree.c and rcuclassic.c rcu_check_callbacks()
> function to ignore the idle tasks as a quiescent state until the
> system_state is no longer SYSTEM_BOOTING. After this point, the idle
> task really does represent a quiescent state.
>
> In addition, this patch takes Nick Piggin's suggestion to make the
> system_state global variable be __read_mostly.
>
> Located-by: Vegard Nossum <vegard.nossum@xxxxxxxxx>
> Tested-by: Vegard Nossum <vegard.nossum@xxxxxxxxx>
> Signed-off-by: Paul E. McKenney <paulmck@xxxxxxxxxxxxxxxxxx>
> ---
>
> init/main.c | 2 +-
> kernel/rcuclassic.c | 4 ++--
> kernel/rcutree.c | 4 ++--
> 3 files changed, 5 insertions(+), 5 deletions(-)

Applied to tip:core/urgent, thanks Paul!

Ingo
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/