diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-10-26 05:53:38 +0300 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-10-26 05:53:38 +0300 |
commit | 4403b406d4369a275d483ece6ddee0088cc0d592 (patch) | |
tree | caefd6b7aabc1c517942be1abf25d841b181f323 | |
parent | e013e13bf605b9e6b702adffbe2853cfc60e7806 (diff) | |
download | linux-4403b406d4369a275d483ece6ddee0088cc0d592.tar.xz |
Revert "Call init_workqueues before pre smp initcalls."
This reverts commit a802dd0eb5fc97a50cf1abb1f788a8f6cc5db635 by moving
the call to init_workqueues() back where it belongs - after SMP has been
initialized.
It also moves stop_machine_init() - which needs workqueues - to a later
phase using a core_initcall() instead of early_initcall(). That should
satisfy all ordering requirements, and was apparently the reason why
init_workqueues() was moved to be too early.
Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
Cc: Rusty Russell <rusty@rustcorp.com.au>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r-- | init/main.c | 3 | ||||
-rw-r--r-- | kernel/stop_machine.c | 2 |
2 files changed, 2 insertions, 3 deletions
diff --git a/init/main.c b/init/main.c index 130d1a0eef11..7e117a231af1 100644 --- a/init/main.c +++ b/init/main.c @@ -768,6 +768,7 @@ static void __init do_initcalls(void) static void __init do_basic_setup(void) { rcu_init_sched(); /* needed by module_init stage. */ + init_workqueues(); usermodehelper_init(); driver_init(); init_irq_proc(); @@ -851,8 +852,6 @@ static int __init kernel_init(void * unused) cad_pid = task_pid(current); - init_workqueues(); - smp_prepare_cpus(setup_max_cpus); do_pre_smp_initcalls(); diff --git a/kernel/stop_machine.c b/kernel/stop_machine.c index 8aff79d90ddc..9bc4c00872c9 100644 --- a/kernel/stop_machine.c +++ b/kernel/stop_machine.c @@ -160,4 +160,4 @@ static int __init stop_machine_init(void) stop_machine_work = alloc_percpu(struct work_struct); return 0; } -early_initcall(stop_machine_init); +core_initcall(stop_machine_init); |