openwrt/target/linux/generic/pending-4.4/091-MIPS-c-r4k-Exclude-sibling-CPUs-in-SMP-calls.patch

38 lines
1.2 KiB
Diff
Raw Normal View History

From: James Hogan <james.hogan@imgtec.com>
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 <james.hogan@imgtec.com>
Cc: Ralf Baechle <ralf@linux-mips.org>
Cc: Paul Burton <paul.burton@imgtec.com>
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();
}