Merge tag 'f2fs-for-v5.2-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/jaegeu...
[sfrench/cifs-2.6.git] / init / main.c
index 7d4025d665eb95ee439ddb4e5e564aff8fa09c24..33c87e91dc37aa778389244687bfea3cfb5d12ef 100644 (file)
@@ -504,6 +504,10 @@ void __init __weak thread_stack_cache_init(void)
 
 void __init __weak mem_encrypt_init(void) { }
 
+void __init __weak poking_init(void) { }
+
+void __init __weak pgd_cache_init(void) { }
+
 bool initcall_debug;
 core_param(initcall_debug, initcall_debug, bool, 0644);
 
@@ -535,6 +539,7 @@ static void __init mm_init(void)
        init_espfix_bsp();
        /* Should be run after espfix64 is set up. */
        pti_init();
+       pgd_cache_init();
 }
 
 void __init __weak arch_call_rest_init(void)
@@ -564,13 +569,6 @@ asmlinkage __visible void __init start_kernel(void)
        page_address_init();
        pr_notice("%s", linux_banner);
        setup_arch(&command_line);
-       /*
-        * Set up the the initial canary and entropy after arch
-        * and after adding latent and command line entropy.
-        */
-       add_latent_entropy();
-       add_device_randomness(command_line, strlen(command_line));
-       boot_init_stack_canary();
        mm_init_cpumask(&init_mm);
        setup_command_line(command_line);
        setup_nr_cpu_ids();
@@ -655,6 +653,20 @@ asmlinkage __visible void __init start_kernel(void)
        hrtimers_init();
        softirq_init();
        timekeeping_init();
+
+       /*
+        * For best initial stack canary entropy, prepare it after:
+        * - setup_arch() for any UEFI RNG entropy and boot cmdline access
+        * - timekeeping_init() for ktime entropy used in rand_initialize()
+        * - rand_initialize() to get any arch-specific entropy like RDRAND
+        * - add_latent_entropy() to get any latent entropy
+        * - adding command line entropy
+        */
+       rand_initialize();
+       add_latent_entropy();
+       add_device_randomness(command_line, strlen(command_line));
+       boot_init_stack_canary();
+
        time_init();
        printk_safe_init();
        perf_event_init();
@@ -737,6 +749,7 @@ asmlinkage __visible void __init start_kernel(void)
        taskstats_init_early();
        delayacct_init();
 
+       poking_init();
        check_bugs();
 
        acpi_subsystem_init();
@@ -840,7 +853,7 @@ trace_initcall_start_cb(void *data, initcall_t fn)
 {
        ktime_t *calltime = (ktime_t *)data;
 
-       printk(KERN_DEBUG "calling  %pF @ %i\n", fn, task_pid_nr(current));
+       printk(KERN_DEBUG "calling  %pS @ %i\n", fn, task_pid_nr(current));
        *calltime = ktime_get();
 }
 
@@ -854,7 +867,7 @@ trace_initcall_finish_cb(void *data, initcall_t fn, int ret)
        rettime = ktime_get();
        delta = ktime_sub(rettime, *calltime);
        duration = (unsigned long long) ktime_to_ns(delta) >> 10;
-       printk(KERN_DEBUG "initcall %pF returned %d after %lld usecs\n",
+       printk(KERN_DEBUG "initcall %pS returned %d after %lld usecs\n",
                 fn, ret, duration);
 }
 
@@ -911,7 +924,7 @@ int __init_or_module do_one_initcall(initcall_t fn)
                strlcat(msgbuf, "disabled interrupts ", sizeof(msgbuf));
                local_irq_enable();
        }
-       WARN(msgbuf[0], "initcall %pF returned with %s\n", fn, msgbuf);
+       WARN(msgbuf[0], "initcall %pS returned with %s\n", fn, msgbuf);
 
        add_latent_entropy();
        return ret;