OSDN Git Service

mm: Move mm_cachep initialization to mm_init()
[tomoyo/tomoyo-test1.git] / init / main.c
index 0866e5d..f1d1a54 100644 (file)
@@ -34,6 +34,7 @@
 #include <linux/percpu.h>
 #include <linux/kmod.h>
 #include <linux/kprobes.h>
+#include <linux/kmsan.h>
 #include <linux/vmalloc.h>
 #include <linux/kernel_stat.h>
 #include <linux/start_kernel.h>
@@ -117,6 +118,7 @@ static int kernel_init(void *);
 
 extern void init_IRQ(void);
 extern void radix_tree_init(void);
+extern void maple_tree_init(void);
 
 /*
  * Debug helper: via this flag we know that we are in 'early bootup code'
@@ -422,7 +424,7 @@ static void __init setup_boot_config(void)
        if (!data)
                data = xbc_get_embedded_bootconfig(&size);
 
-       strlcpy(tmp_cmdline, boot_command_line, COMMAND_LINE_SIZE);
+       strscpy(tmp_cmdline, boot_command_line, COMMAND_LINE_SIZE);
        err = parse_args("bootconfig", tmp_cmdline, NULL, 0, 0, 0, NULL,
                         bootconfig_params);
 
@@ -762,7 +764,7 @@ void __init parse_early_param(void)
                return;
 
        /* All fall through to do_early_param. */
-       strlcpy(tmp_cmdline, boot_command_line, COMMAND_LINE_SIZE);
+       strscpy(tmp_cmdline, boot_command_line, COMMAND_LINE_SIZE);
        parse_early_options(tmp_cmdline);
        done = 1;
 }
@@ -836,6 +838,7 @@ static void __init mm_init(void)
        init_mem_debugging_and_hardening();
        kfence_alloc_pool();
        report_meminit();
+       kmsan_init_shadow();
        stack_depot_early_init();
        mem_init();
        mem_init_print_info();
@@ -849,10 +852,15 @@ static void __init mm_init(void)
        pgtable_init();
        debug_objects_mem_init();
        vmalloc_init();
+       /* Should be run after vmap initialization */
+       if (early_page_ext_enabled())
+               page_ext_init();
        /* Should be run before the first non-init thread is created */
        init_espfix_bsp();
        /* Should be run after espfix64 is set up. */
        pti_init();
+       kmsan_init_runtime();
+       mm_cache_init();
 }
 
 #ifdef CONFIG_RANDOMIZE_KSTACK_OFFSET
@@ -1005,6 +1013,7 @@ asmlinkage __visible void __init __no_sanitize_address start_kernel(void)
                 "Interrupts were enabled *very* early, fixing it\n"))
                local_irq_disable();
        radix_tree_init();
+       maple_tree_init();
 
        /*
         * Set up housekeeping before setting up workqueues to allow the unbound
@@ -1236,7 +1245,7 @@ __setup("initcall_blacklist=", initcall_blacklist);
 static __init_or_module void
 trace_initcall_start_cb(void *data, initcall_t fn)
 {
-       ktime_t *calltime = (ktime_t *)data;
+       ktime_t *calltime = data;
 
        printk(KERN_DEBUG "calling  %pS @ %i\n", fn, task_pid_nr(current));
        *calltime = ktime_get();
@@ -1245,7 +1254,7 @@ trace_initcall_start_cb(void *data, initcall_t fn)
 static __init_or_module void
 trace_initcall_finish_cb(void *data, initcall_t fn, int ret)
 {
-       ktime_t rettime, *calltime = (ktime_t *)data;
+       ktime_t rettime, *calltime = data;
 
        rettime = ktime_get();
        printk(KERN_DEBUG "initcall %pS returned %d after %lld usecs\n",
@@ -1617,7 +1626,8 @@ static noinline void __init kernel_init_freeable(void)
        padata_init();
        page_alloc_init_late();
        /* Initialize page ext after all struct pages are initialized. */
-       page_ext_init();
+       if (!early_page_ext_enabled())
+               page_ext_init();
 
        do_basic_setup();