|
@@ -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)
|
|
static void __init do_initcalls(void)
|
|
{
|
|
{
|
|
initcall_t *call;
|
|
initcall_t *call;
|
|
|
|
|
|
- for (call = __initcall_start; call < __initcall_end; call++)
|
|
|
|
|
|
+ for (call = __early_initcall_end; call < __initcall_end; call++)
|
|
do_one_initcall(*call);
|
|
do_one_initcall(*call);
|
|
|
|
|
|
/* Make sure there is no pending stuff from the initcall sequence */
|
|
/* 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);
|
|
__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)
|
|
static void __init do_pre_smp_initcalls(void)
|
|
{
|
|
{
|
|
extern int spawn_ksoftirqd(void);
|
|
extern int spawn_ksoftirqd(void);
|
|
@@ -865,6 +873,7 @@ static int __init kernel_init(void * unused)
|
|
|
|
|
|
smp_prepare_cpus(setup_max_cpus);
|
|
smp_prepare_cpus(setup_max_cpus);
|
|
|
|
|
|
|
|
+ __do_pre_smp_initcalls();
|
|
do_pre_smp_initcalls();
|
|
do_pre_smp_initcalls();
|
|
|
|
|
|
smp_init();
|
|
smp_init();
|