mirror of
https://github.com/torvalds/linux.git
synced 2026-06-05 13:06:59 +02:00
mm/mm_init.c: use deferred_init_mem_pfn_range_in_zone() to decide loop condition
If deferred_init_mem_pfn_range_in_zone() return true, we know it finds some range in (spfn, epfn). Then we can use it directly for the loop condition. Signed-off-by: Wei Yang <richard.weiyang@gmail.com> Reviewed-by: Mike Rapoport (IBM) <rppt@kernel.org> Link: https://lore.kernel.org/all/20240605071339.15330-1-richard.weiyang@gmail.com Signed-off-by: Mike Rapoport (IBM) <rppt@kernel.org>
This commit is contained in:
parent
ce8ebb9543
commit
544b8e14c2
15
mm/mm_init.c
15
mm/mm_init.c
|
|
@ -2170,20 +2170,15 @@ static int __init deferred_init_memmap(void *data)
|
|||
/* Only the highest zone is deferred */
|
||||
zone = pgdat->node_zones + pgdat->nr_zones - 1;
|
||||
|
||||
/* If the zone is empty somebody else may have cleared out the zone */
|
||||
if (!deferred_init_mem_pfn_range_in_zone(&i, zone, &spfn, &epfn,
|
||||
first_init_pfn))
|
||||
goto zone_empty;
|
||||
|
||||
max_threads = deferred_page_init_max_threads(cpumask);
|
||||
|
||||
while (spfn < epfn) {
|
||||
unsigned long epfn_align = ALIGN(epfn, PAGES_PER_SECTION);
|
||||
while (deferred_init_mem_pfn_range_in_zone(&i, zone, &spfn, &epfn, first_init_pfn)) {
|
||||
first_init_pfn = ALIGN(epfn, PAGES_PER_SECTION);
|
||||
struct padata_mt_job job = {
|
||||
.thread_fn = deferred_init_memmap_chunk,
|
||||
.fn_arg = zone,
|
||||
.start = spfn,
|
||||
.size = epfn_align - spfn,
|
||||
.size = first_init_pfn - spfn,
|
||||
.align = PAGES_PER_SECTION,
|
||||
.min_chunk = PAGES_PER_SECTION,
|
||||
.max_threads = max_threads,
|
||||
|
|
@ -2191,10 +2186,8 @@ static int __init deferred_init_memmap(void *data)
|
|||
};
|
||||
|
||||
padata_do_multithreaded(&job);
|
||||
deferred_init_mem_pfn_range_in_zone(&i, zone, &spfn, &epfn,
|
||||
epfn_align);
|
||||
}
|
||||
zone_empty:
|
||||
|
||||
/* Sanity check that the next zone really is unpopulated */
|
||||
WARN_ON(pgdat->nr_zones < MAX_NR_ZONES && populated_zone(++zone));
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user