From: Linus Torvalds Date: Sun, 26 Oct 2008 02:53:38 +0000 (-0700) Subject: Revert "Call init_workqueues before pre smp initcalls." X-Git-Tag: v2.6.28-rc2~11 X-Git-Url: http://pilppa.com/gitweb/?a=commitdiff_plain;h=4403b406d4369a275d483ece6ddee0088cc0d592;p=linux-2.6-omap-h63xx.git 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 Cc: Rusty Russell Signed-off-by: Linus Torvalds --- diff --git a/init/main.c b/init/main.c index 130d1a0eef1..7e117a231af 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 8aff79d90dd..9bc4c00872c 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);