From: James Hogan Date: Thu, 3 Mar 2016 21:30:42 +0000 Subject: [PATCH] MIPS: c-r4k: Exclude sibling CPUs in SMP calls When performing SMP calls to foreign cores, exclude sibling CPUs from the provided map, as we already handle the local core on the current CPU. This prevents an IPI call from for example core 0, VPE 1 to VPE 0 on the same core. Signed-off-by: James Hogan Cc: Ralf Baechle Cc: Paul Burton Cc: linux-mips@linux-mips.org --- --- a/arch/mips/mm/c-r4k.c +++ b/arch/mips/mm/c-r4k.c @@ -96,8 +96,17 @@ static inline void r4k_on_each_cpu(unsig void (*func) (void *info), void *info) { preempt_disable(); - if (r4k_op_needs_ipi(type)) - smp_call_function_many(&cpu_foreign_map, func, info, 1); + /* cpu_foreign_map and cpu_sibling_map[] undeclared when !CONFIG_SMP */ +#ifdef CONFIG_SMP + if (r4k_op_needs_ipi(type)) { + struct cpumask mask; + + /* exclude sibling CPUs */ + cpumask_andnot(&mask, &cpu_foreign_map, + &cpu_sibling_map[smp_processor_id()]); + smp_call_function_many(&mask, func, info, 1); + } +#endif func(info); preempt_enable(); }