]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
perf/x86/intel: Avoid disable PMU if !cpuc->enabled in sample read
authorKan Liang <kan.liang@linux.intel.com>
Tue, 21 Jan 2025 15:23:01 +0000 (07:23 -0800)
committerPeter Zijlstra <peterz@infradead.org>
Wed, 5 Feb 2025 09:29:45 +0000 (10:29 +0100)
commitf9bdf1f953392c9edd69a7f884f78c0390127029
tree8f8bd4f7485c22882c04d5a3d122da668f46a039
parent314dfe10576912e1d786b13c5d4eee8c51b63caa
perf/x86/intel: Avoid disable PMU if !cpuc->enabled in sample read

The WARN_ON(this_cpu_read(cpu_hw_events.enabled)) in the
intel_pmu_save_and_restart_reload() is triggered, when sampling read
topdown events.

In a NMI handler, the cpu_hw_events.enabled is set and used to indicate
the status of core PMU. The generic pmu->pmu_disable_count, updated in
the perf_pmu_disable/enable pair, is not touched.
However, the perf_pmu_disable/enable pair is invoked when sampling read
in a NMI handler. The cpuc->enabled is mistakenly set by the
perf_pmu_enable().

Avoid disabling PMU if the core PMU is already disabled.
Merge the logic together.

Fixes: 7b2c05a15d29 ("perf/x86/intel: Generic support for hardware TopDown metrics")
Suggested-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Kan Liang <kan.liang@linux.intel.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Cc: stable@vger.kernel.org
Link: https://lkml.kernel.org/r/20250121152303.3128733-2-kan.liang@linux.intel.com
arch/x86/events/intel/core.c
arch/x86/events/intel/ds.c
arch/x86/events/perf_event.h