• Jiang Liu's avatar
    mm: introduce new field "managed_pages" to struct zone · 9feedc9d
    Jiang Liu authored
    Currently a zone's present_pages is calcuated as below, which is
    inaccurate and may cause trouble to memory hotplug.
    
    	spanned_pages - absent_pages - memmap_pages - dma_reserve.
    
    During fixing bugs caused by inaccurate zone->present_pages, we found
    zone->present_pages has been abused.  The field zone->present_pages may
    have different meanings in different contexts:
    
    1) pages existing in a zone.
    2) pages managed by the buddy system.
    
    For more discussions about the issue, please refer to:
      http://lkml.org/lkml/2012/11/5/866
      https://patchwork.kernel.org/patch/1346751/
    
    This patchset tries to introduce a new field named "managed_pages" to
    struct zone, which counts "pages managed by the buddy system".  And revert
    zone->present_pages to count "physical pages existing in a zone", which
    also keep in consistence with pgdat->node_present_pages.
    
    We will set an initial value for zone->managed_pages in function
    free_area_init_core() and will adjust it later if the initial value is
    inaccurate.
    
    For DMA/normal zones, the initial value is set to:
    
    	(spanned_pages - absent_pages - memmap_pages - dma_reserve)
    
    Later zone->managed_pages will be adjusted to the accurate value when the
    bootmem allocator frees all free pages to the buddy system in function
    free_all_bootmem_node() and free_all_bootmem().
    
    The bootmem allocator doesn't touch highmem pages, so highmem zones'
    managed_pages is set to the accurate value "spanned_pages - absent_pages"
    in function free_area_init_core() and won't be updated anymore.
    
    This patch also adds a new field "managed_pages" to /proc/zoneinfo
    and sysrq showmem.
    
    [akpm@linux-foundation.org: small comment tweaks]
    Signed-off-by: default avatarJiang Liu <jiang.liu@huawei.com>
    Cc: Wen Congyang <wency@cn.fujitsu.com>
    Cc: David Rientjes <rientjes@google.com>
    Cc: Maciej Rutecki <maciej.rutecki@gmail.com>
    Tested-by: default avatarChris Clayton <chris2553@googlemail.com>
    Cc: "Rafael J . Wysocki" <rjw@sisk.pl>
    Cc: Mel Gorman <mgorman@suse.de>
    Cc: Minchan Kim <minchan@kernel.org>
    Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
    Cc: Michal Hocko <mhocko@suse.cz>
    Cc: Jianguo Wu <wujianguo@huawei.com>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    9feedc9d
bootmem.c 21 KB