mm: softdirty: keep bit when zapping file pte
[platform/adaptation/renesas_rcar/renesas_kernel.git] / mm / nobootmem.c
index 2c254d3..f73f298 100644 (file)
@@ -41,11 +41,13 @@ static void * __init __alloc_memory_core_early(int nid, u64 size, u64 align,
        if (limit > memblock.current_limit)
                limit = memblock.current_limit;
 
-       addr = memblock_find_in_range_node(goal, limit, size, align, nid);
+       addr = memblock_find_in_range_node(size, align, goal, limit, nid);
        if (!addr)
                return NULL;
 
-       memblock_reserve(addr, size);
+       if (memblock_reserve(addr, size))
+               return NULL;
+
        ptr = phys_to_virt(addr);
        memset(ptr, 0, size);
        /*
@@ -114,16 +116,27 @@ static unsigned long __init __free_memory_core(phys_addr_t start,
 static unsigned long __init free_low_memory_core_early(void)
 {
        unsigned long count = 0;
-       phys_addr_t start, end, size;
+       phys_addr_t start, end;
        u64 i;
 
-       for_each_free_mem_range(i, MAX_NUMNODES, &start, &end, NULL)
+       for_each_free_mem_range(i, NUMA_NO_NODE, &start, &end, NULL)
                count += __free_memory_core(start, end);
 
-       /* free range that is used for reserved array if we allocate it */
-       size = get_allocated_memblock_reserved_regions_info(&start);
-       if (size)
-               count += __free_memory_core(start, start + size);
+#ifdef CONFIG_ARCH_DISCARD_MEMBLOCK
+       {
+               phys_addr_t size;
+
+               /* Free memblock.reserved array if it was allocated */
+               size = get_allocated_memblock_reserved_regions_info(&start);
+               if (size)
+                       count += __free_memory_core(start, start + size);
+
+               /* Free memblock.memory array if it was allocated */
+               size = get_allocated_memblock_memory_regions_info(&start);
+               if (size)
+                       count += __free_memory_core(start, start + size);
+       }
+#endif
 
        return count;
 }
@@ -161,7 +174,7 @@ unsigned long __init free_all_bootmem(void)
        reset_all_zones_managed_pages();
 
        /*
-        * We need to use MAX_NUMNODES instead of NODE_DATA(0)->node_id
+        * We need to use NUMA_NO_NODE instead of NODE_DATA(0)->node_id
         *  because in some case like Node0 doesn't have RAM installed
         *  low ram will be on Node1
         */
@@ -215,7 +228,7 @@ static void * __init ___alloc_bootmem_nopanic(unsigned long size,
 
 restart:
 
-       ptr = __alloc_memory_core_early(MAX_NUMNODES, size, align, goal, limit);
+       ptr = __alloc_memory_core_early(NUMA_NO_NODE, size, align, goal, limit);
 
        if (ptr)
                return ptr;
@@ -299,7 +312,7 @@ again:
        if (ptr)
                return ptr;
 
-       ptr = __alloc_memory_core_early(MAX_NUMNODES, size, align,
+       ptr = __alloc_memory_core_early(NUMA_NO_NODE, size, align,
                                        goal, limit);
        if (ptr)
                return ptr;