Re: [Patch v2 3/9] perf/x86: Update cap_user_rdpmc base on rdpmc user disable state
From: Peter Zijlstra
Date: Tue Jun 09 2026 - 12:20:43 EST
On Tue, Jun 09, 2026 at 01:02:16PM +0800, Dapeng Mi wrote:
> diff --git a/arch/x86/events/core.c b/arch/x86/events/core.c
> index 3bd0522afe6d..6cd95b8e31cb 100644
> --- a/arch/x86/events/core.c
> +++ b/arch/x86/events/core.c
> @@ -2797,6 +2797,9 @@ void arch_perf_update_userpage(struct perf_event *event,
> userpg->cap_user_time_zero = 0;
> userpg->cap_user_rdpmc =
> !!(event->hw.flags & PERF_EVENT_FLAG_USER_READ_CNT);
> + if (x86_pmu_has_rdpmc_user_disable(event->pmu) &&
> + event->hw.config & ARCH_PERFMON_EVENTSEL_RDPMC_USER_DISABLE)
> + userpg->cap_user_rdpmc = 0;
> userpg->pmc_width = x86_pmu.cntval_bits;
>
> if (!using_native_sched_clock() || !sched_clock_stable())
Remember, this is evaluated very very often. So it makes more sense to
ensure the hw.flags state is correct such that this remains a simple
expression.