|
@@ -3142,6 +3142,32 @@ int zone_wait_table_init(struct zone *zone, unsigned long zone_size_pages)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+static int __zone_pcp_update(void *data)
|
|
|
+{
|
|
|
+ struct zone *zone = data;
|
|
|
+ int cpu;
|
|
|
+ unsigned long batch = zone_batchsize(zone), flags;
|
|
|
+
|
|
|
+ for (cpu = 0; cpu < NR_CPUS; cpu++) {
|
|
|
+ struct per_cpu_pageset *pset;
|
|
|
+ struct per_cpu_pages *pcp;
|
|
|
+
|
|
|
+ pset = zone_pcp(zone, cpu);
|
|
|
+ pcp = &pset->pcp;
|
|
|
+
|
|
|
+ local_irq_save(flags);
|
|
|
+ free_pages_bulk(zone, pcp->count, &pcp->list, 0);
|
|
|
+ setup_pageset(pset, batch);
|
|
|
+ local_irq_restore(flags);
|
|
|
+ }
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+void zone_pcp_update(struct zone *zone)
|
|
|
+{
|
|
|
+ stop_machine(__zone_pcp_update, zone, NULL);
|
|
|
+}
|
|
|
+
|
|
|
static __meminit void zone_pcp_init(struct zone *zone)
|
|
|
{
|
|
|
int cpu;
|