From: Con Kolivas There are numerous places we check whether a zone is populated or not. Provide a helper function to check for populated zones and convert all checks for zone->present_pages. Signed-off-by: Con Kolivas Signed-off-by: Andrew Morton --- include/linux/mmzone.h | 5 +++++ mm/mempolicy.c | 2 +- mm/page_alloc.c | 16 ++++++++-------- mm/swap_prefetch.c | 4 ++-- mm/vmscan.c | 8 ++++---- 5 files changed, 20 insertions(+), 15 deletions(-) diff -puN include/linux/mmzone.h~mm-add-populated_zone-helper include/linux/mmzone.h --- 25/include/linux/mmzone.h~mm-add-populated_zone-helper Thu Nov 17 14:54:20 2005 +++ 25-akpm/include/linux/mmzone.h Thu Nov 17 14:54:20 2005 @@ -399,6 +399,11 @@ static inline struct zone *next_zone(str #define for_each_zone(zone) \ for (zone = pgdat_list->node_zones; zone; zone = next_zone(zone)) +static inline int populated_zone(struct zone *zone) +{ + return (!!zone->present_pages); +} + static inline int is_highmem_idx(int idx) { return (idx == ZONE_HIGHMEM); diff -puN mm/mempolicy.c~mm-add-populated_zone-helper mm/mempolicy.c --- 25/mm/mempolicy.c~mm-add-populated_zone-helper Thu Nov 17 14:54:20 2005 +++ 25-akpm/mm/mempolicy.c Thu Nov 17 14:54:20 2005 @@ -135,7 +135,7 @@ static struct zonelist *bind_zonelist(no int k; for (k = MAX_NR_ZONES-1; k >= 0; k--) { struct zone *z = &NODE_DATA(nd)->node_zones[k]; - if (!z->present_pages) + if (!populated_zone(z)) continue; zl->zones[num++] = z; if (k > policy_zone) diff -puN mm/page_alloc.c~mm-add-populated_zone-helper mm/page_alloc.c --- 25/mm/page_alloc.c~mm-add-populated_zone-helper Thu Nov 17 14:54:20 2005 +++ 25-akpm/mm/page_alloc.c Thu Nov 17 14:54:20 2005 @@ -1319,7 +1319,7 @@ void show_free_areas(void) show_node(zone); printk("%s per-cpu:", zone->name); - if (!zone->present_pages) { + if (!populated_zone(zone)) { printk(" empty\n"); continue; } else @@ -1397,7 +1397,7 @@ void show_free_areas(void) show_node(zone); printk("%s: ", zone->name); - if (!zone->present_pages) { + if (!populated_zone(zone)) { printk("empty\n"); continue; } @@ -1426,7 +1426,7 @@ static int __init build_zonelists_node(p BUG(); case ZONE_HIGHMEM: zone = pgdat->node_zones + ZONE_HIGHMEM; - if (zone->present_pages) { + if (populated_zone(zone)) { #ifndef CONFIG_HIGHMEM BUG(); #endif @@ -1434,15 +1434,15 @@ static int __init build_zonelists_node(p } case ZONE_NORMAL: zone = pgdat->node_zones + ZONE_NORMAL; - if (zone->present_pages) + if (populated_zone(zone)) zonelist->zones[j++] = zone; case ZONE_DMA32: zone = pgdat->node_zones + ZONE_DMA32; - if (zone->present_pages) + if (populated_zone(zone)) zonelist->zones[j++] = zone; case ZONE_DMA: zone = pgdat->node_zones + ZONE_DMA; - if (zone->present_pages) + if (populated_zone(zone)) zonelist->zones[j++] = zone; } @@ -2100,7 +2100,7 @@ static int frag_show(struct seq_file *m, int order; for (zone = node_zones; zone - node_zones < MAX_NR_ZONES; ++zone) { - if (!zone->present_pages) + if (!populated_zone(zone)) continue; spin_lock_irqsave(&zone->lock, flags); @@ -2133,7 +2133,7 @@ static int zoneinfo_show(struct seq_file for (zone = node_zones; zone - node_zones < MAX_NR_ZONES; zone++) { int i; - if (!zone->present_pages) + if (!populated_zone(zone)) continue; spin_lock_irqsave(&zone->lock, flags); diff -puN mm/swap_prefetch.c~mm-add-populated_zone-helper mm/swap_prefetch.c --- 25/mm/swap_prefetch.c~mm-add-populated_zone-helper Thu Nov 17 14:54:20 2005 +++ 25-akpm/mm/swap_prefetch.c Thu Nov 17 14:54:20 2005 @@ -176,7 +176,7 @@ static struct page *prefetch_get_page(vo for_each_zone(z) { long free; - if (z->present_pages == 0) + if (!populated_zone(z)) continue; /* We don't prefetch into DMA */ @@ -291,7 +291,7 @@ static int prefetch_suitable(void) for_each_zone(z) { unsigned long free; - if (z->present_pages == 0) + if (!populated_zone(z)) continue; free = z->free_pages; if (z->pages_high * 3 > free) diff -puN mm/vmscan.c~mm-add-populated_zone-helper mm/vmscan.c --- 25/mm/vmscan.c~mm-add-populated_zone-helper Thu Nov 17 14:54:20 2005 +++ 25-akpm/mm/vmscan.c Thu Nov 17 14:54:20 2005 @@ -899,7 +899,7 @@ shrink_caches(struct zone **zones, struc for (i = 0; zones[i] != NULL; i++) { struct zone *zone = zones[i]; - if (zone->present_pages == 0) + if (!populated_zone(zone)) continue; if (!cpuset_zone_allowed(zone, __GFP_HARDWALL)) @@ -1069,7 +1069,7 @@ loop_again: for (i = pgdat->nr_zones - 1; i >= 0; i--) { struct zone *zone = pgdat->node_zones + i; - if (zone->present_pages == 0) + if (!populated_zone(zone)) continue; if (zone->all_unreclaimable && @@ -1106,7 +1106,7 @@ scan: struct zone *zone = pgdat->node_zones + i; int nr_slab; - if (zone->present_pages == 0) + if (!populated_zone(zone)) continue; if (zone->all_unreclaimable && priority != DEF_PRIORITY) @@ -1258,7 +1258,7 @@ void wakeup_kswapd(struct zone *zone, in { pg_data_t *pgdat; - if (zone->present_pages == 0) + if (!populated_zone(zone)) return; pgdat = zone->zone_pgdat; _