Merge tag 'thermal-6.4-rc1-2' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael...
[linux-block.git] / init / main.c
index bb87b789c54396920870b99167735fb4df8ac0cf..af50044deed567a688a2fb8d717fe11f3cbd26cb 100644 (file)
@@ -62,7 +62,6 @@
 #include <linux/rmap.h>
 #include <linux/mempolicy.h>
 #include <linux/key.h>
-#include <linux/page_ext.h>
 #include <linux/debug_locks.h>
 #include <linux/debugobjects.h>
 #include <linux/lockdep.h>
@@ -687,7 +686,7 @@ static void __init setup_command_line(char *command_line)
 
 static __initdata DECLARE_COMPLETION(kthreadd_done);
 
-noinline void __ref rest_init(void)
+noinline void __ref __noreturn rest_init(void)
 {
        struct task_struct *tsk;
        int pid;
@@ -711,7 +710,7 @@ noinline void __ref rest_init(void)
        rcu_read_unlock();
 
        numa_default_policy();
-       pid = kernel_thread(kthreadd, NULL, CLONE_FS | CLONE_FILES);
+       pid = kernel_thread(kthreadd, NULL, NULL, CLONE_FS | CLONE_FILES);
        rcu_read_lock();
        kthreadd_task = find_task_by_pid_ns(pid, &init_pid_ns);
        rcu_read_unlock();
@@ -807,69 +806,6 @@ static inline void initcall_debug_enable(void)
 }
 #endif
 
-/* Report memory auto-initialization states for this boot. */
-static void __init report_meminit(void)
-{
-       const char *stack;
-
-       if (IS_ENABLED(CONFIG_INIT_STACK_ALL_PATTERN))
-               stack = "all(pattern)";
-       else if (IS_ENABLED(CONFIG_INIT_STACK_ALL_ZERO))
-               stack = "all(zero)";
-       else if (IS_ENABLED(CONFIG_GCC_PLUGIN_STRUCTLEAK_BYREF_ALL))
-               stack = "byref_all(zero)";
-       else if (IS_ENABLED(CONFIG_GCC_PLUGIN_STRUCTLEAK_BYREF))
-               stack = "byref(zero)";
-       else if (IS_ENABLED(CONFIG_GCC_PLUGIN_STRUCTLEAK_USER))
-               stack = "__user(zero)";
-       else
-               stack = "off";
-
-       pr_info("mem auto-init: stack:%s, heap alloc:%s, heap free:%s\n",
-               stack, want_init_on_alloc(GFP_KERNEL) ? "on" : "off",
-               want_init_on_free() ? "on" : "off");
-       if (want_init_on_free())
-               pr_info("mem auto-init: clearing system memory may take some time...\n");
-}
-
-/*
- * Set up kernel memory allocators
- */
-static void __init mm_init(void)
-{
-       /*
-        * page_ext requires contiguous pages,
-        * bigger than MAX_ORDER unless SPARSEMEM.
-        */
-       page_ext_init_flatmem();
-       init_mem_debugging_and_hardening();
-       kfence_alloc_pool();
-       report_meminit();
-       kmsan_init_shadow();
-       stack_depot_early_init();
-       mem_init();
-       mem_init_print_info();
-       kmem_cache_init();
-       /*
-        * page_owner must be initialized after buddy is ready, and also after
-        * slab is ready so that stack_depot_init() works properly
-        */
-       page_ext_init_flatmem_late();
-       kmemleak_init();
-       pgtable_init();
-       debug_objects_mem_init();
-       vmalloc_init();
-       /* If no deferred init page_ext now, as vmap is fully initialized */
-       if (!deferred_struct_pages)
-               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
 DEFINE_STATIC_KEY_MAYBE_RO(CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT,
                           randomize_kstack_offset);
@@ -893,7 +829,7 @@ static int __init early_randomize_kstack_offset(char *buf)
 early_param("randomize_kstack_offset", early_randomize_kstack_offset);
 #endif
 
-void __init __weak arch_call_rest_init(void)
+void __init __weak __noreturn arch_call_rest_init(void)
 {
        rest_init();
 }
@@ -941,7 +877,7 @@ static void __init print_unknown_bootoptions(void)
        memblock_free(unknown_options, len);
 }
 
-asmlinkage __visible void __init __no_sanitize_address start_kernel(void)
+asmlinkage __visible void __init __no_sanitize_address __noreturn start_kernel(void)
 {
        char *command_line;
        char *after_dashes;
@@ -972,9 +908,6 @@ asmlinkage __visible void __init __no_sanitize_address start_kernel(void)
        smp_prepare_boot_cpu(); /* arch-specific boot-cpu hooks */
        boot_cpu_hotplug_init();
 
-       build_all_zonelists(NULL);
-       page_alloc_init();
-
        pr_notice("Kernel command line: %s\n", saved_command_line);
        /* parameters may set static keys */
        jump_label_init();
@@ -996,13 +929,13 @@ asmlinkage __visible void __init __no_sanitize_address start_kernel(void)
 
        /*
         * These use large bootmem allocations and must precede
-        * kmem_cache_init()
+        * initalization of page allocator
         */
        setup_log_buf(0);
        vfs_caches_init_early();
        sort_main_extable();
        trap_init();
-       mm_init();
+       mm_core_init();
        poking_init();
        ftrace_init();
 
@@ -1092,14 +1025,6 @@ asmlinkage __visible void __init __no_sanitize_address start_kernel(void)
         */
        locking_selftest();
 
-       /*
-        * This needs to be called before any devices perform DMA
-        * operations that might use the SWIOTLB bounce buffers. It will
-        * mark the bounce buffers as decrypted so that their usage will
-        * not cause "plain-text" data to be decrypted when accessed.
-        */
-       mem_encrypt_init();
-
 #ifdef CONFIG_BLK_DEV_INITRD
        if (initrd_start && !initrd_below_start_ok &&
            page_to_pfn(virt_to_page((void *)initrd_start)) < min_low_pfn) {
@@ -1116,6 +1041,17 @@ asmlinkage __visible void __init __no_sanitize_address start_kernel(void)
                late_time_init();
        sched_clock_init();
        calibrate_delay();
+
+       /*
+        * This needs to be called before any devices perform DMA
+        * operations that might use the SWIOTLB bounce buffers. It will
+        * mark the bounce buffers as decrypted so that their usage will
+        * not cause "plain-text" data to be decrypted when accessed. It
+        * must be called after late_time_init() so that Hyper-V x86/x64
+        * hypercalls work when the SWIOTLB bounce buffers are decrypted.
+        */
+       mem_encrypt_init();
+
        pid_idr_init();
        anon_vma_init();
 #ifdef CONFIG_X86
@@ -1631,9 +1567,6 @@ static noinline void __init kernel_init_freeable(void)
 
        padata_init();
        page_alloc_init_late();
-       /* Initialize page ext after all struct pages are initialized. */
-       if (deferred_struct_pages)
-               page_ext_init();
 
        do_basic_setup();