[Patch v3 0/4] perf/x86/intel: Fix bugs of auto counter reload sampling

Dapeng Mi
2026-04-27T09:00:12Z

Changes:
v2 -> v3:
- Fix the issue that user-space ACR-mask is not properly validated.
(Sashiko, patch 1/4)

v1 -> v2:
- Clear stale mask for all events (Sashiko, Patch 1/4)
- Enable auto counter reload for DMR. (Patch 3/4)
- Remove duplicated CFG_C MSR value tracking. (Patch 4/4)

This small patch-set fixes several issues in auto counter reload support.
- The stale ACR mask is not properly validated before setting a new one.
Patch 1/4 fixes this issue.
- PMI is enabled by default for self-reloaded ACR events which causes
suspicious NMI warning. Patch 2/4 fixes this issue.
- ACR sampling is not really enabled on DMR. Patch 3/4 fixes the issue.
- Two variables are used to trace CFG_C MSR value independently for ACR
and arch-PEBS. It's error-prone and fragile. Patch 4/4 fixes this
issue.

Besides an ACR unit test is added into perf tests which would be posted
in a separate session.

Tests:

Run below ACR sampling commands on CWF, DMR, PTL and NVL (hybrid
platforms), no issues are found.

1. Non-PEBS ACR sampling
perf record -e '{instructions/period=20000,acr_mask=0x2/u,cycles/period=40000,acr_mask=0x3/u}' ~/test

2. PEBS ACR sampling

perf record -e '{instructions/period=20000,acr_mask=0x2/pu,cycles/period=40000,acr_mask=0x3/u}' ~/test

3. Perf-tools ACR sampling test

The patch (https://lore.kernel.org/all/20260420024528.2130065-1-dapeng1.mi@linux.intel.com/)
adds ACR sampling test case in perf tools record test.

perf test 148

History:
v1: https://lore.kernel.org/all/20260413010157.535990-1-dapeng1.mi@linux.intel.com/
v2: https://lore.kernel.org/all/20260420024528.2130065-1-dapeng1.mi@linux.intel.com/

Dapeng Mi (4):
perf/x86/intel: Improve validation and configuration of ACR masks
perf/x86/intel: Disable PMI for self-reloaded ACR events
perf/x86/intel: Enable auto counter reload for DMR
perf/x86/intel: Consolidate MSR_IA32_PERF_CFG_C tracking

arch/x86/events/intel/core.c | 63 ++++++++++++++++++++++++++----------
arch/x86/events/perf_event.h | 14 ++++++--
2 files changed, 57 insertions(+), 20 deletions(-)

--
2.34.1