aboutsummaryrefslogtreecommitdiffstats
path: root/init/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'init/main.c')
-rw-r--r--init/main.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/init/main.c b/init/main.c
index b5a892c68375..844209453c02 100644
--- a/init/main.c
+++ b/init/main.c
@@ -62,6 +62,7 @@
62#include <linux/signal.h> 62#include <linux/signal.h>
63#include <linux/idr.h> 63#include <linux/idr.h>
64#include <linux/ftrace.h> 64#include <linux/ftrace.h>
65#include <linux/async.h>
65#include <trace/boot.h> 66#include <trace/boot.h>
66 67
67#include <asm/io.h> 68#include <asm/io.h>
@@ -599,7 +600,8 @@ asmlinkage void __init start_kernel(void)
599 sched_clock_init(); 600 sched_clock_init();
600 profile_init(); 601 profile_init();
601 if (!irqs_disabled()) 602 if (!irqs_disabled())
602 printk("start_kernel(): bug: interrupts were enabled early\n"); 603 printk(KERN_CRIT "start_kernel(): bug: interrupts were "
604 "enabled early\n");
603 early_boot_irqs_on(); 605 early_boot_irqs_on();
604 local_irq_enable(); 606 local_irq_enable();
605 607
@@ -684,7 +686,7 @@ asmlinkage void __init start_kernel(void)
684 rest_init(); 686 rest_init();
685} 687}
686 688
687static int initcall_debug; 689int initcall_debug;
688core_param(initcall_debug, initcall_debug, bool, 0644); 690core_param(initcall_debug, initcall_debug, bool, 0644);
689 691
690int do_one_initcall(initcall_t fn) 692int do_one_initcall(initcall_t fn)
@@ -785,6 +787,8 @@ static void run_init_process(char *init_filename)
785 */ 787 */
786static noinline int init_post(void) 788static noinline int init_post(void)
787{ 789{
790 /* need to finish all async __init code before freeing the memory */
791 async_synchronize_full();
788 free_initmem(); 792 free_initmem();
789 unlock_kernel(); 793 unlock_kernel();
790 mark_rodata_ro(); 794 mark_rodata_ro();