From: Lee Schermerhorn We missed this in the "change zone order" series. We need to record the highest populated zone, just as build_zonelists_node() does. Memory policies apply only to this zone. Without this, we'll be applying policy to all zones, including DMA, I think. Not having thought about it much, I can't claim to understand the downside of doing so. Also, display selected "policy zone" during boot or reconfig of zonelist order, if 'NUMA. Inquiring minds [might] want to know... Cleanup: remove stale comment in set_zonelist_order() Signed-off-by: Lee Schermerhorn Acked-By: KAMEZAWA Hiroyuki Cc: Christoph Lameter Signed-off-by: Andrew Morton --- mm/page_alloc.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff -puN mm/page_alloc.c~change-zonelist-order-zonelist-order-selection-logic-add-check_highest_zone-to-build_zonelists_in_zone_order mm/page_alloc.c --- a/mm/page_alloc.c~change-zonelist-order-zonelist-order-selection-logic-add-check_highest_zone-to-build_zonelists_in_zone_order +++ a/mm/page_alloc.c @@ -1663,7 +1663,7 @@ static char zonelist_order_name[3][8] = #ifdef CONFIG_NUMA -/* The vaule user specified ....changed by config */ +/* The value user specified ....changed by config */ static int user_zonelist_order = ZONELIST_ORDER_DEFAULT; /* string for sysctl */ #define NUMA_ZONELIST_ORDER_LEN 16 @@ -1841,8 +1841,10 @@ static void build_zonelists_in_zone_orde for (j = 0; j < nr_nodes; j++) { node = node_order[j]; z = &NODE_DATA(node)->node_zones[zone_type]; - if (populated_zone(z)) + if (populated_zone(z)) { zonelist->zones[pos++] = z; + check_highest_zone(zone_type); + } } } zonelist->zones[pos] = NULL; @@ -1857,7 +1859,6 @@ static int default_zonelist_order(void) static void set_zonelist_order(void) { - /* dummy, just select node order. */ if (user_zonelist_order == ZONELIST_ORDER_DEFAULT) current_zonelist_order = default_zonelist_order(); else @@ -2024,6 +2025,9 @@ void build_all_zonelists(void) printk("Built %i zonelists in %s order. Total pages: %ld\n", zonelist_order_name[current_zonelist_order], num_online_nodes(), vm_total_pages); +#ifdef CONFIG_NUMA + printk("Policy zone: %s\n", zone_names[policy_zone]); +#endif } /* _