Skip to content

Commit

Permalink
cpu/hotplug: Add new {add,remove}_cpu() functions
Browse files Browse the repository at this point in the history
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" <[email protected]>
Signed-off-by: Qais Yousef <[email protected]>
Signed-off-by: Thomas Gleixner <[email protected]>
Reviewed-by: Paul E. McKenney <[email protected]>
Link: https://lkml.kernel.org/r/[email protected]
  • Loading branch information
Qais Yousef authored and KAGA-KOKO committed Mar 25, 2020
1 parent fd3eafd commit 93ef142
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 0 deletions.
2 changes: 2 additions & 0 deletions include/linux/cpu.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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 */

Expand Down
24 changes: 24 additions & 0 deletions kernel/cpu.c
Original file line number Diff line number Diff line change
Expand Up @@ -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*/
Expand Down Expand Up @@ -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;

Expand Down

0 comments on commit 93ef142

Please sign in to comment.