mm/page_alloc: Convert to hotplug state machine
authorSebastian Andrzej Siewior <bigeasy@linutronix.de>
Thu, 3 Nov 2016 14:50:02 +0000 (15:50 +0100)
committerThomas Gleixner <tglx@linutronix.de>
Wed, 9 Nov 2016 22:45:27 +0000 (23:45 +0100)
Install the callbacks via the state machine.

Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: linux-mm@kvack.org
Cc: rt@linutronix.de
Link: http://lkml.kernel.org/r/20161103145021.28528-7-bigeasy@linutronix.de
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
include/linux/cpuhotplug.h
mm/page_alloc.c

index 89310fb1031df07429ab64fd2d3c09844e47d825..31c58f6ec3c688aa567c3c474115b3e0566e58e3 100644 (file)
@@ -35,6 +35,7 @@ enum cpuhp_state {
        CPUHP_MM_MEMCQ_DEAD,
        CPUHP_PERCPU_CNT_DEAD,
        CPUHP_RADIX_DEAD,
+       CPUHP_PAGE_ALLOC_DEAD,
        CPUHP_WORKQUEUE_PREP,
        CPUHP_POWER_NUMA_PREPARE,
        CPUHP_HRTIMERS_PREPARE,
index 072d791dce2d5e1304a8c2a9524a1a18dd89b623..fc98c2bae905dfe935ee25c8914ebfab93879a30 100644 (file)
@@ -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);
 }
 
 /*