aboutsummaryrefslogtreecommitdiffstats
path: root/mm/page_alloc.c
diff options
context:
space:
mode:
Diffstat (limited to 'mm/page_alloc.c')
-rw-r--r--mm/page_alloc.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index f4e929e356db..1a3a893ef50e 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -3142,6 +3142,32 @@ int zone_wait_table_init(struct zone *zone, unsigned long zone_size_pages)
3142 return 0; 3142 return 0;
3143} 3143}
3144 3144
3145static int __zone_pcp_update(void *data)
3146{
3147 struct zone *zone = data;
3148 int cpu;
3149 unsigned long batch = zone_batchsize(zone), flags;
3150
3151 for (cpu = 0; cpu < NR_CPUS; cpu++) {
3152 struct per_cpu_pageset *pset;
3153 struct per_cpu_pages *pcp;
3154
3155 pset = zone_pcp(zone, cpu);
3156 pcp = &pset->pcp;
3157
3158 local_irq_save(flags);
3159 free_pages_bulk(zone, pcp->count, &pcp->list, 0);
3160 setup_pageset(pset, batch);
3161 local_irq_restore(flags);
3162 }
3163 return 0;
3164}
3165
3166void zone_pcp_update(struct zone *zone)
3167{
3168 stop_machine(__zone_pcp_update, zone, NULL);
3169}
3170
3145static __meminit void zone_pcp_init(struct zone *zone) 3171static __meminit void zone_pcp_init(struct zone *zone)
3146{ 3172{
3147 int cpu; 3173 int cpu;