mirror of
https://github.com/torvalds/linux.git
synced 2026-11-10 17:11:02 +01:00
mm/sparse: inline usemap allocation into sparse_init_nid()
After removing SPARSEMEM_VMEMMAP_PREINIT, sparse_init_nid() no longer needs the transient sparse_usagebuf state and its helper wrappers. Allocate the usemap buffer directly in sparse_init_nid(), pass it to sparse_init_one_section(), and drop sparse_usage_init(), sparse_usage_fini(), and sparse_init_early_section(). Link: https://lore.kernel.org/20260910063256.64386-13-songmuchun@bytedance.com Signed-off-by: Muchun Song <songmuchun@bytedance.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Acked-by: Mike Rapoport (Microsoft) <rppt@kernel.org> Acked-by: David Hildenbrand (Arm) <david@kernel.org> Cc: David Laight <david.laight.linux@gmail.com> Cc: Liam R. Howlett <liam@infradead.org> Cc: Lorenzo Stoakes <ljs@kernel.org> Cc: Michal Hocko <mhocko@suse.com> Cc: Oscar Salvador <osalvador@suse.de> Cc: Qi Zheng <qi.zheng@linux.dev> Cc: Suren Baghdasaryan <surenb@google.com> Cc: Vlastimil Babka <vbabka@kernel.org>
This commit is contained in:
parent
3286497153
commit
1269621f9a
|
|
@ -2223,9 +2223,6 @@ static inline bool pfn_section_first_valid(struct mem_section *ms, unsigned long
|
|||
}
|
||||
#endif
|
||||
|
||||
void sparse_init_early_section(int nid, struct page *map, unsigned long pnum,
|
||||
unsigned long flags);
|
||||
|
||||
#ifndef CONFIG_HAVE_ARCH_PFN_VALID
|
||||
/**
|
||||
* pfn_valid - check if there is a valid memory map entry for a PFN
|
||||
|
|
|
|||
46
mm/sparse.c
46
mm/sparse.c
|
|
@ -234,42 +234,6 @@ void __weak __meminit vmemmap_populate_print_last(void)
|
|||
{
|
||||
}
|
||||
|
||||
static void *sparse_usagebuf __initdata;
|
||||
static void *sparse_usagebuf_end __initdata;
|
||||
|
||||
/*
|
||||
* Helper function that is used for generic section initialization, and
|
||||
* can also be used by any hooks added above.
|
||||
*/
|
||||
void __init sparse_init_early_section(int nid, struct page *map,
|
||||
unsigned long pnum, unsigned long flags)
|
||||
{
|
||||
BUG_ON(!sparse_usagebuf || sparse_usagebuf >= sparse_usagebuf_end);
|
||||
sparse_init_one_section(__nr_to_section(pnum), pnum, map,
|
||||
sparse_usagebuf, SECTION_IS_EARLY | flags);
|
||||
sparse_usagebuf = (void *)sparse_usagebuf + mem_section_usage_size();
|
||||
}
|
||||
|
||||
static int __init sparse_usage_init(int nid, unsigned long map_count)
|
||||
{
|
||||
unsigned long size;
|
||||
|
||||
size = mem_section_usage_size() * map_count;
|
||||
sparse_usagebuf = memblock_alloc_node(size, SMP_CACHE_BYTES, nid);
|
||||
if (!sparse_usagebuf) {
|
||||
sparse_usagebuf_end = NULL;
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
sparse_usagebuf_end = sparse_usagebuf + size;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void __init sparse_usage_fini(void)
|
||||
{
|
||||
sparse_usagebuf = sparse_usagebuf_end = NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* Initialize sparse on a specific node. The node spans [pnum_begin, pnum_end)
|
||||
* And number of present sections in this node is map_count.
|
||||
|
|
@ -279,8 +243,11 @@ static void __init sparse_init_nid(int nid, unsigned long pnum_begin,
|
|||
unsigned long map_count)
|
||||
{
|
||||
unsigned long pnum;
|
||||
struct mem_section_usage *usage;
|
||||
|
||||
if (sparse_usage_init(nid, map_count))
|
||||
usage = memblock_alloc_node(map_count * mem_section_usage_size(),
|
||||
SMP_CACHE_BYTES, nid);
|
||||
if (!usage)
|
||||
panic("Failed to allocate usemap for node %d\n", nid);
|
||||
|
||||
for_each_present_section_nr(pnum_begin, pnum) {
|
||||
|
|
@ -296,9 +263,10 @@ static void __init sparse_init_nid(int nid, unsigned long pnum_begin,
|
|||
panic("Failed to allocate memmap for section %lu\n", pnum);
|
||||
memmap_boot_pages_add(section_nr_vmemmap_pages(pfn, PAGES_PER_SECTION,
|
||||
NULL, NULL));
|
||||
sparse_init_early_section(nid, map, pnum, 0);
|
||||
sparse_init_one_section(__nr_to_section(pnum), pnum, map, usage,
|
||||
SECTION_IS_EARLY);
|
||||
usage = (void *)usage + mem_section_usage_size();
|
||||
}
|
||||
sparse_usage_fini();
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user