Merge tag 'nfs-for-5.1-1' of git://git.linux-nfs.org/projects/trondmy/linux-nfs
[linux-2.6-microblaze.git] / mm / sparse.c
index 77a0554..69904aa 100644 (file)
@@ -65,11 +65,15 @@ static noinline struct mem_section __ref *sparse_index_alloc(int nid)
        unsigned long array_size = SECTIONS_PER_ROOT *
                                   sizeof(struct mem_section);
 
-       if (slab_is_available())
+       if (slab_is_available()) {
                section = kzalloc_node(array_size, GFP_KERNEL, nid);
-       else
+       } else {
                section = memblock_alloc_node(array_size, SMP_CACHE_BYTES,
                                              nid);
+               if (!section)
+                       panic("%s: Failed to allocate %lu bytes nid=%d\n",
+                             __func__, array_size, nid);
+       }
 
        return section;
 }
@@ -218,6 +222,9 @@ void __init memory_present(int nid, unsigned long start, unsigned long end)
                size = sizeof(struct mem_section*) * NR_SECTION_ROOTS;
                align = 1 << (INTERNODE_CACHE_SHIFT);
                mem_section = memblock_alloc(size, align);
+               if (!mem_section)
+                       panic("%s: Failed to allocate %lu bytes align=0x%lx\n",
+                             __func__, size, align);
        }
 #endif
 
@@ -323,9 +330,7 @@ sparse_early_usemaps_alloc_pgdat_section(struct pglist_data *pgdat,
        limit = goal + (1UL << PA_SECTION_SHIFT);
        nid = early_pfn_to_nid(goal >> PAGE_SHIFT);
 again:
-       p = memblock_alloc_try_nid_nopanic(size,
-                                               SMP_CACHE_BYTES, goal, limit,
-                                               nid);
+       p = memblock_alloc_try_nid(size, SMP_CACHE_BYTES, goal, limit, nid);
        if (!p && limit) {
                limit = 0;
                goto again;
@@ -379,7 +384,7 @@ static unsigned long * __init
 sparse_early_usemaps_alloc_pgdat_section(struct pglist_data *pgdat,
                                         unsigned long size)
 {
-       return memblock_alloc_node_nopanic(size, pgdat->node_id);
+       return memblock_alloc_node(size, SMP_CACHE_BYTES, pgdat->node_id);
 }
 
 static void __init check_usemap_section_nr(int nid, unsigned long *usemap)
@@ -404,13 +409,18 @@ struct page __init *sparse_mem_map_populate(unsigned long pnum, int nid,
 {
        unsigned long size = section_map_size();
        struct page *map = sparse_buffer_alloc(size);
+       phys_addr_t addr = __pa(MAX_DMA_ADDRESS);
 
        if (map)
                return map;
 
        map = memblock_alloc_try_nid(size,
-                                         PAGE_SIZE, __pa(MAX_DMA_ADDRESS),
+                                         PAGE_SIZE, addr,
                                          MEMBLOCK_ALLOC_ACCESSIBLE, nid);
+       if (!map)
+               panic("%s: Failed to allocate %lu bytes align=0x%lx nid=%d from=%pa\n",
+                     __func__, size, PAGE_SIZE, nid, &addr);
+
        return map;
 }
 #endif /* !CONFIG_SPARSEMEM_VMEMMAP */
@@ -420,10 +430,11 @@ static void *sparsemap_buf_end __meminitdata;
 
 static void __init sparse_buffer_init(unsigned long size, int nid)
 {
+       phys_addr_t addr = __pa(MAX_DMA_ADDRESS);
        WARN_ON(sparsemap_buf); /* forgot to call sparse_buffer_fini()? */
        sparsemap_buf =
                memblock_alloc_try_nid_raw(size, PAGE_SIZE,
-                                               __pa(MAX_DMA_ADDRESS),
+                                               addr,
                                                MEMBLOCK_ALLOC_ACCESSIBLE, nid);
        sparsemap_buf_end = sparsemap_buf + size;
 }