mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-08-30 14:33:24 -04:00
mm/mm_init: simplify deferred_free_pages() migratetype init
deferred_free_pages() open-codes two loops to initialize the pageblock migratetype for a range of pages. Replace them with pageblock_migratetype_init_range() to remove the duplication and make the code clearer (Note that deferred_free_pages() may be called from atomic context). Link: https://lore.kernel.org/20260612035903.2468601-6-songmuchun@bytedance.com Signed-off-by: Muchun Song <songmuchun@bytedance.com> Acked-by: Mike Rapoport (Microsoft) <rppt@kernel.org> Acked-by: Oscar Salvador <osalvador@suse.de> Cc: "Aneesh Kumar K.V" <aneesh.kumar@linux.ibm.com> Cc: David Hildenbrand <david@kernel.org> Cc: Frank van der Linden <fvdl@google.com> Cc: Liam R. Howlett <liam@infradead.org> Cc: Lorenzo Stoakes <ljs@kernel.org> Cc: Madhavan Srinivasan <maddy@linux.ibm.com> Cc: Michael Ellerman <mpe@ellerman.id.au> Cc: Nicholas Piggin <npiggin@gmail.com> Cc: Oscar Salvador (SUSE) <osalvador@kernel.org> Cc: "Ritesh Harjani (IBM)" <ritesh.list@gmail.com> Cc: Usama Arif <usama.arif@linux.dev> Cc: Vlastimil Babka <vbabka@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
committed by
Andrew Morton
parent
b1b7c045e8
commit
9c29f83d88
19
mm/mm_init.c
19
mm/mm_init.c
@@ -674,15 +674,15 @@ static inline void fixup_hashdist(void)
|
||||
static inline void fixup_hashdist(void) {}
|
||||
#endif /* CONFIG_NUMA */
|
||||
|
||||
#ifdef CONFIG_ZONE_DEVICE
|
||||
#if defined(CONFIG_ZONE_DEVICE) || defined(CONFIG_DEFERRED_STRUCT_PAGE_INIT)
|
||||
static __meminit void pageblock_migratetype_init_range(unsigned long pfn,
|
||||
unsigned long nr_pages, int migratetype)
|
||||
unsigned long nr_pages, int migratetype, bool atomic)
|
||||
{
|
||||
const unsigned long end = pfn + nr_pages;
|
||||
|
||||
for (pfn = pageblock_align(pfn); pfn < end; pfn += pageblock_nr_pages) {
|
||||
init_pageblock_migratetype(pfn_to_page(pfn), migratetype, false);
|
||||
if (IS_ALIGNED(pfn, PAGES_PER_SECTION))
|
||||
if (!atomic && IS_ALIGNED(pfn, PAGES_PER_SECTION))
|
||||
cond_resched();
|
||||
}
|
||||
}
|
||||
@@ -1142,7 +1142,7 @@ void __ref memmap_init_zone_device(struct zone *zone,
|
||||
compound_nr_pages(pfn, altmap, pgmap));
|
||||
}
|
||||
|
||||
pageblock_migratetype_init_range(start_pfn, nr_pages, MIGRATE_MOVABLE);
|
||||
pageblock_migratetype_init_range(start_pfn, nr_pages, MIGRATE_MOVABLE, false);
|
||||
|
||||
pr_debug("%s initialised %lu pages in %ums\n", __func__,
|
||||
nr_pages, jiffies_to_msecs(jiffies - start));
|
||||
@@ -1988,12 +1988,12 @@ static void __init deferred_free_pages(unsigned long pfn,
|
||||
if (!nr_pages)
|
||||
return;
|
||||
|
||||
pageblock_migratetype_init_range(pfn, nr_pages, mt, true);
|
||||
|
||||
page = pfn_to_page(pfn);
|
||||
|
||||
/* Free a large naturally-aligned chunk if possible */
|
||||
if (nr_pages == MAX_ORDER_NR_PAGES && IS_MAX_ORDER_ALIGNED(pfn)) {
|
||||
for (i = 0; i < nr_pages; i += pageblock_nr_pages)
|
||||
init_pageblock_migratetype(page + i, mt, false);
|
||||
__free_pages_core(page, MAX_PAGE_ORDER, MEMINIT_EARLY);
|
||||
return;
|
||||
}
|
||||
@@ -2001,11 +2001,8 @@ static void __init deferred_free_pages(unsigned long pfn,
|
||||
/* Accept chunks smaller than MAX_PAGE_ORDER upfront */
|
||||
accept_memory(PFN_PHYS(pfn), nr_pages * PAGE_SIZE);
|
||||
|
||||
for (i = 0; i < nr_pages; i++, page++, pfn++) {
|
||||
if (pageblock_aligned(pfn))
|
||||
init_pageblock_migratetype(page, mt, false);
|
||||
__free_pages_core(page, 0, MEMINIT_EARLY);
|
||||
}
|
||||
for (i = 0; i < nr_pages; i++)
|
||||
__free_pages_core(page + i, 0, MEMINIT_EARLY);
|
||||
}
|
||||
|
||||
/* Completion tracking for deferred_init_memmap() threads */
|
||||
|
||||
Reference in New Issue
Block a user