mm: bootmem: allocate in order node+goal, goal, node, anywhere
[platform/adaptation/renesas_rcar/renesas_kernel.git] / mm / bootmem.c
index bafeb2c..b5babdf 100644 (file)
@@ -704,6 +704,7 @@ static void * __init ___alloc_bootmem_node(bootmem_data_t *bdata,
 {
        void *ptr;
 
+again:
        ptr = alloc_arch_preferred_bootmem(bdata, size, align, goal, limit);
        if (ptr)
                return ptr;
@@ -712,7 +713,18 @@ static void * __init ___alloc_bootmem_node(bootmem_data_t *bdata,
        if (ptr)
                return ptr;
 
-       return ___alloc_bootmem(size, align, goal, limit);
+       ptr = alloc_bootmem_core(size, align, goal, limit);
+       if (ptr)
+               return ptr;
+
+       if (goal) {
+               goal = 0;
+               goto again;
+       }
+
+       printk(KERN_ALERT "bootmem alloc of %lu bytes failed!\n", size);
+       panic("Out of memory");
+       return NULL;
 }
 
 /**