proc: fix PAGE_SIZE limit of /proc/$PID/cmdline
[cascardo/linux.git] / mm / nobootmem.c
index 90b5046..5258386 100644 (file)
@@ -37,11 +37,20 @@ static void * __init __alloc_memory_core_early(int nid, u64 size, u64 align,
 {
        void *ptr;
        u64 addr;
+       ulong flags = choose_memblock_flags();
 
        if (limit > memblock.current_limit)
                limit = memblock.current_limit;
 
-       addr = memblock_find_in_range_node(size, align, goal, limit, nid);
+again:
+       addr = memblock_find_in_range_node(size, align, goal, limit, nid,
+                                          flags);
+       if (!addr && (flags & MEMBLOCK_MIRROR)) {
+               flags &= ~MEMBLOCK_MIRROR;
+               pr_warn("Could not allocate %pap bytes of mirrored memory\n",
+                       &size);
+               goto again;
+       }
        if (!addr)
                return NULL;
 
@@ -121,7 +130,8 @@ static unsigned long __init free_low_memory_core_early(void)
 
        memblock_clear_hotplug(0, -1);
 
-       for_each_free_mem_range(i, NUMA_NO_NODE, &start, &end, NULL)
+       for_each_free_mem_range(i, NUMA_NO_NODE, MEMBLOCK_NONE, &start, &end,
+                               NULL)
                count += __free_memory_core(start, end);
 
 #ifdef CONFIG_ARCH_DISCARD_MEMBLOCK