public inbox for kvm@vger.kernel.org
 help / color / mirror / Atom feed
From: Xiaoyao Li <xiaoyao.li@intel.com>
To: Sean Christopherson <seanjc@google.com>
Cc: Peter Zijlstra <peterz@infradead.org>,
	Arnaldo Carvalho de Melo <acme@kernel.org>,
	Mark Rutland <mark.rutland@arm.com>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Jiri Olsa <jolsa@kernel.org>, Namhyung Kim <namhyung@kernel.org>,
	Paolo Bonzini <pbonzini@redhat.com>,
	linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org,
	kvm@vger.kernel.org
Subject: Re: [RFC PATCH 2/2] KVM: VMX: Stop/resume host PT before/after VM entry when PT_MODE_HOST_GUEST
Date: Fri, 26 Aug 2022 14:32:10 +0800	[thread overview]
Message-ID: <4e383b85-6777-4452-a073-4d2f439e28b1@intel.com> (raw)
In-Reply-To: <YwecducnM/U6tqJT@google.com>

On 8/25/2022 11:59 PM, Sean Christopherson wrote:
> On Thu, Aug 25, 2022, Xiaoyao Li wrote:
>> On 8/25/2022 11:34 PM, Sean Christopherson wrote:
>>> On Thu, Aug 25, 2022, Xiaoyao Li wrote:
>>>> diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c
>>>> index d7f8331d6f7e..3e9ce8f600d2 100644
>>>> --- a/arch/x86/kvm/vmx/vmx.c
>>>> +++ b/arch/x86/kvm/vmx/vmx.c
>>>> @@ -38,6 +38,7 @@
>>>>    #include <asm/fpu/api.h>
>>>>    #include <asm/fpu/xstate.h>
>>>>    #include <asm/idtentry.h>
>>>> +#include <asm/intel_pt.h>
>>>>    #include <asm/io.h>
>>>>    #include <asm/irq_remapping.h>
>>>>    #include <asm/kexec.h>
>>>> @@ -1128,13 +1129,19 @@ static void pt_guest_enter(struct vcpu_vmx *vmx)
>>>>    	if (vmx_pt_mode_is_system())
>>>>    		return;
>>>> +	/*
>>>> +	 * Stop Intel PT on host to avoid vm-entry failure since
>>>> +	 * VM_ENTRY_LOAD_IA32_RTIT_CTL is set
>>>> +	 */
>>>> +	intel_pt_stop();
>>>> +
>>>>    	/*
>>>>    	 * GUEST_IA32_RTIT_CTL is already set in the VMCS.
>>>>    	 * Save host state before VM entry.
>>>>    	 */
>>>>    	rdmsrl(MSR_IA32_RTIT_CTL, vmx->pt_desc.host.ctl);
>>>
>>> KVM's manual save/restore of MSR_IA32_RTIT_CTL should be dropped.
>>
>> No. It cannot. Please see below.
>>
>>> If PT/RTIT can
>>> trace post-VMXON, then intel_pt_stop() will disable tracing and intel_pt_resume()
>>> will restore the host's desired value.
>>
>> intel_pt_stop() and intel_pt_resume() touches host's RTIT_CTL only when host
>> enables/uses Intel PT. Otherwise, they're just noop. In this case, we cannot
>> assume host's RTIT_CTL is zero (only the RTIT_CTL.TraceEn is 0). After
>> VM-exit, RTIT_CTL is cleared, we need to restore it.
> 
> But ensuring the RTIT_CTL.TraceEn=0 is all that's needed to make VM-Entry happy,
> and if the host isn't using Intel PT, what do we care if other bits that, for all
> intents and purposes are ignored, are lost across VM-Entry/VM-Exit?  I gotta
> imaging the perf will fully initialize RTIT_CTL if it starts using PT.

Personally, I agree with it.

But I'm not sure if there is a criteria that host context needs to be 
unchanged after being virtualized.

> Actually, if the host isn't actively using Intel PT, can KVM avoid saving the
> other RTIT MSRs?

I don't think it's a good idea that it requires PT driver never and 
won't rely on the previous value of PT MSRs. But it's OK if handing it 
over to perf as the idea you gave below.

> Even better, can we hand that off to perf?  I really dislike KVM making assumptions
> about perf's internal behavior.  E.g. can this be made to look like

you mean let perf subsystem to do the context save/restore staff of host 
and KVM focuses on save/restore of guest context, right?

I would like to see comment from perf folks on this and maybe need their 
help on how to implement.

> 	intel_pt_guest_enter(vmx->pt_desc.guest.ctl & RTIT_CTL_TRACEEN);
> 
> and
> 
> 	intel_pt_guest_exit(vmx->pt_desc.guest.ctl & RTIT_CTL_TRACEEN);
> 

  reply	other threads:[~2022-08-26  6:32 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-25  8:56 [RFC PATCH 0/2] KVM: VMX: Fix VM entry failure on PT_MODE_HOST_GUEST while host is using PT Xiaoyao Li
2022-08-25  8:56 ` [RFC PATCH 1/2] perf/x86/intel/pt: Introduce intel_pt_{stop,resume}() Xiaoyao Li
2022-08-25 15:23   ` Sean Christopherson
2022-08-25  8:56 ` [RFC PATCH 2/2] KVM: VMX: Stop/resume host PT before/after VM entry when PT_MODE_HOST_GUEST Xiaoyao Li
2022-08-25 15:34   ` Sean Christopherson
2022-08-25 15:45     ` Xiaoyao Li
2022-08-25 15:59       ` Sean Christopherson
2022-08-26  6:32         ` Xiaoyao Li [this message]
2022-08-26 15:08           ` Sean Christopherson
2022-08-29  7:49 ` [RFC PATCH 0/2] KVM: VMX: Fix VM entry failure on PT_MODE_HOST_GUEST while host is using PT Wang, Wei W
2022-08-29 17:33   ` Sean Christopherson
2022-08-30  6:02     ` Wang, Wei W
2022-09-08  7:25   ` Xiaoyao Li
2022-09-08  8:53     ` Wang, Wei W
2022-09-14  4:15   ` Xiaoyao Li
2022-09-14  6:16     ` Wang, Wei W
2022-09-14 20:25       ` Liang, Kan
2022-09-15  2:46         ` Wang, Wei W
2022-09-15 13:54           ` Liang, Kan
2022-09-15 14:39             ` Wang, Wei W
2022-09-15 15:42               ` Liang, Kan
2022-09-16  2:30                 ` Wang, Wei W
2022-09-16 13:27                   ` Liang, Kan
2022-09-19 13:46                     ` Wang, Wei W
2022-09-19 14:41                       ` Liang, Kan
2022-09-19 15:22                         ` Wang, Wei W
2022-09-19 15:55                           ` Liang, Kan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4e383b85-6777-4452-a073-4d2f439e28b1@intel.com \
    --to=xiaoyao.li@intel.com \
    --cc=acme@kernel.org \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=jolsa@kernel.org \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-perf-users@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=namhyung@kernel.org \
    --cc=pbonzini@redhat.com \
    --cc=peterz@infradead.org \
    --cc=seanjc@google.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox