mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-16 22:10:24 +00:00
[SPARC]: Setup cpu_possible_map
Setup cpu_possible_map so the secondary cpus will get started. Signed-off-by: Bob Breuer <breuerr@mc.net> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
a8cbdcea34
commit
7202fb496a
@ -349,6 +349,8 @@ void __init setup_arch(char **cmdline_p)
|
||||
init_mm.context = (unsigned long) NO_CONTEXT;
|
||||
init_task.thread.kregs = &fake_swapper_regs;
|
||||
|
||||
smp_setup_cpu_possible_map();
|
||||
|
||||
paging_init();
|
||||
}
|
||||
|
||||
|
@ -267,22 +267,18 @@ int setup_profiling_timer(unsigned int multiplier)
|
||||
void __init smp_prepare_cpus(unsigned int max_cpus)
|
||||
{
|
||||
extern void smp4m_boot_cpus(void);
|
||||
int i, cpuid, ncpus, extra;
|
||||
int i, cpuid, extra;
|
||||
|
||||
BUG_ON(sparc_cpu_model != sun4m);
|
||||
printk("Entering SMP Mode...\n");
|
||||
|
||||
ncpus = 1;
|
||||
extra = 0;
|
||||
for (i = 0; !cpu_find_by_instance(i, NULL, &cpuid); i++) {
|
||||
if (cpuid == boot_cpu_id)
|
||||
continue;
|
||||
if (cpuid < NR_CPUS && ncpus++ < max_cpus)
|
||||
cpu_set(cpuid, phys_cpu_present_map);
|
||||
else
|
||||
if (cpuid >= NR_CPUS)
|
||||
extra++;
|
||||
}
|
||||
if (max_cpus >= NR_CPUS && extra)
|
||||
/* i = number of cpus */
|
||||
if (extra && max_cpus > i - extra)
|
||||
printk("Warning: NR_CPUS is too low to start all cpus\n");
|
||||
|
||||
smp_store_cpu_info(boot_cpu_id);
|
||||
@ -290,6 +286,24 @@ void __init smp_prepare_cpus(unsigned int max_cpus)
|
||||
smp4m_boot_cpus();
|
||||
}
|
||||
|
||||
/* Set this up early so that things like the scheduler can init
|
||||
* properly. We use the same cpu mask for both the present and
|
||||
* possible cpu map.
|
||||
*/
|
||||
void __init smp_setup_cpu_possible_map(void)
|
||||
{
|
||||
int instance, mid;
|
||||
|
||||
instance = 0;
|
||||
while (!cpu_find_by_instance(instance, NULL, &mid)) {
|
||||
if (mid < NR_CPUS) {
|
||||
cpu_set(mid, phys_cpu_present_map);
|
||||
cpu_set(mid, cpu_present_map);
|
||||
}
|
||||
instance++;
|
||||
}
|
||||
}
|
||||
|
||||
void __devinit smp_prepare_boot_cpu(void)
|
||||
{
|
||||
int cpuid = hard_smp_processor_id();
|
||||
|
@ -146,6 +146,8 @@ static inline int hard_smp_processor_id(void)
|
||||
#define prof_multiplier(__cpu) cpu_data(__cpu).multiplier
|
||||
#define prof_counter(__cpu) cpu_data(__cpu).counter
|
||||
|
||||
void smp_setup_cpu_possible_map(void);
|
||||
|
||||
#endif /* !(__ASSEMBLY__) */
|
||||
|
||||
/* Sparc specific messages. */
|
||||
@ -162,7 +164,11 @@ static inline int hard_smp_processor_id(void)
|
||||
#define MBOX_IDLECPU2 0xFD
|
||||
#define MBOX_STOPCPU2 0xFE
|
||||
|
||||
#endif /* SMP */
|
||||
#else /* SMP */
|
||||
|
||||
#define smp_setup_cpu_possible_map() do { } while (0)
|
||||
|
||||
#endif /* !(SMP) */
|
||||
|
||||
#define NO_PROC_ID 0xFF
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user