On Mon, Mar 23, 2020 at 01:50:54PM +0000, Qais Yousef wrote: > The new functions use device_{online,offline}() which are userspace > safe. > > This is in preparation to move cpu_{up, down} kernel users to use > a safer interface that is not racy with userspace. > > Suggested-by: "Paul E. McKenney" <paulmck@xxxxxxxxxx> > Signed-off-by: Qais Yousef <qais.yousef@xxxxxxx> > CC: Thomas Gleixner <tglx@xxxxxxxxxxxxx> > CC: "Paul E. McKenney" <paulmck@xxxxxxxxxx> Reviewed-by: Paul E. McKenney <paulmck@xxxxxxxxxx> > CC: Helge Deller <deller@xxxxxx> > CC: Michael Ellerman <mpe@xxxxxxxxxxxxxx> > CC: "David S. Miller" <davem@xxxxxxxxxxxxx> > CC: Juergen Gross <jgross@xxxxxxxx> > CC: Mark Rutland <mark.rutland@xxxxxxx> > CC: Lorenzo Pieralisi <lorenzo.pieralisi@xxxxxxx> > CC: xen-devel@xxxxxxxxxxxxxxxxxxxx > CC: linux-parisc@xxxxxxxxxxxxxxx > CC: sparclinux@xxxxxxxxxxxxxxx > CC: linuxppc-dev@xxxxxxxxxxxxxxxx > CC: linux-arm-kernel@xxxxxxxxxxxxxxxxxxx > CC: x86@xxxxxxxxxx > CC: linux-kernel@xxxxxxxxxxxxxxx > --- > include/linux/cpu.h | 2 ++ > kernel/cpu.c | 24 ++++++++++++++++++++++++ > 2 files changed, 26 insertions(+) > > diff --git a/include/linux/cpu.h b/include/linux/cpu.h > index 1ca2baf817ed..cf8cf38dca43 100644 > --- a/include/linux/cpu.h > +++ b/include/linux/cpu.h > @@ -89,6 +89,7 @@ extern ssize_t arch_cpu_release(const char *, size_t); > #ifdef CONFIG_SMP > extern bool cpuhp_tasks_frozen; > int cpu_up(unsigned int cpu); > +int add_cpu(unsigned int cpu); > void notify_cpu_starting(unsigned int cpu); > extern void cpu_maps_update_begin(void); > extern void cpu_maps_update_done(void); > @@ -118,6 +119,7 @@ extern void cpu_hotplug_disable(void); > extern void cpu_hotplug_enable(void); > void clear_tasks_mm_cpumask(int cpu); > int cpu_down(unsigned int cpu); > +int remove_cpu(unsigned int cpu); > > #else /* CONFIG_HOTPLUG_CPU */ > > diff --git a/kernel/cpu.c b/kernel/cpu.c > index 9c706af713fb..069802f7010f 100644 > --- a/kernel/cpu.c > +++ b/kernel/cpu.c > @@ -1057,6 +1057,18 @@ int cpu_down(unsigned int cpu) > } > EXPORT_SYMBOL(cpu_down); > > +int remove_cpu(unsigned int cpu) > +{ > + int ret; > + > + lock_device_hotplug(); > + ret = device_offline(get_cpu_device(cpu)); > + unlock_device_hotplug(); > + > + return ret; > +} > +EXPORT_SYMBOL_GPL(remove_cpu); > + > #else > #define takedown_cpu NULL > #endif /*CONFIG_HOTPLUG_CPU*/ > @@ -1209,6 +1221,18 @@ int cpu_up(unsigned int cpu) > } > EXPORT_SYMBOL_GPL(cpu_up); > > +int add_cpu(unsigned int cpu) > +{ > + int ret; > + > + lock_device_hotplug(); > + ret = device_online(get_cpu_device(cpu)); > + unlock_device_hotplug(); > + > + return ret; > +} > +EXPORT_SYMBOL_GPL(add_cpu); > + > #ifdef CONFIG_PM_SLEEP_SMP > static cpumask_var_t frozen_cpus; > > -- > 2.17.1 >