diff options
Diffstat (limited to 'mm/page_alloc.c')
| -rw-r--r-- | mm/page_alloc.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 595d0ac211e2..21c52d2d8624 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c | |||
| @@ -2572,7 +2572,7 @@ int numa_zonelist_order_handler(ctl_table *table, int write, | |||
| 2572 | NUMA_ZONELIST_ORDER_LEN); | 2572 | NUMA_ZONELIST_ORDER_LEN); |
| 2573 | user_zonelist_order = oldval; | 2573 | user_zonelist_order = oldval; |
| 2574 | } else if (oldval != user_zonelist_order) | 2574 | } else if (oldval != user_zonelist_order) |
| 2575 | build_all_zonelists(); | 2575 | build_all_zonelists(NULL); |
| 2576 | } | 2576 | } |
| 2577 | out: | 2577 | out: |
| 2578 | mutex_unlock(&zl_order_mutex); | 2578 | mutex_unlock(&zl_order_mutex); |
| @@ -2922,9 +2922,10 @@ static void build_zonelist_cache(pg_data_t *pgdat) | |||
| 2922 | */ | 2922 | */ |
| 2923 | static void setup_pageset(struct per_cpu_pageset *p, unsigned long batch); | 2923 | static void setup_pageset(struct per_cpu_pageset *p, unsigned long batch); |
| 2924 | static DEFINE_PER_CPU(struct per_cpu_pageset, boot_pageset); | 2924 | static DEFINE_PER_CPU(struct per_cpu_pageset, boot_pageset); |
| 2925 | static void setup_zone_pageset(struct zone *zone); | ||
| 2925 | 2926 | ||
| 2926 | /* return values int ....just for stop_machine() */ | 2927 | /* return values int ....just for stop_machine() */ |
| 2927 | static int __build_all_zonelists(void *dummy) | 2928 | static __init_refok int __build_all_zonelists(void *data) |
| 2928 | { | 2929 | { |
| 2929 | int nid; | 2930 | int nid; |
| 2930 | int cpu; | 2931 | int cpu; |
| @@ -2939,6 +2940,14 @@ static int __build_all_zonelists(void *dummy) | |||
| 2939 | build_zonelist_cache(pgdat); | 2940 | build_zonelist_cache(pgdat); |
| 2940 | } | 2941 | } |
| 2941 | 2942 | ||
| 2943 | #ifdef CONFIG_MEMORY_HOTPLUG | ||
| 2944 | /* Setup real pagesets for the new zone */ | ||
| 2945 | if (data) { | ||
| 2946 | struct zone *zone = data; | ||
| 2947 | setup_zone_pageset(zone); | ||
| 2948 | } | ||
| 2949 | #endif | ||
| 2950 | |||
| 2942 | /* | 2951 | /* |
| 2943 | * Initialize the boot_pagesets that are going to be used | 2952 | * Initialize the boot_pagesets that are going to be used |
| 2944 | * for bootstrapping processors. The real pagesets for | 2953 | * for bootstrapping processors. The real pagesets for |
| @@ -2958,7 +2967,7 @@ static int __build_all_zonelists(void *dummy) | |||
| 2958 | return 0; | 2967 | return 0; |
| 2959 | } | 2968 | } |
| 2960 | 2969 | ||
| 2961 | void build_all_zonelists(void) | 2970 | void build_all_zonelists(void *data) |
| 2962 | { | 2971 | { |
| 2963 | set_zonelist_order(); | 2972 | set_zonelist_order(); |
| 2964 | 2973 | ||
| @@ -2969,7 +2978,7 @@ void build_all_zonelists(void) | |||
| 2969 | } else { | 2978 | } else { |
| 2970 | /* we have to stop all cpus to guarantee there is no user | 2979 | /* we have to stop all cpus to guarantee there is no user |
| 2971 | of zonelist */ | 2980 | of zonelist */ |
| 2972 | stop_machine(__build_all_zonelists, NULL, NULL); | 2981 | stop_machine(__build_all_zonelists, data, NULL); |
| 2973 | /* cpuset refresh routine should be here */ | 2982 | /* cpuset refresh routine should be here */ |
| 2974 | } | 2983 | } |
| 2975 | vm_total_pages = nr_free_pagecache_pages(); | 2984 | vm_total_pages = nr_free_pagecache_pages(); |
