@@ -2170,31 +2170,24 @@ static int __init deferred_init_memmap(void *data)
2170
2170
/* Only the highest zone is deferred */
2171
2171
zone = pgdat -> node_zones + pgdat -> nr_zones - 1 ;
2172
2172
2173
- /* If the zone is empty somebody else may have cleared out the zone */
2174
- if (!deferred_init_mem_pfn_range_in_zone (& i , zone , & spfn , & epfn ,
2175
- first_init_pfn ))
2176
- goto zone_empty ;
2177
-
2178
2173
max_threads = deferred_page_init_max_threads (cpumask );
2179
2174
2180
- while (spfn < epfn ) {
2181
- unsigned long epfn_align = ALIGN (epfn , PAGES_PER_SECTION );
2175
+ while (deferred_init_mem_pfn_range_in_zone ( & i , zone , & spfn , & epfn , first_init_pfn ) ) {
2176
+ first_init_pfn = ALIGN (epfn , PAGES_PER_SECTION );
2182
2177
struct padata_mt_job job = {
2183
2178
.thread_fn = deferred_init_memmap_chunk ,
2184
2179
.fn_arg = zone ,
2185
2180
.start = spfn ,
2186
- .size = epfn_align - spfn ,
2181
+ .size = first_init_pfn - spfn ,
2187
2182
.align = PAGES_PER_SECTION ,
2188
2183
.min_chunk = PAGES_PER_SECTION ,
2189
2184
.max_threads = max_threads ,
2190
2185
.numa_aware = false,
2191
2186
};
2192
2187
2193
2188
padata_do_multithreaded (& job );
2194
- deferred_init_mem_pfn_range_in_zone (& i , zone , & spfn , & epfn ,
2195
- epfn_align );
2196
2189
}
2197
- zone_empty :
2190
+
2198
2191
/* Sanity check that the next zone really is unpopulated */
2199
2192
WARN_ON (pgdat -> nr_zones < MAX_NR_ZONES && populated_zone (++ zone ));
2200
2193
0 commit comments