mirror of
https://github.com/torvalds/linux.git
synced 2026-07-31 03:27:03 +02:00
mm/sparse: remove !CONFIG_SPARSEMEM_VMEMMAP leftovers for CONFIG_MEMORY_HOTPLUG
CONFIG_MEMORY_HOTPLUG now depends on CONFIG_SPARSEMEM_VMEMMAP. So let's remove the !CONFIG_SPARSEMEM_VMEMMAP leftovers that are dead code. Adjust the comment above fill_subsection_map() accordingly. Link: https://lkml.kernel.org/r/20260320-sparsemem_cleanups-v2-6-096addc8800d@kernel.org Signed-off-by: David Hildenbrand (Arm) <david@kernel.org> Reviewed-by: Lorenzo Stoakes (Oracle) <ljs@kernel.org> Reviewed-by: Mike Rapoport (Microsoft) <rppt@kernel.org> Cc: Axel Rasmussen <axelrasmussen@google.com> Cc: Liam Howlett <liam.howlett@oracle.com> Cc: Michal Hocko <mhocko@suse.com> Cc: Oscar Salvador <osalvador@suse.de> Cc: Sidhartha Kumar <sidhartha.kumar@oracle.com> Cc: Suren Baghdasaryan <surenb@google.com> Cc: Vlastimil Babka <vbabka@kernel.org> Cc: Wei Xu <weixugc@google.com> Cc: Yuanchu Xie <yuanchu@google.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
62257a5fb9
commit
119c31caa5
69
mm/sparse.c
69
mm/sparse.c
|
|
@ -657,7 +657,6 @@ void offline_mem_sections(unsigned long start_pfn, unsigned long end_pfn)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_SPARSEMEM_VMEMMAP
|
|
||||||
static struct page * __meminit populate_section_memmap(unsigned long pfn,
|
static struct page * __meminit populate_section_memmap(unsigned long pfn,
|
||||||
unsigned long nr_pages, int nid, struct vmem_altmap *altmap,
|
unsigned long nr_pages, int nid, struct vmem_altmap *altmap,
|
||||||
struct dev_pagemap *pgmap)
|
struct dev_pagemap *pgmap)
|
||||||
|
|
@ -729,73 +728,11 @@ static int fill_subsection_map(unsigned long pfn, unsigned long nr_pages)
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
static struct page * __meminit populate_section_memmap(unsigned long pfn,
|
|
||||||
unsigned long nr_pages, int nid, struct vmem_altmap *altmap,
|
|
||||||
struct dev_pagemap *pgmap)
|
|
||||||
{
|
|
||||||
return kvmalloc_node(array_size(sizeof(struct page),
|
|
||||||
PAGES_PER_SECTION), GFP_KERNEL, nid);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void depopulate_section_memmap(unsigned long pfn, unsigned long nr_pages,
|
|
||||||
struct vmem_altmap *altmap)
|
|
||||||
{
|
|
||||||
kvfree(pfn_to_page(pfn));
|
|
||||||
}
|
|
||||||
|
|
||||||
static void free_map_bootmem(struct page *memmap)
|
|
||||||
{
|
|
||||||
unsigned long maps_section_nr, removing_section_nr, i;
|
|
||||||
unsigned long type, nr_pages;
|
|
||||||
struct page *page = virt_to_page(memmap);
|
|
||||||
|
|
||||||
nr_pages = PAGE_ALIGN(PAGES_PER_SECTION * sizeof(struct page))
|
|
||||||
>> PAGE_SHIFT;
|
|
||||||
|
|
||||||
for (i = 0; i < nr_pages; i++, page++) {
|
|
||||||
type = bootmem_type(page);
|
|
||||||
|
|
||||||
BUG_ON(type == NODE_INFO);
|
|
||||||
|
|
||||||
maps_section_nr = pfn_to_section_nr(page_to_pfn(page));
|
|
||||||
removing_section_nr = bootmem_info(page);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* When this function is called, the removing section is
|
|
||||||
* logical offlined state. This means all pages are isolated
|
|
||||||
* from page allocator. If removing section's memmap is placed
|
|
||||||
* on the same section, it must not be freed.
|
|
||||||
* If it is freed, page allocator may allocate it which will
|
|
||||||
* be removed physically soon.
|
|
||||||
*/
|
|
||||||
if (maps_section_nr != removing_section_nr)
|
|
||||||
put_page_bootmem(page);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static int clear_subsection_map(unsigned long pfn, unsigned long nr_pages)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool is_subsection_map_empty(struct mem_section *ms)
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int fill_subsection_map(unsigned long pfn, unsigned long nr_pages)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
#endif /* CONFIG_SPARSEMEM_VMEMMAP */
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* To deactivate a memory region, there are 3 cases to handle across
|
* To deactivate a memory region, there are 3 cases to handle:
|
||||||
* two configurations (SPARSEMEM_VMEMMAP={y,n}):
|
|
||||||
*
|
*
|
||||||
* 1. deactivation of a partial hot-added section (only possible in
|
* 1. deactivation of a partial hot-added section:
|
||||||
* the SPARSEMEM_VMEMMAP=y case).
|
|
||||||
* a) section was present at memory init.
|
* a) section was present at memory init.
|
||||||
* b) section was hot-added post memory init.
|
* b) section was hot-added post memory init.
|
||||||
* 2. deactivation of a complete hot-added section.
|
* 2. deactivation of a complete hot-added section.
|
||||||
|
|
@ -803,8 +740,6 @@ static int fill_subsection_map(unsigned long pfn, unsigned long nr_pages)
|
||||||
*
|
*
|
||||||
* For 1, when subsection_map does not empty we will not be freeing the
|
* For 1, when subsection_map does not empty we will not be freeing the
|
||||||
* usage map, but still need to free the vmemmap range.
|
* usage map, but still need to free the vmemmap range.
|
||||||
*
|
|
||||||
* For 2 and 3, the SPARSEMEM_VMEMMAP={y,n} cases are unified
|
|
||||||
*/
|
*/
|
||||||
static void section_deactivate(unsigned long pfn, unsigned long nr_pages,
|
static void section_deactivate(unsigned long pfn, unsigned long nr_pages,
|
||||||
struct vmem_altmap *altmap)
|
struct vmem_altmap *altmap)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user