This patch identifies the point where memblock alloc start. It has no
functional.

Signed-off-by: Pingfan Liu <[email protected]>
Cc: Thomas Gleixner <[email protected]>
Cc: Ingo Molnar <[email protected]>
Cc: Borislav Petkov <[email protected]>
Cc: "H. Peter Anvin" <[email protected]>
Cc: Dave Hansen <[email protected]>
Cc: Andy Lutomirski <[email protected]>
Cc: Peter Zijlstra <[email protected]>
Cc: "Rafael J. Wysocki" <[email protected]>
Cc: Len Brown <[email protected]>
Cc: Yinghai Lu <[email protected]>
Cc: Tejun Heo <[email protected]>
Cc: Chao Fan <[email protected]>
Cc: Baoquan He <[email protected]>
Cc: Juergen Gross <[email protected]>
Cc: Andrew Morton <[email protected]>
Cc: Mike Rapoport <[email protected]>
Cc: Vlastimil Babka <[email protected]>
Cc: Michal Hocko <[email protected]>
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
---
 arch/x86/kernel/setup.c | 54 ++++++++++++++++++++++++-------------------------
 1 file changed, 26 insertions(+), 28 deletions(-)

diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
index d494b9b..ac432ae 100644
--- a/arch/x86/kernel/setup.c
+++ b/arch/x86/kernel/setup.c
@@ -962,29 +962,6 @@ void __init setup_arch(char **cmdline_p)
 
        if (efi_enabled(EFI_BOOT))
                efi_memblock_x86_reserve_range();
-#ifdef CONFIG_MEMORY_HOTPLUG
-       /*
-        * Memory used by the kernel cannot be hot-removed because Linux
-        * cannot migrate the kernel pages. When memory hotplug is
-        * enabled, we should prevent memblock from allocating memory
-        * for the kernel.
-        *
-        * ACPI SRAT records all hotpluggable memory ranges. But before
-        * SRAT is parsed, we don't know about it.
-        *
-        * The kernel image is loaded into memory at very early time. We
-        * cannot prevent this anyway. So on NUMA system, we set any
-        * node the kernel resides in as un-hotpluggable.
-        *
-        * Since on modern servers, one node could have double-digit
-        * gigabytes memory, we can assume the memory around the kernel
-        * image is also un-hotpluggable. So before SRAT is parsed, just
-        * allocate memory near the kernel image to try the best to keep
-        * the kernel away from hotpluggable memory.
-        */
-       if (movable_node_is_enabled())
-               memblock_set_bottom_up(true);
-#endif
 
        x86_report_nx();
 
@@ -1096,9 +1073,6 @@ void __init setup_arch(char **cmdline_p)
 
        cleanup_highmap();
 
-       memblock_set_current_limit(ISA_END_ADDRESS);
-       e820__memblock_setup();
-
        reserve_bios_regions();
 
        if (efi_enabled(EFI_MEMMAP)) {
@@ -1113,6 +1087,8 @@ void __init setup_arch(char **cmdline_p)
                efi_reserve_boot_services();
        }
 
+       memblock_set_current_limit(0, ISA_END_ADDRESS, false);
+       e820__memblock_setup();
        /* preallocate 4k for mptable mpc */
        e820__memblock_alloc_reserved_mpc_new();
 
@@ -1130,7 +1106,31 @@ void __init setup_arch(char **cmdline_p)
        trim_platform_memory_ranges();
        trim_low_memory_range();
 
+#ifdef CONFIG_MEMORY_HOTPLUG
+       /*
+        * Memory used by the kernel cannot be hot-removed because Linux
+        * cannot migrate the kernel pages. When memory hotplug is
+        * enabled, we should prevent memblock from allocating memory
+        * for the kernel.
+        *
+        * ACPI SRAT records all hotpluggable memory ranges. But before
+        * SRAT is parsed, we don't know about it.
+        *
+        * The kernel image is loaded into memory at very early time. We
+        * cannot prevent this anyway. So on NUMA system, we set any
+        * node the kernel resides in as un-hotpluggable.
+        *
+        * Since on modern servers, one node could have double-digit
+        * gigabytes memory, we can assume the memory around the kernel
+        * image is also un-hotpluggable. So before SRAT is parsed, just
+        * allocate memory near the kernel image to try the best to keep
+        * the kernel away from hotpluggable memory.
+        */
+       if (movable_node_is_enabled())
+               memblock_set_bottom_up(true);
+#endif
        init_mem_mapping();
+       memblock_set_current_limit(get_max_mapped());
 
        idt_setup_early_pf();
 
@@ -1145,8 +1145,6 @@ void __init setup_arch(char **cmdline_p)
         */
        mmu_cr4_features = __read_cr4() & ~X86_CR4_PCIDE;
 
-       memblock_set_current_limit(get_max_mapped());
-
        /*
         * NOTE: On x86-32, only from this point on, fixmaps are ready for use.
         */
-- 
2.7.4

Reply via email to