In case the first attempt to round_up pfn with PMD_SIZE exceed the limit_pfn, this means we could only have 4K range.
This patch jumps to split only 4K range for this case. Signed-off-by: Wei Yang <[email protected]> --- arch/x86/mm/init.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c index cbb105388f24..bf422a637035 100644 --- a/arch/x86/mm/init.c +++ b/arch/x86/mm/init.c @@ -383,7 +383,7 @@ static int __meminit split_mem_range(struct map_range *mr, end_pfn = round_up(pfn, PFN_DOWN(PMD_SIZE)); #endif if (end_pfn > limit_pfn) - end_pfn = limit_pfn; + goto only_4K_range; if (start_pfn < end_pfn) { nr_range = save_mr(mr, nr_range, start_pfn, end_pfn, 0); pfn = end_pfn; @@ -435,6 +435,7 @@ static int __meminit split_mem_range(struct map_range *mr, * Range (E): * tail is not big page (2M) alignment */ +only_4K_range: start_pfn = pfn; end_pfn = limit_pfn; nr_range = save_mr(mr, nr_range, start_pfn, end_pfn, 0); -- 2.19.1

