path: root/mm/internal.h
diff options
authorMike Rapoport <>2021-09-02 14:58:02 -0700
committerLinus Torvalds <>2021-09-03 09:58:15 -0700
commitc803b3c8b3b70f306ee6300bf8acdd70ffd1441a (patch)
tree7ffa7206a7d32de16edc7741d482c9c3d2c8f219 /mm/internal.h
parent22e7878102f94a50e9a4c2c19f909a9a0898c4ce (diff)
mm: introduce memmap_alloc() to unify memory map allocation
There are several places that allocate memory for the memory map: alloc_node_mem_map() for FLATMEM, sparse_buffer_init() and __populate_section_memmap() for SPARSEMEM. The memory allocated in the FLATMEM case is zeroed and it is never poisoned, regardless of CONFIG_PAGE_POISON setting. The memory allocated in the SPARSEMEM cases is not zeroed and it is implicitly poisoned inside memblock if CONFIG_PAGE_POISON is set. Introduce memmap_alloc() wrapper for memblock allocators that will be used for both FLATMEM and SPARSEMEM cases and will makei memory map zeroing and poisoning consistent for different memory models. Link: Signed-off-by: Mike Rapoport <> Cc: Michal Simek <> Signed-off-by: Andrew Morton <> Signed-off-by: Linus Torvalds <>
Diffstat (limited to 'mm/internal.h')
1 files changed, 4 insertions, 0 deletions
diff --git a/mm/internal.h b/mm/internal.h
index 31ff935b2547..57e28261a3b1 100644
--- a/mm/internal.h
+++ b/mm/internal.h
@@ -211,6 +211,10 @@ extern void zone_pcp_reset(struct zone *zone);
extern void zone_pcp_disable(struct zone *zone);
extern void zone_pcp_enable(struct zone *zone);
+extern void *memmap_alloc(phys_addr_t size, phys_addr_t align,
+ phys_addr_t min_addr,
+ int nid, bool exact_nid);
#if defined CONFIG_COMPACTION || defined CONFIG_CMA