mm, sparse: do not swamp log with huge vmemmap allocation failures
[sfrench/cifs-2.6.git] / arch / x86 / mm / init_64.c
index adcea90a2046e91aee1d4693e9c505dbcab1771c..4a837289f2add8ac3548e68639f38f845ceee6a9 100644 (file)
@@ -184,7 +184,7 @@ static __ref void *spp_getpage(void)
        void *ptr;
 
        if (after_bootmem)
-               ptr = (void *) get_zeroed_page(GFP_ATOMIC | __GFP_NOTRACK);
+               ptr = (void *) get_zeroed_page(GFP_ATOMIC);
        else
                ptr = alloc_bootmem_pages(PAGE_SIZE);
 
@@ -1173,12 +1173,18 @@ void __init mem_init(void)
 
        /* clear_bss() already clear the empty_zero_page */
 
-       register_page_bootmem_info();
-
        /* this will put all memory onto the freelists */
        free_all_bootmem();
        after_bootmem = 1;
 
+       /*
+        * Must be done after boot memory is put on freelist, because here we
+        * might set fields in deferred struct pages that have not yet been
+        * initialized, and free_all_bootmem() initializes all the reserved
+        * deferred pages for us.
+        */
+       register_page_bootmem_info();
+
        /* Register memory areas for /proc/kcore */
        kclist_add(&kcore_vsyscall, (void *)VSYSCALL_ADDR,
                         PAGE_SIZE, KCORE_OTHER);
@@ -1399,7 +1405,6 @@ static int __meminit vmemmap_populate_hugepages(unsigned long start,
                        vmemmap_verify((pte_t *)pmd, node, addr, next);
                        continue;
                }
-               pr_warn_once("vmemmap: falling back to regular page backing\n");
                if (vmemmap_populate_basepages(addr, next, node))
                        return -ENOMEM;
        }