All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sean Christopherson <seanjc@google.com>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: Lai Jiangshan <jiangshanlai@gmail.com>,
	linux-kernel@vger.kernel.org, kvm@vger.kernel.org,
	Lai Jiangshan <laijs@linux.alibaba.com>,
	Vitaly Kuznetsov <vkuznets@redhat.com>,
	Wanpeng Li <wanpengli@tencent.com>,
	Jim Mattson <jmattson@google.com>, Joerg Roedel <joro@8bytes.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>,
	Dave Hansen <dave.hansen@linux.intel.com>,
	x86@kernel.org, "H. Peter Anvin" <hpa@zytor.com>
Subject: Re: [PATCH 05/15] KVM: VMX: Add document to state that write to uret msr should always be intercepted
Date: Tue, 7 Dec 2021 20:38:07 +0000	[thread overview]
Message-ID: <Ya/GL0zyobfM1rUF@google.com> (raw)
In-Reply-To: <226fc242-ae46-3214-4e01-dbfdf5f7c0fb@redhat.com>

On Thu, Nov 18, 2021, Paolo Bonzini wrote:
> On 11/18/21 12:08, Lai Jiangshan wrote:
> > From: Lai Jiangshan <laijs@linux.alibaba.com>
> > 
> > And adds a corresponding sanity check code.
> > 
> > Signed-off-by: Lai Jiangshan <laijs@linux.alibaba.com>
> > ---
> >   arch/x86/kvm/vmx/vmx.c | 10 +++++++++-
> >   1 file changed, 9 insertions(+), 1 deletion(-)
> > 
> > diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c
> > index e8a41fdc3c4d..cd081219b668 100644
> > --- a/arch/x86/kvm/vmx/vmx.c
> > +++ b/arch/x86/kvm/vmx/vmx.c
> > @@ -3703,13 +3703,21 @@ void vmx_disable_intercept_for_msr(struct kvm_vcpu *vcpu, u32 msr, int type)
> >   	if (!cpu_has_vmx_msr_bitmap())
> >   		return;
> > +	/*
> > +	 * Write to uret msr should always be intercepted due to the mechanism
> > +	 * must know the current value.  Santity check to avoid any inadvertent
> > +	 * mistake in coding.
> > +	 */
> > +	if (WARN_ON_ONCE(vmx_find_uret_msr(vmx, msr) && (type & MSR_TYPE_W)))
> > +		return;
> > +
> 
> I'm not sure about this one, it's relatively expensive to call
> vmx_find_uret_msr.
> 
> User-return MSRs and disable-intercept MSRs are almost the opposite: uret is
> for MSRs that the host (not even the processor) never uses,
> disable-intercept is for MSRs that the guest reads/writes often.  As such it
> seems almost impossible that they overlap.

And they aren't fundamentally mutually exclusive, e.g. KVM could pass-through an
MSR and then do RDMSR in vmx_prepare_switch_to_host() to refresh the uret data
with the current (guest) value.  It'd be silly, but it would work.

  reply	other threads:[~2021-12-07 20:38 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-11-18 11:07 [PATCH 00/15] KVM: X86: Miscellaneous cleanups Lai Jiangshan
2021-11-18 11:08 ` [PATCH 01/15] KVM: VMX: Use x86 core API to access to fs_base and inactive gs_base Lai Jiangshan
2021-11-18 16:05   ` Paolo Bonzini
2021-11-21 15:17   ` Thomas Gleixner
2021-11-22  3:27     ` Lai Jiangshan
2021-11-18 11:08 ` [PATCH 02/15] KVM: VMX: Avoid to rdmsrl(MSR_IA32_SYSENTER_ESP) Lai Jiangshan
2021-11-18 11:18   ` Paolo Bonzini
2021-11-18 14:17     ` Lai Jiangshan
2021-11-18 14:38       ` Paolo Bonzini
2021-11-18 11:08 ` [PATCH 03/15] KVM: VMX: Update msr value after kvm_set_user_return_msr() succeeds Lai Jiangshan
2021-11-18 11:08 ` [PATCH 04/15] KVM: VMX: Save HOST_CR3 in vmx_prepare_switch_to_guest() Lai Jiangshan
2021-11-18 11:08 ` [PATCH 05/15] KVM: VMX: Add document to state that write to uret msr should always be intercepted Lai Jiangshan
2021-11-18 16:05   ` Paolo Bonzini
2021-12-07 20:38     ` Sean Christopherson [this message]
2021-11-18 11:08 ` [PATCH 06/15] KVM: VMX: Use kvm_set_msr_common() for MSR_IA32_TSC_ADJUST in the default way Lai Jiangshan
2021-11-18 11:08 ` [PATCH 07/15] KVM: VMX: Change comments about vmx_get_msr() Lai Jiangshan
2021-11-18 11:08 ` [PATCH 08/15] KVM: SVM: Rename get_max_npt_level() to get_npt_level() Lai Jiangshan
2021-11-18 11:08 ` [PATCH 09/15] KVM: SVM: Allocate sd->save_area with __GFP_ZERO Lai Jiangshan
2021-11-18 11:08 ` [PATCH 10/15] KVM: X86: Skip allocating pae_root for vcpu->arch.guest_mmu when !tdp_enabled Lai Jiangshan
2021-11-18 11:08 ` [PATCH 11/15] KVM: X86: Fix comment in __kvm_mmu_create() Lai Jiangshan
2021-11-18 11:08 ` [PATCH 12/15] KVM: X86: Remove unused declaration of __kvm_mmu_free_some_pages() Lai Jiangshan
2021-11-18 11:08 ` [PATCH 13/15] KVM: X86: Remove useless code to set role.gpte_is_8_bytes when role.direct Lai Jiangshan
2021-11-18 11:08 ` [PATCH 14/15] KVM: X86: Calculate quadrant when !role.gpte_is_8_bytes Lai Jiangshan
2021-11-18 11:08 ` [PATCH 15/15] KVM: X86: Always set gpte_is_8_bytes when direct map Lai Jiangshan
2021-11-18 11:12   ` Paolo Bonzini
2021-11-18 14:34     ` Lai Jiangshan
2021-11-18 15:01       ` Paolo Bonzini
2021-11-19 10:30         ` Lai Jiangshan
2021-11-19 10:34           ` Paolo Bonzini
2021-11-19 10:42             ` Lai Jiangshan

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=Ya/GL0zyobfM1rUF@google.com \
    --to=seanjc@google.com \
    --cc=bp@alien8.de \
    --cc=dave.hansen@linux.intel.com \
    --cc=hpa@zytor.com \
    --cc=jiangshanlai@gmail.com \
    --cc=jmattson@google.com \
    --cc=joro@8bytes.org \
    --cc=kvm@vger.kernel.org \
    --cc=laijs@linux.alibaba.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=tglx@linutronix.de \
    --cc=vkuznets@redhat.com \
    --cc=wanpengli@tencent.com \
    --cc=x86@kernel.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.