|
@@ -6491,38 +6491,39 @@ void __init free_area_init(unsigned long *zones_size)
|
|
|
__pa(PAGE_OFFSET) >> PAGE_SHIFT, NULL);
|
|
|
}
|
|
|
|
|
|
-static int page_alloc_cpu_notify(struct notifier_block *self,
|
|
|
- unsigned long action, void *hcpu)
|
|
|
+static int page_alloc_cpu_dead(unsigned int cpu)
|
|
|
{
|
|
|
- int cpu = (unsigned long)hcpu;
|
|
|
|
|
|
- if (action == CPU_DEAD || action == CPU_DEAD_FROZEN) {
|
|
|
- lru_add_drain_cpu(cpu);
|
|
|
- drain_pages(cpu);
|
|
|
+ lru_add_drain_cpu(cpu);
|
|
|
+ drain_pages(cpu);
|
|
|
|
|
|
- /*
|
|
|
- * Spill the event counters of the dead processor
|
|
|
- * into the current processors event counters.
|
|
|
- * This artificially elevates the count of the current
|
|
|
- * processor.
|
|
|
- */
|
|
|
- vm_events_fold_cpu(cpu);
|
|
|
+ /*
|
|
|
+ * Spill the event counters of the dead processor
|
|
|
+ * into the current processors event counters.
|
|
|
+ * This artificially elevates the count of the current
|
|
|
+ * processor.
|
|
|
+ */
|
|
|
+ vm_events_fold_cpu(cpu);
|
|
|
|
|
|
- /*
|
|
|
- * Zero the differential counters of the dead processor
|
|
|
- * so that the vm statistics are consistent.
|
|
|
- *
|
|
|
- * This is only okay since the processor is dead and cannot
|
|
|
- * race with what we are doing.
|
|
|
- */
|
|
|
- cpu_vm_stats_fold(cpu);
|
|
|
- }
|
|
|
- return NOTIFY_OK;
|
|
|
+ /*
|
|
|
+ * Zero the differential counters of the dead processor
|
|
|
+ * so that the vm statistics are consistent.
|
|
|
+ *
|
|
|
+ * This is only okay since the processor is dead and cannot
|
|
|
+ * race with what we are doing.
|
|
|
+ */
|
|
|
+ cpu_vm_stats_fold(cpu);
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
void __init page_alloc_init(void)
|
|
|
{
|
|
|
- hotcpu_notifier(page_alloc_cpu_notify, 0);
|
|
|
+ int ret;
|
|
|
+
|
|
|
+ ret = cpuhp_setup_state_nocalls(CPUHP_PAGE_ALLOC_DEAD,
|
|
|
+ "mm/page_alloc:dead", NULL,
|
|
|
+ page_alloc_cpu_dead);
|
|
|
+ WARN_ON(ret < 0);
|
|
|
}
|
|
|
|
|
|
/*
|