Merge tag 'for-5.13/dm-changes' of git://git.kernel.org/pub/scm/linux/kernel/git...
[linux-2.6-microblaze.git] / kernel / cpu.c
index 23505d6..e538518 100644 (file)
@@ -63,6 +63,7 @@ struct cpuhp_cpu_state {
        bool                    rollback;
        bool                    single;
        bool                    bringup;
+       int                     cpu;
        struct hlist_node       *node;
        struct hlist_node       *last;
        enum cpuhp_state        cb_state;
@@ -464,13 +465,16 @@ static inline enum cpuhp_state
 cpuhp_set_state(struct cpuhp_cpu_state *st, enum cpuhp_state target)
 {
        enum cpuhp_state prev_state = st->state;
+       bool bringup = st->state < target;
 
        st->rollback = false;
        st->last = NULL;
 
        st->target = target;
        st->single = false;
-       st->bringup = st->state < target;
+       st->bringup = bringup;
+       if (cpu_dying(st->cpu) != !bringup)
+               set_cpu_dying(st->cpu, !bringup);
 
        return prev_state;
 }
@@ -478,6 +482,8 @@ cpuhp_set_state(struct cpuhp_cpu_state *st, enum cpuhp_state target)
 static inline void
 cpuhp_reset_state(struct cpuhp_cpu_state *st, enum cpuhp_state prev_state)
 {
+       bool bringup = !st->bringup;
+
        st->target = prev_state;
 
        /*
@@ -500,7 +506,9 @@ cpuhp_reset_state(struct cpuhp_cpu_state *st, enum cpuhp_state prev_state)
                        st->state++;
        }
 
-       st->bringup = !st->bringup;
+       st->bringup = bringup;
+       if (cpu_dying(st->cpu) != !bringup)
+               set_cpu_dying(st->cpu, !bringup);
 }
 
 /* Regular hotplug invocation of the AP hotplug thread */
@@ -690,6 +698,7 @@ static void cpuhp_create(unsigned int cpu)
 
        init_completion(&st->done_up);
        init_completion(&st->done_down);
+       st->cpu = cpu;
 }
 
 static int cpuhp_should_run(unsigned int cpu)
@@ -2512,6 +2521,9 @@ EXPORT_SYMBOL(__cpu_present_mask);
 struct cpumask __cpu_active_mask __read_mostly;
 EXPORT_SYMBOL(__cpu_active_mask);
 
+struct cpumask __cpu_dying_mask __read_mostly;
+EXPORT_SYMBOL(__cpu_dying_mask);
+
 atomic_t __num_online_cpus __read_mostly;
 EXPORT_SYMBOL(__num_online_cpus);