]> bbs.cooldavid.org Git - net-next-2.6.git/blobdiff - init/main.c
Better interface for hooking early initcalls
[net-next-2.6.git] / init / main.c
index 0604cbcaf1e4e2030f487e663966cba66517101b..b6fec08dbbef65236edd042b7834be771de6faf0 100644 (file)
@@ -743,13 +743,13 @@ static void __init do_one_initcall(initcall_t fn)
 }
 
 
-extern initcall_t __initcall_start[], __initcall_end[];
+extern initcall_t __initcall_start[], __initcall_end[], __early_initcall_end[];
 
 static void __init do_initcalls(void)
 {
        initcall_t *call;
 
-       for (call = __initcall_start; call < __initcall_end; call++)
+       for (call = __early_initcall_end; call < __initcall_end; call++)
                do_one_initcall(*call);
 
        /* Make sure there is no pending stuff from the initcall sequence */
@@ -783,6 +783,14 @@ static int __init nosoftlockup_setup(char *str)
 }
 __setup("nosoftlockup", nosoftlockup_setup);
 
+static void __init __do_pre_smp_initcalls(void)
+{
+       initcall_t *call;
+
+       for (call = __initcall_start; call < __early_initcall_end; call++)
+               do_one_initcall(*call);
+}
+
 static void __init do_pre_smp_initcalls(void)
 {
        extern int spawn_ksoftirqd(void);
@@ -865,6 +873,7 @@ static int __init kernel_init(void * unused)
 
        smp_prepare_cpus(setup_max_cpus);
 
+       __do_pre_smp_initcalls();
        do_pre_smp_initcalls();
 
        smp_init();