Merge branch 'x86/entry' into ras/core
[linux-2.6-microblaze.git] / init / main.c
index 5803ecb..b59e093 100644 (file)
@@ -63,6 +63,7 @@
 #include <linux/debugobjects.h>
 #include <linux/lockdep.h>
 #include <linux/kmemleak.h>
+#include <linux/padata.h>
 #include <linux/pid_namespace.h>
 #include <linux/device/driver.h>
 #include <linux/kthread.h>
@@ -1038,6 +1039,8 @@ asmlinkage __visible void __init start_kernel(void)
 
        /* Do the rest non-__init'ed, we're now alive */
        arch_call_rest_init();
+
+       prevent_tail_call_optimization();
 }
 
 /* Call all constructor functions linked into the kernel. */
@@ -1409,6 +1412,8 @@ static int __ref kernel_init(void *unused)
 
        rcu_end_inkernel_boot();
 
+       do_sysctl_args();
+
        if (ramdisk_execute_command) {
                ret = run_init_process(ramdisk_execute_command);
                if (!ret)
@@ -1430,6 +1435,16 @@ static int __ref kernel_init(void *unused)
                panic("Requested init %s failed (error %d).",
                      execute_command, ret);
        }
+
+       if (CONFIG_DEFAULT_INIT[0] != '\0') {
+               ret = run_init_process(CONFIG_DEFAULT_INIT);
+               if (ret)
+                       pr_err("Default init %s failed (error %d)\n",
+                              CONFIG_DEFAULT_INIT, ret);
+               else
+                       return 0;
+       }
+
        if (!try_to_run_init_process("/sbin/init") ||
            !try_to_run_init_process("/etc/init") ||
            !try_to_run_init_process("/bin/init") ||
@@ -1480,6 +1495,7 @@ static noinline void __init kernel_init_freeable(void)
        smp_init();
        sched_init_smp();
 
+       padata_init();
        page_alloc_init_late();
        /* Initialize page ext after all struct pages are initialized. */
        page_ext_init();