Re: [PATCH 2/6] perf/x86/intel/pt: Stop tracing if VMXON has not yet happened
From: Peter Zijlstra
Date: Mon Nov 02 2026 - 04:59:20 EST
On Mon, Nov 02, 2026 at 09:40:35AM +0200, Adrian Hunter wrote:
> arch/x86/events/intel/pt.c | 16 +++++++++++++++-
> 1 file changed, 15 insertions(+), 1 deletion(-)
>
> diff --git a/arch/x86/events/intel/pt.c b/arch/x86/events/intel/pt.c
> index 49349afee611..36bf039668d7 100644
> --- a/arch/x86/events/intel/pt.c
> +++ b/arch/x86/events/intel/pt.c
> @@ -567,6 +567,15 @@ static void pt_config(struct perf_event *event)
> pt_config_enable(event);
> }
>
> +static bool pt_trace_enabled(void)
> +{
> + u64 ctl;
> +
> + rdmsrq(MSR_IA32_RTIT_CTL, ctl);
> +
> + return ctl & RTIT_CTL_TRACEEN;
> +}
> +
> static void pt_config_stop(struct perf_event *event)
> {
> struct pt *pt = this_cpu_ptr(&pt_ctx);
> @@ -577,7 +586,12 @@ static void pt_config_stop(struct perf_event *event)
> return;
>
> ctl &= ~RTIT_CTL_TRACEEN;
> - if (!READ_ONCE(pt->vmx_on))
> + /*
> + * vmx_on is set before VMXON, so tracing may not have stopped yet.
> + * RTIT_CTL can be written until VMXON, and after VMXON TraceEn is
> + * clear, so still write RTIT_CTL if TraceEn is set.
> + */
> + if (!READ_ONCE(pt->vmx_on) || pt_trace_enabled())
> wrmsrq(MSR_IA32_RTIT_CTL, ctl);
>
> WRITE_ONCE(event->hw.aux_config, ctl);
It seems rather unfortunate to issue a RDMSR for state we fully control.
Surely we can track this?