cpu/hotplug: Remove CPU_STARTING and CPU_DYING notifier
authorThomas Gleixner <tglx@linutronix.de>
Thu, 18 Aug 2016 12:57:16 +0000 (14:57 +0200)
committerThomas Gleixner <tglx@linutronix.de>
Tue, 6 Sep 2016 16:30:19 +0000 (18:30 +0200)
All users are converted to state machine, remove CPU_STARTING and the
corresponding CPU_DYING.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: rt@linutronix.de
Link: http://lkml.kernel.org/r/20160818125731.27256-2-bigeasy@linutronix.de
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
arch/sparc/kernel/smp_32.c
include/linux/cpu.h
include/linux/cpuhotplug.h
kernel/cpu.c
tools/testing/radix-tree/linux/cpu.h

index fb30e7c..e80e6ba 100644 (file)
@@ -352,9 +352,7 @@ static void sparc_start_secondary(void *arg)
        preempt_disable();
        cpu = smp_processor_id();
 
-       /* Invoke the CPU_STARTING notifier callbacks */
        notify_cpu_starting(cpu);
-
        arch_cpu_pre_online(arg);
 
        /* Set the CPU in the cpu_online_mask */
index 797d9c8..6bf1992 100644 (file)
@@ -61,17 +61,8 @@ struct notifier_block;
 #define CPU_DOWN_PREPARE       0x0005 /* CPU (unsigned)v going down */
 #define CPU_DOWN_FAILED                0x0006 /* CPU (unsigned)v NOT going down */
 #define CPU_DEAD               0x0007 /* CPU (unsigned)v dead */
-#define CPU_DYING              0x0008 /* CPU (unsigned)v not running any task,
-                                       * not handling interrupts, soon dead.
-                                       * Called on the dying cpu, interrupts
-                                       * are already disabled. Must not
-                                       * sleep, must not fail */
 #define CPU_POST_DEAD          0x0009 /* CPU (unsigned)v dead, cpu_hotplug
                                        * lock is dropped */
-#define CPU_STARTING           0x000A /* CPU (unsigned)v soon running.
-                                       * Called on the new cpu, just before
-                                       * enabling interrupts. Must not sleep,
-                                       * must not fail */
 #define CPU_BROKEN             0x000B /* CPU (unsigned)v did not die properly,
                                        * perhaps due to preemption. */
 
@@ -86,9 +77,6 @@ struct notifier_block;
 #define CPU_DOWN_PREPARE_FROZEN        (CPU_DOWN_PREPARE | CPU_TASKS_FROZEN)
 #define CPU_DOWN_FAILED_FROZEN (CPU_DOWN_FAILED | CPU_TASKS_FROZEN)
 #define CPU_DEAD_FROZEN                (CPU_DEAD | CPU_TASKS_FROZEN)
-#define CPU_DYING_FROZEN       (CPU_DYING | CPU_TASKS_FROZEN)
-#define CPU_STARTING_FROZEN    (CPU_STARTING | CPU_TASKS_FROZEN)
-
 
 #ifdef CONFIG_SMP
 extern bool cpuhp_tasks_frozen;
index b95f7ad..9e6d107 100644 (file)
@@ -69,7 +69,6 @@ enum cpuhp_state {
        CPUHP_AP_ARM64_ISNDEP_STARTING,
        CPUHP_AP_SMPCFD_DYING,
        CPUHP_AP_X86_TBOOT_DYING,
-       CPUHP_AP_NOTIFY_STARTING,
        CPUHP_AP_ONLINE,
        CPUHP_TEARDOWN_CPU,
        CPUHP_AP_ONLINE_IDLE,
index 32eef27..d14ae44 100644 (file)
@@ -408,12 +408,6 @@ static int notify_online(unsigned int cpu)
        return 0;
 }
 
-static int notify_starting(unsigned int cpu)
-{
-       cpu_notify(CPU_STARTING, cpu);
-       return 0;
-}
-
 static int bringup_wait_for_ap(unsigned int cpu)
 {
        struct cpuhp_cpu_state *st = per_cpu_ptr(&cpuhp_state, cpu);
@@ -759,12 +753,6 @@ static int notify_down_prepare(unsigned int cpu)
        return err;
 }
 
-static int notify_dying(unsigned int cpu)
-{
-       cpu_notify(CPU_DYING, cpu);
-       return 0;
-}
-
 /* Take this CPU down. */
 static int take_cpu_down(void *_param)
 {
@@ -823,7 +811,7 @@ static int takedown_cpu(unsigned int cpu)
        BUG_ON(cpu_online(cpu));
 
        /*
-        * The migration_call() CPU_DYING callback will have removed all
+        * The CPUHP_AP_SCHED_MIGRATE_DYING callback will have removed all
         * runnable tasks from the cpu, there's only the idle task left now
         * that the migration thread is done doing the stop_machine thing.
         *
@@ -876,7 +864,6 @@ void cpuhp_report_idle_dead(void)
 #define notify_down_prepare    NULL
 #define takedown_cpu           NULL
 #define notify_dead            NULL
-#define notify_dying           NULL
 #endif
 
 #ifdef CONFIG_HOTPLUG_CPU
@@ -966,10 +953,9 @@ EXPORT_SYMBOL(cpu_down);
 #endif /*CONFIG_HOTPLUG_CPU*/
 
 /**
- * notify_cpu_starting(cpu) - call the CPU_STARTING notifiers
+ * notify_cpu_starting(cpu) - Invoke the callbacks on the starting CPU
  * @cpu: cpu that just started
  *
- * This function calls the cpu_chain notifiers with CPU_STARTING.
  * It must be called by the arch code on the new cpu, before the new cpu
  * enables interrupts and before the "boot" cpu returns from __cpu_up().
  */
@@ -1365,18 +1351,6 @@ static struct cpuhp_step cpuhp_ap_states[] = {
                .startup.single         = NULL,
                .teardown.single        = rcutree_dying_cpu,
        },
-       /*
-        * Low level startup.single/teardown notifiers. Run with interrupts
-        * disabled. Will be removed once the notifiers are converted to
-        * states.
-        */
-       [CPUHP_AP_NOTIFY_STARTING] = {
-               .name                   = "notify:starting",
-               .startup.single         = notify_starting,
-               .teardown.single                = notify_dying,
-               .skip_onerr             = true,
-               .cant_stop              = true,
-       },
        /* Entry state on starting. Interrupts enabled from here on. Transient
         * state for synchronsization */
        [CPUHP_AP_ONLINE] = {
index 60a4045..7cf4121 100644 (file)
@@ -7,19 +7,8 @@
 #define CPU_DOWN_PREPARE       0x0005 /* CPU (unsigned)v going down */
 #define CPU_DOWN_FAILED                0x0006 /* CPU (unsigned)v NOT going down */
 #define CPU_DEAD               0x0007 /* CPU (unsigned)v dead */
-#define CPU_DYING              0x0008 /* CPU (unsigned)v not running any task,
-                                       * not handling interrupts, soon dead.
-                                       * Called on the dying cpu, interrupts
-                                       * are already disabled. Must not
-                                       * sleep, must not fail */
 #define CPU_POST_DEAD          0x0009 /* CPU (unsigned)v dead, cpu_hotplug
                                        * lock is dropped */
-#define CPU_STARTING           0x000A /* CPU (unsigned)v soon running.
-                                       * Called on the new cpu, just before
-                                       * enabling interrupts. Must not sleep,
-                                       * must not fail */
-#define CPU_DYING_IDLE         0x000B /* CPU (unsigned)v dying, reached
-                                       * idle loop. */
 #define CPU_BROKEN             0x000C /* CPU (unsigned)v did not die properly,
                                        * perhaps due to preemption. */
 #define CPU_TASKS_FROZEN       0x0010
@@ -30,5 +19,3 @@
 #define CPU_DOWN_PREPARE_FROZEN (CPU_DOWN_PREPARE | CPU_TASKS_FROZEN)
 #define CPU_DOWN_FAILED_FROZEN  (CPU_DOWN_FAILED | CPU_TASKS_FROZEN)
 #define CPU_DEAD_FROZEN                (CPU_DEAD | CPU_TASKS_FROZEN)
-#define CPU_DYING_FROZEN       (CPU_DYING | CPU_TASKS_FROZEN)
-#define CPU_STARTING_FROZEN    (CPU_STARTING | CPU_TASKS_FROZEN)