]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - mm/page_alloc.c
mm/page_alloc: Convert to hotplug state machine
[karo-tx-linux.git] / mm / page_alloc.c
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);
 }
 
 /*