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>
 
 static void __init do_basic_setup(void)
 {
        rcu_init_sched(); /* needed by module_init stage. */
+       init_workqueues();
        usermodehelper_init();
        driver_init();
        init_irq_proc();
 
        cad_pid = task_pid(current);
 
-       init_workqueues();
-
        smp_prepare_cpus(setup_max_cpus);
 
        do_pre_smp_initcalls();
 
        stop_machine_work = alloc_percpu(struct work_struct);
        return 0;
 }
-early_initcall(stop_machine_init);
+core_initcall(stop_machine_init);