diff options
-rw-r--r-- | include/linux/vmstat.h | 2 | ||||
-rw-r--r-- | mm/page_alloc.c | 9 | ||||
-rw-r--r-- | mm/vmstat.c | 6 |
3 files changed, 9 insertions, 8 deletions
diff --git a/include/linux/vmstat.h b/include/linux/vmstat.h index 9f1b4b46151e..e726b6d46495 100644 --- a/include/linux/vmstat.h +++ b/include/linux/vmstat.h | |||
@@ -174,7 +174,7 @@ static inline unsigned long node_page_state(int node, | |||
174 | zone_page_state(&zones[ZONE_MOVABLE], item); | 174 | zone_page_state(&zones[ZONE_MOVABLE], item); |
175 | } | 175 | } |
176 | 176 | ||
177 | extern void zone_statistics(struct zonelist *, struct zone *); | 177 | extern void zone_statistics(struct zone *, struct zone *); |
178 | 178 | ||
179 | #else | 179 | #else |
180 | 180 | ||
diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 63ff71830ea4..187efd47a446 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c | |||
@@ -1050,7 +1050,7 @@ void split_page(struct page *page, unsigned int order) | |||
1050 | * we cheat by calling it from here, in the order > 0 path. Saves a branch | 1050 | * we cheat by calling it from here, in the order > 0 path. Saves a branch |
1051 | * or two. | 1051 | * or two. |
1052 | */ | 1052 | */ |
1053 | static struct page *buffered_rmqueue(struct zonelist *zonelist, | 1053 | static struct page *buffered_rmqueue(struct zone *preferred_zone, |
1054 | struct zone *zone, int order, gfp_t gfp_flags) | 1054 | struct zone *zone, int order, gfp_t gfp_flags) |
1055 | { | 1055 | { |
1056 | unsigned long flags; | 1056 | unsigned long flags; |
@@ -1102,7 +1102,7 @@ again: | |||
1102 | } | 1102 | } |
1103 | 1103 | ||
1104 | __count_zone_vm_events(PGALLOC, zone, 1 << order); | 1104 | __count_zone_vm_events(PGALLOC, zone, 1 << order); |
1105 | zone_statistics(zonelist, zone); | 1105 | zone_statistics(preferred_zone, zone); |
1106 | local_irq_restore(flags); | 1106 | local_irq_restore(flags); |
1107 | put_cpu(); | 1107 | put_cpu(); |
1108 | 1108 | ||
@@ -1383,7 +1383,7 @@ get_page_from_freelist(gfp_t gfp_mask, unsigned int order, | |||
1383 | struct zone **z; | 1383 | struct zone **z; |
1384 | struct page *page = NULL; | 1384 | struct page *page = NULL; |
1385 | int classzone_idx = zone_idx(zonelist->zones[0]); | 1385 | int classzone_idx = zone_idx(zonelist->zones[0]); |
1386 | struct zone *zone; | 1386 | struct zone *zone, *preferred_zone; |
1387 | nodemask_t *allowednodes = NULL;/* zonelist_cache approximation */ | 1387 | nodemask_t *allowednodes = NULL;/* zonelist_cache approximation */ |
1388 | int zlc_active = 0; /* set if using zonelist_cache */ | 1388 | int zlc_active = 0; /* set if using zonelist_cache */ |
1389 | int did_zlc_setup = 0; /* just call zlc_setup() one time */ | 1389 | int did_zlc_setup = 0; /* just call zlc_setup() one time */ |
@@ -1395,6 +1395,7 @@ zonelist_scan: | |||
1395 | * See also cpuset_zone_allowed() comment in kernel/cpuset.c. | 1395 | * See also cpuset_zone_allowed() comment in kernel/cpuset.c. |
1396 | */ | 1396 | */ |
1397 | z = zonelist->zones; | 1397 | z = zonelist->zones; |
1398 | preferred_zone = *z; | ||
1398 | 1399 | ||
1399 | do { | 1400 | do { |
1400 | /* | 1401 | /* |
@@ -1433,7 +1434,7 @@ zonelist_scan: | |||
1433 | } | 1434 | } |
1434 | } | 1435 | } |
1435 | 1436 | ||
1436 | page = buffered_rmqueue(zonelist, zone, order, gfp_mask); | 1437 | page = buffered_rmqueue(preferred_zone, zone, order, gfp_mask); |
1437 | if (page) | 1438 | if (page) |
1438 | break; | 1439 | break; |
1439 | this_zone_full: | 1440 | this_zone_full: |
diff --git a/mm/vmstat.c b/mm/vmstat.c index 7c7286e9506d..879bcc0a1d4c 100644 --- a/mm/vmstat.c +++ b/mm/vmstat.c | |||
@@ -364,13 +364,13 @@ void refresh_cpu_vm_stats(int cpu) | |||
364 | * | 364 | * |
365 | * Must be called with interrupts disabled. | 365 | * Must be called with interrupts disabled. |
366 | */ | 366 | */ |
367 | void zone_statistics(struct zonelist *zonelist, struct zone *z) | 367 | void zone_statistics(struct zone *preferred_zone, struct zone *z) |
368 | { | 368 | { |
369 | if (z->zone_pgdat == zonelist->zones[0]->zone_pgdat) { | 369 | if (z->zone_pgdat == preferred_zone->zone_pgdat) { |
370 | __inc_zone_state(z, NUMA_HIT); | 370 | __inc_zone_state(z, NUMA_HIT); |
371 | } else { | 371 | } else { |
372 | __inc_zone_state(z, NUMA_MISS); | 372 | __inc_zone_state(z, NUMA_MISS); |
373 | __inc_zone_state(zonelist->zones[0], NUMA_FOREIGN); | 373 | __inc_zone_state(preferred_zone, NUMA_FOREIGN); |
374 | } | 374 | } |
375 | if (z->node == numa_node_id()) | 375 | if (z->node == numa_node_id()) |
376 | __inc_zone_state(z, NUMA_LOCAL); | 376 | __inc_zone_state(z, NUMA_LOCAL); |