diff options
Diffstat (limited to 'init')
-rw-r--r-- | init/main.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/init/main.c b/init/main.c index a8a58e2794a5..5c4fd68a8671 100644 --- a/init/main.c +++ b/init/main.c | |||
@@ -551,6 +551,14 @@ asmlinkage __visible void __init start_kernel(void) | |||
551 | "Interrupts were enabled *very* early, fixing it\n")) | 551 | "Interrupts were enabled *very* early, fixing it\n")) |
552 | local_irq_disable(); | 552 | local_irq_disable(); |
553 | idr_init_cache(); | 553 | idr_init_cache(); |
554 | |||
555 | /* | ||
556 | * Allow workqueue creation and work item queueing/cancelling | ||
557 | * early. Work item execution depends on kthreads and starts after | ||
558 | * workqueue_init(). | ||
559 | */ | ||
560 | workqueue_init_early(); | ||
561 | |||
554 | rcu_init(); | 562 | rcu_init(); |
555 | 563 | ||
556 | /* trace_printk() and trace points may be used after this */ | 564 | /* trace_printk() and trace points may be used after this */ |
@@ -1005,6 +1013,8 @@ static noinline void __init kernel_init_freeable(void) | |||
1005 | 1013 | ||
1006 | smp_prepare_cpus(setup_max_cpus); | 1014 | smp_prepare_cpus(setup_max_cpus); |
1007 | 1015 | ||
1016 | workqueue_init(); | ||
1017 | |||
1008 | do_pre_smp_initcalls(); | 1018 | do_pre_smp_initcalls(); |
1009 | lockup_detector_init(); | 1019 | lockup_detector_init(); |
1010 | 1020 | ||