[MIPS] SMP: Fix initialization order bug.
A recent change requires cpu_possible_map to be initialized before smp_sched_init() but most MIPS platforms were initializing their processors in the prom_prepare_cpus callback of smp_prepare_cpus. The simple fix of calling prom_prepare_cpus from one of the earlier SMP initialization hooks doesn't work well either since IPIs may require init_IRQ() to have completed, so bit the bullet and split prom_prepare_cpus into two initialization functions, plat_smp_setup which is called early from setup_arch and plat_prepare_cpus called where prom_prepare_cpus used to be called. Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
This commit is contained in:
@@ -58,7 +58,9 @@ static inline int num_booting_cpus(void)
|
||||
return cpus_weight(cpu_callout_map);
|
||||
}
|
||||
|
||||
/* These are defined by the board-specific code. */
|
||||
/*
|
||||
* These are defined by the board-specific code.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Cause the function described by call_data to be executed on the passed
|
||||
@@ -79,7 +81,12 @@ extern void prom_boot_secondary(int cpu, struct task_struct *idle);
|
||||
extern void prom_init_secondary(void);
|
||||
|
||||
/*
|
||||
* Detect available CPUs, populate phys_cpu_present_map before smp_init
|
||||
* Populate cpu_possible_map before smp_init, called from setup_arch.
|
||||
*/
|
||||
extern void plat_smp_setup(void);
|
||||
|
||||
/*
|
||||
* Called after init_IRQ but before __cpu_up.
|
||||
*/
|
||||
extern void prom_prepare_cpus(unsigned int max_cpus);
|
||||
|
||||
|
Reference in New Issue
Block a user