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: Qais Yousef <qais.yousef@arm.com> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Link: https://lkml.kernel.org/r/20200323135110.30522-17-qais.yousef@arm.com
This commit is contained in:
parent
457bc8ed3e
commit
b99a26593b
|
@ -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
|
||||||
|
|
12
kernel/cpu.c
12
kernel/cpu.c
|
@ -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)
|
||||||
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();
|
||||||
|
|
Loading…
Reference in New Issue