#include <linux/ptrace.h>
#include <linux/blkdev.h>
#include <linux/elevator.h>
+#include <linux/sched_clock.h>
+#include <linux/random.h>
+#include <linux/time_log.h>
#include <asm/io.h>
#include <asm/bugs.h>
#include <asm/setup.h>
#include <asm/sections.h>
#include <asm/cacheflush.h>
+#include <linux/bootprof.h>
#ifdef CONFIG_X86_LOCAL_APIC
#include <asm/smp.h>
char __initdata boot_command_line[COMMAND_LINE_SIZE];
/* Untouched saved command line (eg. for /proc) */
char *saved_command_line;
+EXPORT_SYMBOL_GPL(saved_command_line);
/* Command line for parameter parsing */
static char *static_command_line;
softirq_init();
timekeeping_init();
time_init();
+ sched_clock_postinit();
profile_init();
call_function_init();
WARN(!irqs_disabled(), "Interrupts were enabled early\n");
#ifdef CONFIG_X86
if (efi_enabled(EFI_RUNTIME_SERVICES))
efi_enter_virtual_mode();
+#endif
+#ifdef CONFIG_X86_ESPFIX64
+ /* Should be run before the first non-init thread is created */
+ init_espfix_bsp();
#endif
thread_info_cache_init();
cred_init();
{
int count = preempt_count();
int ret;
-
+ TIME_LOG_START();
if (initcall_debug)
ret = do_one_initcall_debug(fn);
else
}
WARN(msgbuf[0], "initcall %pF returned with %s\n", fn, msgbuf);
+ TIME_LOG_END("[init] f(%p)\n", fn);
return ret;
}
do_ctors();
usermodehelper_enable();
do_initcalls();
+ random_int_secret_init();
}
static void __init do_pre_smp_initcalls(void)
flush_delayed_fput();
+ log_boot("Kernel_init_done");
+
if (ramdisk_execute_command) {
if (!run_init_process(ramdisk_execute_command))
return 0;
"See Linux Documentation/init.txt for guidance.");
}
+
+#ifdef CONFIG_MTK_HIBERNATION
+// IPO-H, move here for console ok after hibernaton
+extern int software_resume(void);
+#endif
static noinline void __init kernel_init_freeable(void)
{
/*
(void) sys_dup(0);
(void) sys_dup(0);
+
+#ifdef CONFIG_MTK_HIBERNATION
+// IPO-H, move here for console ok after hibernaton resume
+ software_resume();
+#endif
/*
* check if there is an early userspace init. If yes, let it do all
* the work