diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-10-25 22:53:38 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-10-25 22:53:38 -0400 |
commit | 4403b406d4369a275d483ece6ddee0088cc0d592 (patch) | |
tree | caefd6b7aabc1c517942be1abf25d841b181f323 | |
parent | e013e13bf605b9e6b702adffbe2853cfc60e7806 (diff) |
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) | |||
768 | static void __init do_basic_setup(void) | 768 | static void __init do_basic_setup(void) |
769 | { | 769 | { |
770 | rcu_init_sched(); /* needed by module_init stage. */ | 770 | rcu_init_sched(); /* needed by module_init stage. */ |
771 | init_workqueues(); | ||
771 | usermodehelper_init(); | 772 | usermodehelper_init(); |
772 | driver_init(); | 773 | driver_init(); |
773 | init_irq_proc(); | 774 | init_irq_proc(); |
@@ -851,8 +852,6 @@ static int __init kernel_init(void * unused) | |||
851 | 852 | ||
852 | cad_pid = task_pid(current); | 853 | cad_pid = task_pid(current); |
853 | 854 | ||
854 | init_workqueues(); | ||
855 | |||
856 | smp_prepare_cpus(setup_max_cpus); | 855 | smp_prepare_cpus(setup_max_cpus); |
857 | 856 | ||
858 | do_pre_smp_initcalls(); | 857 | 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) | |||
160 | stop_machine_work = alloc_percpu(struct work_struct); | 160 | stop_machine_work = alloc_percpu(struct work_struct); |
161 | return 0; | 161 | return 0; |
162 | } | 162 | } |
163 | early_initcall(stop_machine_init); | 163 | core_initcall(stop_machine_init); |