Commit fc2bd799 authored by Joonsoo Kim's avatar Joonsoo Kim Committed by Linus Torvalds

mm/page_alloc: correct highmem memory statistics

ZONE_MOVABLE could be treated as highmem so we need to consider it for
accurate statistics.  And, in following patches, ZONE_CMA will be
introduced and it can be treated as highmem, too.  So, instead of
manually adding stat of ZONE_MOVABLE, looping all zones and check
whether the zone is highmem or not and add stat of the zone which can be
treated as highmem.
Signed-off-by: default avatarJoonsoo Kim <iamjoonsoo.kim@lge.com>
Reviewed-by: default avatarAneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
Cc: Rik van Riel <riel@redhat.com>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: Mel Gorman <mgorman@techsingularity.net>
Cc: Laura Abbott <lauraa@codeaurora.org>
Cc: Minchan Kim <minchan@kernel.org>
Cc: Marek Szyprowski <m.szyprowski@samsung.com>
Cc: Michal Nazarewicz <mina86@mina86.com>
Cc: Vlastimil Babka <vbabka@suse.cz>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 09b4ab3c
...@@ -3793,6 +3793,8 @@ void si_meminfo_node(struct sysinfo *val, int nid) ...@@ -3793,6 +3793,8 @@ void si_meminfo_node(struct sysinfo *val, int nid)
{ {
int zone_type; /* needs to be signed */ int zone_type; /* needs to be signed */
unsigned long managed_pages = 0; unsigned long managed_pages = 0;
unsigned long managed_highpages = 0;
unsigned long free_highpages = 0;
pg_data_t *pgdat = NODE_DATA(nid); pg_data_t *pgdat = NODE_DATA(nid);
for (zone_type = 0; zone_type < MAX_NR_ZONES; zone_type++) for (zone_type = 0; zone_type < MAX_NR_ZONES; zone_type++)
...@@ -3801,12 +3803,19 @@ void si_meminfo_node(struct sysinfo *val, int nid) ...@@ -3801,12 +3803,19 @@ void si_meminfo_node(struct sysinfo *val, int nid)
val->sharedram = node_page_state(nid, NR_SHMEM); val->sharedram = node_page_state(nid, NR_SHMEM);
val->freeram = node_page_state(nid, NR_FREE_PAGES); val->freeram = node_page_state(nid, NR_FREE_PAGES);
#ifdef CONFIG_HIGHMEM #ifdef CONFIG_HIGHMEM
val->totalhigh = pgdat->node_zones[ZONE_HIGHMEM].managed_pages; for (zone_type = 0; zone_type < MAX_NR_ZONES; zone_type++) {
val->freehigh = zone_page_state(&pgdat->node_zones[ZONE_HIGHMEM], struct zone *zone = &pgdat->node_zones[zone_type];
NR_FREE_PAGES);
if (is_highmem(zone)) {
managed_highpages += zone->managed_pages;
free_highpages += zone_page_state(zone, NR_FREE_PAGES);
}
}
val->totalhigh = managed_highpages;
val->freehigh = free_highpages;
#else #else
val->totalhigh = 0; val->totalhigh = managed_highpages;
val->freehigh = 0; val->freehigh = free_highpages;
#endif #endif
val->mem_unit = PAGE_SIZE; val->mem_unit = PAGE_SIZE;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment