Commit b99a2659 authored by Qais Yousef's avatar Qais Yousef Committed by Thomas Gleixner

cpu/hotplug: Move bringup of secondary CPUs out of smp_init()

This is the last direct user of cpu_up() before it can become an internal
implementation detail of the cpu subsystem.
Signed-off-by: default avatarQais Yousef <qais.yousef@arm.com>
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
Link: https://lkml.kernel.org/r/20200323135110.30522-17-qais.yousef@arm.com
parent 457bc8ed
...@@ -94,6 +94,7 @@ void notify_cpu_starting(unsigned int cpu); ...@@ -94,6 +94,7 @@ void notify_cpu_starting(unsigned int cpu);
extern void cpu_maps_update_begin(void); extern void cpu_maps_update_begin(void);
extern void cpu_maps_update_done(void); extern void cpu_maps_update_done(void);
int bringup_hibernate_cpu(unsigned int sleep_cpu); int bringup_hibernate_cpu(unsigned int sleep_cpu);
void bringup_nonboot_cpus(unsigned int setup_max_cpus);
#else /* CONFIG_SMP */ #else /* CONFIG_SMP */
#define cpuhp_tasks_frozen 0 #define cpuhp_tasks_frozen 0
......
...@@ -1298,6 +1298,18 @@ int bringup_hibernate_cpu(unsigned int sleep_cpu) ...@@ -1298,6 +1298,18 @@ int bringup_hibernate_cpu(unsigned int sleep_cpu)
return 0; return 0;
} }
void bringup_nonboot_cpus(unsigned int setup_max_cpus)
{
unsigned int cpu;
for_each_present_cpu(cpu) {
if (num_online_cpus() >= setup_max_cpus)
break;
if (!cpu_online(cpu))
cpu_up(cpu);
}
}
#ifdef CONFIG_PM_SLEEP_SMP #ifdef CONFIG_PM_SLEEP_SMP
static cpumask_var_t frozen_cpus; static cpumask_var_t frozen_cpus;
......
...@@ -597,20 +597,13 @@ void __init setup_nr_cpu_ids(void) ...@@ -597,20 +597,13 @@ void __init setup_nr_cpu_ids(void)
void __init smp_init(void) void __init smp_init(void)
{ {
int num_nodes, num_cpus; int num_nodes, num_cpus;
unsigned int cpu;
idle_threads_init(); idle_threads_init();
cpuhp_threads_init(); cpuhp_threads_init();
pr_info("Bringing up secondary CPUs ...\n"); pr_info("Bringing up secondary CPUs ...\n");
/* FIXME: This should be done in userspace --RR */ bringup_nonboot_cpus(setup_max_cpus);
for_each_present_cpu(cpu) {
if (num_online_cpus() >= setup_max_cpus)
break;
if (!cpu_online(cpu))
cpu_up(cpu);
}
num_nodes = num_online_nodes(); num_nodes = num_online_nodes();
num_cpus = num_online_cpus(); num_cpus = num_online_cpus();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment