]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - mm/sparse.c
powerpc/vdso: Correct call frame information
[mirror_ubuntu-bionic-kernel.git] / mm / sparse.c
index 044138852bafce91f01bf0e8a96cc7b05f02308d..f73e6b9aa9fad9449b5efe79ed08e284fc14f1ac 100644 (file)
@@ -207,6 +207,16 @@ void __init memory_present(int nid, unsigned long start, unsigned long end)
 {
        unsigned long pfn;
 
+#ifdef CONFIG_SPARSEMEM_EXTREME
+       if (unlikely(!mem_section)) {
+               unsigned long size, align;
+
+               size = sizeof(struct mem_section*) * NR_SECTION_ROOTS;
+               align = 1 << (INTERNODE_CACHE_SHIFT);
+               mem_section = memblock_virt_alloc(size, align);
+       }
+#endif
+
        start &= PAGE_SECTION_MASK;
        mminit_validate_memmodel_limits(&start, &end);
        for (pfn = start; pfn < end; pfn += PAGES_PER_SECTION) {
@@ -443,9 +453,9 @@ void __init sparse_mem_maps_populate_node(struct page **map_map,
        }
 
        size = PAGE_ALIGN(size);
-       map = memblock_virt_alloc_try_nid(size * map_count,
-                                         PAGE_SIZE, __pa(MAX_DMA_ADDRESS),
-                                         BOOTMEM_ALLOC_ACCESSIBLE, nodeid);
+       map = memblock_virt_alloc_try_nid_raw(size * map_count,
+                                             PAGE_SIZE, __pa(MAX_DMA_ADDRESS),
+                                             BOOTMEM_ALLOC_ACCESSIBLE, nodeid);
        if (map) {
                for (pnum = pnum_begin; pnum < pnum_end; pnum++) {
                        if (!present_section_nr(pnum))
@@ -651,7 +661,7 @@ void offline_mem_sections(unsigned long start_pfn, unsigned long end_pfn)
        unsigned long pfn;
 
        for (pfn = start_pfn; pfn < end_pfn; pfn += PAGES_PER_SECTION) {
-               unsigned long section_nr = pfn_to_section_nr(start_pfn);
+               unsigned long section_nr = pfn_to_section_nr(pfn);
                struct mem_section *ms;
 
                /*