aboutsummaryrefslogtreecommitdiffstats
path: root/init
diff options
context:
space:
mode:
Diffstat (limited to 'init')
-rw-r--r--init/main.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/init/main.c b/init/main.c
index 0604cbcaf1e4..b6fec08dbbef 100644
--- a/init/main.c
+++ b/init/main.c
@@ -743,13 +743,13 @@ static void __init do_one_initcall(initcall_t fn)
743} 743}
744 744
745 745
746extern initcall_t __initcall_start[], __initcall_end[]; 746extern initcall_t __initcall_start[], __initcall_end[], __early_initcall_end[];
747 747
748static void __init do_initcalls(void) 748static void __init do_initcalls(void)
749{ 749{
750 initcall_t *call; 750 initcall_t *call;
751 751
752 for (call = __initcall_start; call < __initcall_end; call++) 752 for (call = __early_initcall_end; call < __initcall_end; call++)
753 do_one_initcall(*call); 753 do_one_initcall(*call);
754 754
755 /* Make sure there is no pending stuff from the initcall sequence */ 755 /* Make sure there is no pending stuff from the initcall sequence */
@@ -783,6 +783,14 @@ static int __init nosoftlockup_setup(char *str)
783} 783}
784__setup("nosoftlockup", nosoftlockup_setup); 784__setup("nosoftlockup", nosoftlockup_setup);
785 785
786static void __init __do_pre_smp_initcalls(void)
787{
788 initcall_t *call;
789
790 for (call = __initcall_start; call < __early_initcall_end; call++)
791 do_one_initcall(*call);
792}
793
786static void __init do_pre_smp_initcalls(void) 794static void __init do_pre_smp_initcalls(void)
787{ 795{
788 extern int spawn_ksoftirqd(void); 796 extern int spawn_ksoftirqd(void);
@@ -865,6 +873,7 @@ static int __init kernel_init(void * unused)
865 873
866 smp_prepare_cpus(setup_max_cpus); 874 smp_prepare_cpus(setup_max_cpus);
867 875
876 __do_pre_smp_initcalls();
868 do_pre_smp_initcalls(); 877 do_pre_smp_initcalls();
869 878
870 smp_init(); 879 smp_init();