diff options
Diffstat (limited to 'mm/page_alloc.c')
-rw-r--r-- | mm/page_alloc.c | 44 |
1 files changed, 22 insertions, 22 deletions
diff --git a/mm/page_alloc.c b/mm/page_alloc.c index b79e79caea99..4b5c4ff68f18 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c | |||
@@ -1280,7 +1280,7 @@ static void __init __free_pages_boot_core(struct page *page, unsigned int order) | |||
1280 | __ClearPageReserved(p); | 1280 | __ClearPageReserved(p); |
1281 | set_page_count(p, 0); | 1281 | set_page_count(p, 0); |
1282 | 1282 | ||
1283 | page_zone(page)->managed_pages += nr_pages; | 1283 | atomic_long_add(nr_pages, &page_zone(page)->managed_pages); |
1284 | set_page_refcounted(page); | 1284 | set_page_refcounted(page); |
1285 | __free_pages(page, order); | 1285 | __free_pages(page, order); |
1286 | } | 1286 | } |
@@ -2259,7 +2259,7 @@ static void reserve_highatomic_pageblock(struct page *page, struct zone *zone, | |||
2259 | * Limit the number reserved to 1 pageblock or roughly 1% of a zone. | 2259 | * Limit the number reserved to 1 pageblock or roughly 1% of a zone. |
2260 | * Check is race-prone but harmless. | 2260 | * Check is race-prone but harmless. |
2261 | */ | 2261 | */ |
2262 | max_managed = (zone->managed_pages / 100) + pageblock_nr_pages; | 2262 | max_managed = (zone_managed_pages(zone) / 100) + pageblock_nr_pages; |
2263 | if (zone->nr_reserved_highatomic >= max_managed) | 2263 | if (zone->nr_reserved_highatomic >= max_managed) |
2264 | return; | 2264 | return; |
2265 | 2265 | ||
@@ -4661,7 +4661,7 @@ static unsigned long nr_free_zone_pages(int offset) | |||
4661 | struct zonelist *zonelist = node_zonelist(numa_node_id(), GFP_KERNEL); | 4661 | struct zonelist *zonelist = node_zonelist(numa_node_id(), GFP_KERNEL); |
4662 | 4662 | ||
4663 | for_each_zone_zonelist(zone, z, zonelist, offset) { | 4663 | for_each_zone_zonelist(zone, z, zonelist, offset) { |
4664 | unsigned long size = zone->managed_pages; | 4664 | unsigned long size = zone_managed_pages(zone); |
4665 | unsigned long high = high_wmark_pages(zone); | 4665 | unsigned long high = high_wmark_pages(zone); |
4666 | if (size > high) | 4666 | if (size > high) |
4667 | sum += size - high; | 4667 | sum += size - high; |
@@ -4768,7 +4768,7 @@ void si_meminfo_node(struct sysinfo *val, int nid) | |||
4768 | pg_data_t *pgdat = NODE_DATA(nid); | 4768 | pg_data_t *pgdat = NODE_DATA(nid); |
4769 | 4769 | ||
4770 | for (zone_type = 0; zone_type < MAX_NR_ZONES; zone_type++) | 4770 | for (zone_type = 0; zone_type < MAX_NR_ZONES; zone_type++) |
4771 | managed_pages += pgdat->node_zones[zone_type].managed_pages; | 4771 | managed_pages += zone_managed_pages(&pgdat->node_zones[zone_type]); |
4772 | val->totalram = managed_pages; | 4772 | val->totalram = managed_pages; |
4773 | val->sharedram = node_page_state(pgdat, NR_SHMEM); | 4773 | val->sharedram = node_page_state(pgdat, NR_SHMEM); |
4774 | val->freeram = sum_zone_node_page_state(nid, NR_FREE_PAGES); | 4774 | val->freeram = sum_zone_node_page_state(nid, NR_FREE_PAGES); |
@@ -4777,7 +4777,7 @@ void si_meminfo_node(struct sysinfo *val, int nid) | |||
4777 | struct zone *zone = &pgdat->node_zones[zone_type]; | 4777 | struct zone *zone = &pgdat->node_zones[zone_type]; |
4778 | 4778 | ||
4779 | if (is_highmem(zone)) { | 4779 | if (is_highmem(zone)) { |
4780 | managed_highpages += zone->managed_pages; | 4780 | managed_highpages += zone_managed_pages(zone); |
4781 | free_highpages += zone_page_state(zone, NR_FREE_PAGES); | 4781 | free_highpages += zone_page_state(zone, NR_FREE_PAGES); |
4782 | } | 4782 | } |
4783 | } | 4783 | } |
@@ -4984,7 +4984,7 @@ void show_free_areas(unsigned int filter, nodemask_t *nodemask) | |||
4984 | K(zone_page_state(zone, NR_ZONE_UNEVICTABLE)), | 4984 | K(zone_page_state(zone, NR_ZONE_UNEVICTABLE)), |
4985 | K(zone_page_state(zone, NR_ZONE_WRITE_PENDING)), | 4985 | K(zone_page_state(zone, NR_ZONE_WRITE_PENDING)), |
4986 | K(zone->present_pages), | 4986 | K(zone->present_pages), |
4987 | K(zone->managed_pages), | 4987 | K(zone_managed_pages(zone)), |
4988 | K(zone_page_state(zone, NR_MLOCK)), | 4988 | K(zone_page_state(zone, NR_MLOCK)), |
4989 | zone_page_state(zone, NR_KERNEL_STACK_KB), | 4989 | zone_page_state(zone, NR_KERNEL_STACK_KB), |
4990 | K(zone_page_state(zone, NR_PAGETABLE)), | 4990 | K(zone_page_state(zone, NR_PAGETABLE)), |
@@ -5656,7 +5656,7 @@ static int zone_batchsize(struct zone *zone) | |||
5656 | * The per-cpu-pages pools are set to around 1000th of the | 5656 | * The per-cpu-pages pools are set to around 1000th of the |
5657 | * size of the zone. | 5657 | * size of the zone. |
5658 | */ | 5658 | */ |
5659 | batch = zone->managed_pages / 1024; | 5659 | batch = zone_managed_pages(zone) / 1024; |
5660 | /* But no more than a meg. */ | 5660 | /* But no more than a meg. */ |
5661 | if (batch * PAGE_SIZE > 1024 * 1024) | 5661 | if (batch * PAGE_SIZE > 1024 * 1024) |
5662 | batch = (1024 * 1024) / PAGE_SIZE; | 5662 | batch = (1024 * 1024) / PAGE_SIZE; |
@@ -5766,7 +5766,7 @@ static void pageset_set_high_and_batch(struct zone *zone, | |||
5766 | { | 5766 | { |
5767 | if (percpu_pagelist_fraction) | 5767 | if (percpu_pagelist_fraction) |
5768 | pageset_set_high(pcp, | 5768 | pageset_set_high(pcp, |
5769 | (zone->managed_pages / | 5769 | (zone_managed_pages(zone) / |
5770 | percpu_pagelist_fraction)); | 5770 | percpu_pagelist_fraction)); |
5771 | else | 5771 | else |
5772 | pageset_set_batch(pcp, zone_batchsize(zone)); | 5772 | pageset_set_batch(pcp, zone_batchsize(zone)); |
@@ -6323,7 +6323,7 @@ static void __meminit pgdat_init_internals(struct pglist_data *pgdat) | |||
6323 | static void __meminit zone_init_internals(struct zone *zone, enum zone_type idx, int nid, | 6323 | static void __meminit zone_init_internals(struct zone *zone, enum zone_type idx, int nid, |
6324 | unsigned long remaining_pages) | 6324 | unsigned long remaining_pages) |
6325 | { | 6325 | { |
6326 | zone->managed_pages = remaining_pages; | 6326 | atomic_long_set(&zone->managed_pages, remaining_pages); |
6327 | zone_set_nid(zone, nid); | 6327 | zone_set_nid(zone, nid); |
6328 | zone->name = zone_names[idx]; | 6328 | zone->name = zone_names[idx]; |
6329 | zone->zone_pgdat = NODE_DATA(nid); | 6329 | zone->zone_pgdat = NODE_DATA(nid); |
@@ -7076,7 +7076,7 @@ early_param("movablecore", cmdline_parse_movablecore); | |||
7076 | void adjust_managed_page_count(struct page *page, long count) | 7076 | void adjust_managed_page_count(struct page *page, long count) |
7077 | { | 7077 | { |
7078 | spin_lock(&managed_page_count_lock); | 7078 | spin_lock(&managed_page_count_lock); |
7079 | page_zone(page)->managed_pages += count; | 7079 | atomic_long_add(count, &page_zone(page)->managed_pages); |
7080 | totalram_pages += count; | 7080 | totalram_pages += count; |
7081 | #ifdef CONFIG_HIGHMEM | 7081 | #ifdef CONFIG_HIGHMEM |
7082 | if (PageHighMem(page)) | 7082 | if (PageHighMem(page)) |
@@ -7124,7 +7124,7 @@ void free_highmem_page(struct page *page) | |||
7124 | { | 7124 | { |
7125 | __free_reserved_page(page); | 7125 | __free_reserved_page(page); |
7126 | totalram_pages++; | 7126 | totalram_pages++; |
7127 | page_zone(page)->managed_pages++; | 7127 | atomic_long_inc(&page_zone(page)->managed_pages); |
7128 | totalhigh_pages++; | 7128 | totalhigh_pages++; |
7129 | } | 7129 | } |
7130 | #endif | 7130 | #endif |
@@ -7257,7 +7257,7 @@ static void calculate_totalreserve_pages(void) | |||
7257 | for (i = 0; i < MAX_NR_ZONES; i++) { | 7257 | for (i = 0; i < MAX_NR_ZONES; i++) { |
7258 | struct zone *zone = pgdat->node_zones + i; | 7258 | struct zone *zone = pgdat->node_zones + i; |
7259 | long max = 0; | 7259 | long max = 0; |
7260 | unsigned long managed_pages = zone->managed_pages; | 7260 | unsigned long managed_pages = zone_managed_pages(zone); |
7261 | 7261 | ||
7262 | /* Find valid and maximum lowmem_reserve in the zone */ | 7262 | /* Find valid and maximum lowmem_reserve in the zone */ |
7263 | for (j = i; j < MAX_NR_ZONES; j++) { | 7263 | for (j = i; j < MAX_NR_ZONES; j++) { |
@@ -7293,7 +7293,7 @@ static void setup_per_zone_lowmem_reserve(void) | |||
7293 | for_each_online_pgdat(pgdat) { | 7293 | for_each_online_pgdat(pgdat) { |
7294 | for (j = 0; j < MAX_NR_ZONES; j++) { | 7294 | for (j = 0; j < MAX_NR_ZONES; j++) { |
7295 | struct zone *zone = pgdat->node_zones + j; | 7295 | struct zone *zone = pgdat->node_zones + j; |
7296 | unsigned long managed_pages = zone->managed_pages; | 7296 | unsigned long managed_pages = zone_managed_pages(zone); |
7297 | 7297 | ||
7298 | zone->lowmem_reserve[j] = 0; | 7298 | zone->lowmem_reserve[j] = 0; |
7299 | 7299 | ||
@@ -7311,7 +7311,7 @@ static void setup_per_zone_lowmem_reserve(void) | |||
7311 | lower_zone->lowmem_reserve[j] = | 7311 | lower_zone->lowmem_reserve[j] = |
7312 | managed_pages / sysctl_lowmem_reserve_ratio[idx]; | 7312 | managed_pages / sysctl_lowmem_reserve_ratio[idx]; |
7313 | } | 7313 | } |
7314 | managed_pages += lower_zone->managed_pages; | 7314 | managed_pages += zone_managed_pages(lower_zone); |
7315 | } | 7315 | } |
7316 | } | 7316 | } |
7317 | } | 7317 | } |
@@ -7330,14 +7330,14 @@ static void __setup_per_zone_wmarks(void) | |||
7330 | /* Calculate total number of !ZONE_HIGHMEM pages */ | 7330 | /* Calculate total number of !ZONE_HIGHMEM pages */ |
7331 | for_each_zone(zone) { | 7331 | for_each_zone(zone) { |
7332 | if (!is_highmem(zone)) | 7332 | if (!is_highmem(zone)) |
7333 | lowmem_pages += zone->managed_pages; | 7333 | lowmem_pages += zone_managed_pages(zone); |
7334 | } | 7334 | } |
7335 | 7335 | ||
7336 | for_each_zone(zone) { | 7336 | for_each_zone(zone) { |
7337 | u64 tmp; | 7337 | u64 tmp; |
7338 | 7338 | ||
7339 | spin_lock_irqsave(&zone->lock, flags); | 7339 | spin_lock_irqsave(&zone->lock, flags); |
7340 | tmp = (u64)pages_min * zone->managed_pages; | 7340 | tmp = (u64)pages_min * zone_managed_pages(zone); |
7341 | do_div(tmp, lowmem_pages); | 7341 | do_div(tmp, lowmem_pages); |
7342 | if (is_highmem(zone)) { | 7342 | if (is_highmem(zone)) { |
7343 | /* | 7343 | /* |
@@ -7351,7 +7351,7 @@ static void __setup_per_zone_wmarks(void) | |||
7351 | */ | 7351 | */ |
7352 | unsigned long min_pages; | 7352 | unsigned long min_pages; |
7353 | 7353 | ||
7354 | min_pages = zone->managed_pages / 1024; | 7354 | min_pages = zone_managed_pages(zone) / 1024; |
7355 | min_pages = clamp(min_pages, SWAP_CLUSTER_MAX, 128UL); | 7355 | min_pages = clamp(min_pages, SWAP_CLUSTER_MAX, 128UL); |
7356 | zone->watermark[WMARK_MIN] = min_pages; | 7356 | zone->watermark[WMARK_MIN] = min_pages; |
7357 | } else { | 7357 | } else { |
@@ -7368,7 +7368,7 @@ static void __setup_per_zone_wmarks(void) | |||
7368 | * ensure a minimum size on small systems. | 7368 | * ensure a minimum size on small systems. |
7369 | */ | 7369 | */ |
7370 | tmp = max_t(u64, tmp >> 2, | 7370 | tmp = max_t(u64, tmp >> 2, |
7371 | mult_frac(zone->managed_pages, | 7371 | mult_frac(zone_managed_pages(zone), |
7372 | watermark_scale_factor, 10000)); | 7372 | watermark_scale_factor, 10000)); |
7373 | 7373 | ||
7374 | zone->watermark[WMARK_LOW] = min_wmark_pages(zone) + tmp; | 7374 | zone->watermark[WMARK_LOW] = min_wmark_pages(zone) + tmp; |
@@ -7498,8 +7498,8 @@ static void setup_min_unmapped_ratio(void) | |||
7498 | pgdat->min_unmapped_pages = 0; | 7498 | pgdat->min_unmapped_pages = 0; |
7499 | 7499 | ||
7500 | for_each_zone(zone) | 7500 | for_each_zone(zone) |
7501 | zone->zone_pgdat->min_unmapped_pages += (zone->managed_pages * | 7501 | zone->zone_pgdat->min_unmapped_pages += (zone_managed_pages(zone) * |
7502 | sysctl_min_unmapped_ratio) / 100; | 7502 | sysctl_min_unmapped_ratio) / 100; |
7503 | } | 7503 | } |
7504 | 7504 | ||
7505 | 7505 | ||
@@ -7526,8 +7526,8 @@ static void setup_min_slab_ratio(void) | |||
7526 | pgdat->min_slab_pages = 0; | 7526 | pgdat->min_slab_pages = 0; |
7527 | 7527 | ||
7528 | for_each_zone(zone) | 7528 | for_each_zone(zone) |
7529 | zone->zone_pgdat->min_slab_pages += (zone->managed_pages * | 7529 | zone->zone_pgdat->min_slab_pages += (zone_managed_pages(zone) * |
7530 | sysctl_min_slab_ratio) / 100; | 7530 | sysctl_min_slab_ratio) / 100; |
7531 | } | 7531 | } |
7532 | 7532 | ||
7533 | int sysctl_min_slab_ratio_sysctl_handler(struct ctl_table *table, int write, | 7533 | int sysctl_min_slab_ratio_sysctl_handler(struct ctl_table *table, int write, |