Revert "Call init_workqueues before pre smp initcalls."
This reverts commit a802dd0eb5
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>
This commit is contained in:
@@ -768,6 +768,7 @@ static void __init do_initcalls(void)
|
|||||||
static void __init do_basic_setup(void)
|
static void __init do_basic_setup(void)
|
||||||
{
|
{
|
||||||
rcu_init_sched(); /* needed by module_init stage. */
|
rcu_init_sched(); /* needed by module_init stage. */
|
||||||
|
init_workqueues();
|
||||||
usermodehelper_init();
|
usermodehelper_init();
|
||||||
driver_init();
|
driver_init();
|
||||||
init_irq_proc();
|
init_irq_proc();
|
||||||
@@ -851,8 +852,6 @@ static int __init kernel_init(void * unused)
|
|||||||
|
|
||||||
cad_pid = task_pid(current);
|
cad_pid = task_pid(current);
|
||||||
|
|
||||||
init_workqueues();
|
|
||||||
|
|
||||||
smp_prepare_cpus(setup_max_cpus);
|
smp_prepare_cpus(setup_max_cpus);
|
||||||
|
|
||||||
do_pre_smp_initcalls();
|
do_pre_smp_initcalls();
|
||||||
|
@@ -160,4 +160,4 @@ static int __init stop_machine_init(void)
|
|||||||
stop_machine_work = alloc_percpu(struct work_struct);
|
stop_machine_work = alloc_percpu(struct work_struct);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
early_initcall(stop_machine_init);
|
core_initcall(stop_machine_init);
|
||||||
|
Reference in New Issue
Block a user