Added lock in event reader function. The cqm_pick_event_reader() function
accesses cqm_cpumask and it is critical section between this and
cqm_stable().

This situation is true when a CPU is hotplugged. Mutex is used to protect
the critical section.

Signed-off-by: Kanaka Juvva <[email protected]>
---
 arch/x86/kernel/cpu/perf_event_intel_cqm.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/arch/x86/kernel/cpu/perf_event_intel_cqm.c 
b/arch/x86/kernel/cpu/perf_event_intel_cqm.c
index 1880761..e17e37f 100644
--- a/arch/x86/kernel/cpu/perf_event_intel_cqm.c
+++ b/arch/x86/kernel/cpu/perf_event_intel_cqm.c
@@ -1239,12 +1239,15 @@ static inline void cqm_pick_event_reader(int cpu)
        int phys_id = topology_physical_package_id(cpu);
        int i;
 
+       mutex_lock(&cache_mutex);
        for_each_cpu(i, &cqm_cpumask) {
                if (phys_id == topology_physical_package_id(i))
-                       return; /* already got reader for this socket */
+                       goto out; /* already got reader for this socket */
        }
 
        cpumask_set_cpu(cpu, &cqm_cpumask);
+out:
+       mutex_unlock(&cache_mutex);
 }
 
 static void intel_cqm_cpu_prepare(unsigned int cpu)
-- 
2.1.0

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to