• Lorenzo Stoakes's avatar
    mm: page_alloc: refactor setup_per_zone_lowmem_reserve() · 470c61d7
    Lorenzo Stoakes authored
    setup_per_zone_lowmem_reserve() iterates through each zone setting
    zone->lowmem_reserve[j] = 0 (where j is the zone's index) then iterates
    backwards through all preceding zones, setting
    lower_zone->lowmem_reserve[j] = sum(managed pages of higher zones) /
    lowmem_reserve_ratio[idx] for each (where idx is the lower zone's index).
    
    If the lower zone has no managed pages or its ratio is 0 then all of its
    lowmem_reserve[] entries are effectively zeroed.
    
    As these arrays are only assigned here and all lowmem_reserve[] entries
    for index < this zone's index are implicitly assumed to be 0 (as these are
    specifically output in show_free_areas() and zoneinfo_show_print() for
    example) there is no need to additionally zero index == this zone's index
    too.  This patch avoids zeroing unnecessarily.
    
    Rather than iterating through zones and setting lowmem_reserve[j] for each
    lower zone this patch reverse the process and populates each zone's
    lowmem_reserve[] values in ascending order.
    
    This clarifies what is going on especially in the case of zero managed
    pages or ratio which is now explicitly shown to clear these values.
    
    Link: https://lkml.kernel.org/r/20201129162758.115907-1-lstoakes@gmail.comSigned-off-by: default avatarLorenzo Stoakes <lstoakes@gmail.com>
    Cc: Baoquan He <bhe@redhat.com>
    Cc: Michal Hocko <mhocko@suse.com>
    Cc: Nicholas Piggin <npiggin@gmail.com>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Cc: Roman Gushchin <guro@fb.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    470c61d7
page_alloc.c 248 KB