diff options
author | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2009-09-02 17:01:24 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-09-04 03:29:34 -0400 |
commit | 7db905e636f08ea5bc9825c1f73d77802e8ccad5 (patch) | |
tree | 1fc6699a3e7aa2ef73d4a70005f9e1e3e522079a | |
parent | 29e2035bddecce3eb584a8304528b50da8370a24 (diff) |
rcu: Move end of special early-boot RCU operation earlier
Ingo was getting warnings from rcu_scheduler_starting()
indicating that context switches had occurred before RCU ended
its special early-boot handling of grace periods.
This is a dangerous condition, as it indicates that RCU might
have prematurely ended grace periods. This exploratory fix
moves rcu_scheduler_starting() earlier in boot.
Reported-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
-rw-r--r-- | init/main.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/init/main.c b/init/main.c index 11f4f145be3f..525f6fb2bd22 100644 --- a/init/main.c +++ b/init/main.c | |||
@@ -451,6 +451,7 @@ static noinline void __init_refok rest_init(void) | |||
451 | { | 451 | { |
452 | int pid; | 452 | int pid; |
453 | 453 | ||
454 | rcu_scheduler_starting(); | ||
454 | kernel_thread(kernel_init, NULL, CLONE_FS | CLONE_SIGHAND); | 455 | kernel_thread(kernel_init, NULL, CLONE_FS | CLONE_SIGHAND); |
455 | numa_default_policy(); | 456 | numa_default_policy(); |
456 | pid = kernel_thread(kthreadd, NULL, CLONE_FS | CLONE_FILES); | 457 | pid = kernel_thread(kthreadd, NULL, CLONE_FS | CLONE_FILES); |
@@ -462,7 +463,6 @@ static noinline void __init_refok rest_init(void) | |||
462 | * at least once to get things moving: | 463 | * at least once to get things moving: |
463 | */ | 464 | */ |
464 | init_idle_bootup_task(current); | 465 | init_idle_bootup_task(current); |
465 | rcu_scheduler_starting(); | ||
466 | preempt_enable_no_resched(); | 466 | preempt_enable_no_resched(); |
467 | schedule(); | 467 | schedule(); |
468 | preempt_disable(); | 468 | preempt_disable(); |