diff options
Diffstat (limited to 'arch/mips/kernel')
-rw-r--r-- | arch/mips/kernel/smp-cps.c | 8 | ||||
-rw-r--r-- | arch/mips/kernel/smp.c | 12 |
2 files changed, 9 insertions, 11 deletions
diff --git a/arch/mips/kernel/smp-cps.c b/arch/mips/kernel/smp-cps.c index 699459ed293b..8cc508809466 100644 --- a/arch/mips/kernel/smp-cps.c +++ b/arch/mips/kernel/smp-cps.c @@ -147,7 +147,7 @@ static void __init cps_prepare_cpus(unsigned int max_cpus) cpu_has_dc_aliases ? "dcache aliasing" : ""); for_each_present_cpu(c) { - if (cpu_core(&cpu_data[c])) + if (!cpus_are_siblings(smp_processor_id(), c)) set_cpu_present(c, false); } } @@ -319,10 +319,10 @@ static void cps_boot_secondary(int cpu, struct task_struct *idle) mips_cm_unlock_other(); } - if (core != cpu_core(¤t_cpu_data)) { + if (!cpus_are_siblings(cpu, smp_processor_id())) { /* Boot a VPE on another powered up core */ for (remote = 0; remote < NR_CPUS; remote++) { - if (cpu_core(&cpu_data[remote]) != core) + if (!cpus_are_siblings(cpu, remote)) continue; if (cpu_online(remote)) break; @@ -431,7 +431,7 @@ void play_dead(void) /* Look for another online VPE within the core */ for_each_online_cpu(cpu_death_sibling) { - if (cpu_core(&cpu_data[cpu_death_sibling]) != core) + if (!cpus_are_siblings(cpu, cpu_death_sibling)) continue; /* diff --git a/arch/mips/kernel/smp.c b/arch/mips/kernel/smp.c index a54e5857c227..4cc43892b959 100644 --- a/arch/mips/kernel/smp.c +++ b/arch/mips/kernel/smp.c @@ -96,8 +96,7 @@ static inline void set_cpu_sibling_map(int cpu) if (smp_num_siblings > 1) { for_each_cpu(i, &cpu_sibling_setup_map) { - if (cpu_data[cpu].package == cpu_data[i].package && - cpu_core(&cpu_data[cpu]) == cpu_core(&cpu_data[i])) { + if (cpus_are_siblings(cpu, i)) { cpumask_set_cpu(i, &cpu_sibling_map[cpu]); cpumask_set_cpu(cpu, &cpu_sibling_map[i]); } @@ -134,8 +133,7 @@ void calculate_cpu_foreign_map(void) for_each_online_cpu(i) { core_present = 0; for_each_cpu(k, &temp_foreign_map) - if (cpu_data[i].package == cpu_data[k].package && - cpu_core(&cpu_data[i]) == cpu_core(&cpu_data[k])) + if (cpus_are_siblings(i, k)) core_present = 1; if (!core_present) cpumask_set_cpu(i, &temp_foreign_map); @@ -186,11 +184,11 @@ void mips_smp_send_ipi_mask(const struct cpumask *mask, unsigned int action) if (mips_cpc_present()) { for_each_cpu(cpu, mask) { - core = cpu_core(&cpu_data[cpu]); - - if (core == cpu_core(¤t_cpu_data)) + if (cpus_are_siblings(cpu, smp_processor_id())) continue; + core = cpu_core(&cpu_data[cpu]); + while (!cpumask_test_cpu(cpu, &cpu_coherent_mask)) { mips_cm_lock_other(core, 0); mips_cpc_lock_other(core); |