In case (last_start <= step_size), start is for sure to be 0. So, it is save to do the round_down for all cases and set start to map_start when start is smaller than map_start.
>From the performance point of view, this also reduces the check on each iteration. This patch unifies the code on round_down memory range in memory_map_top_doown() and also removes a redundant assignment of start which will be assigned the correct value in each iteration. Signed-off-by: Wei Yang <richard.weiy...@gmail.com> --- arch/x86/mm/init.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c index 22af912d66d2..d8ad5e825b10 100644 --- a/arch/x86/mm/init.c +++ b/arch/x86/mm/init.c @@ -514,7 +514,7 @@ static void __init memory_map_top_down(unsigned long map_start, step_size = PMD_SIZE; max_pfn_mapped = 0; /* will get exact value next */ min_pfn_mapped = real_end >> PAGE_SHIFT; - last_start = start = real_end; + last_start = real_end; /* * We start from the top (end of memory) and go to the bottom. @@ -523,12 +523,10 @@ static void __init memory_map_top_down(unsigned long map_start, * for page table. */ while (last_start > map_start) { - if (last_start > step_size) { - start = round_down(last_start - 1, step_size); - if (start < map_start) - start = map_start; - } else + start = round_down(last_start - 1, step_size); + if (start < map_start) start = map_start; + mapped_ram_size += init_range_memory_mapping(start, last_start); last_start = start; -- 2.11.0