All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sean Christopherson <sean.j.christopherson@intel.com>
To: Liran Alon <liran.alon@oracle.com>
Cc: pbonzini@redhat.com, rkrcmar@redhat.com, kvm@vger.kernel.org,
	jmattson@google.com, vkuznets@redhat.com,
	Bhavesh Davda <bhavesh.davda@oracle.com>
Subject: Re: [PATCH] KVM: x86: Optimization: Requst TLB flush in fast_cr3_switch() instead of do it directly
Date: Tue, 12 Nov 2019 11:02:38 -0800	[thread overview]
Message-ID: <20191112190238.GC18089@linux.intel.com> (raw)
In-Reply-To: <20191112183300.6959-1-liran.alon@oracle.com>

On Tue, Nov 12, 2019 at 08:33:00PM +0200, Liran Alon wrote:
> When KVM emulates a nested VMEntry (L1->L2 VMEntry), it switches mmu root
> page. If nEPT is used, this will happen from
> kvm_init_shadow_ept_mmu()->__kvm_mmu_new_cr3() and otherwise it will
> happpen from nested_vmx_load_cr3()->kvm_mmu_new_cr3(). Either case,
> __kvm_mmu_new_cr3() will use fast_cr3_switch() in attempt to switch to a
> previously cached root page.
> 
> In case fast_cr3_switch() finds a matching cached root page, it will
> set it in mmu->root_hpa and request KVM_REQ_LOAD_CR3 such that on
> next entry to guest, KVM will set root HPA in appropriate hardware
> fields (e.g. vmcs->eptp). In addition, fast_cr3_switch() calls
> kvm_x86_ops->tlb_flush() in order to flush TLB as MMU root page
> was replaced.
> 
> This works as mmu->root_hpa, which vmx_flush_tlb() use, was
> already replaced in cached_root_available(). However, this may
> result in unnecessary INVEPT execution because a KVM_REQ_TLB_FLUSH
> may have already been requested. For example, by prepare_vmcs02()
> in case L1 don't use VPID.
> 
> Therefore, change fast_cr3_switch() to just request TLB flush on
> next entry to guest.
> 
> Reviewed-by: Bhavesh Davda <bhavesh.davda@oracle.com>
> Signed-off-by: Liran Alon <liran.alon@oracle.com>
> ---
>  arch/x86/kvm/mmu.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c
> index 24c23c66b226..150d982ec1d2 100644
> --- a/arch/x86/kvm/mmu.c
> +++ b/arch/x86/kvm/mmu.c
> @@ -4295,7 +4295,7 @@ static bool fast_cr3_switch(struct kvm_vcpu *vcpu, gpa_t new_cr3,
>  			kvm_make_request(KVM_REQ_LOAD_CR3, vcpu);
>  			if (!skip_tlb_flush) {
>  				kvm_make_request(KVM_REQ_MMU_SYNC, vcpu);
> -				kvm_x86_ops->tlb_flush(vcpu, true);
> +				kvm_make_request(KVM_REQ_TLB_FLUSH, vcpu);

Ha, I brought this up in the original review[*].  Junaid was concerned with
maintaining the existing behavior for vcpu->stat.tlb_flush, so we kept the
direct call to ->tlb_flush().  Incrementing tlb_flush seems a-ok, so:

Reviewed-by: Sean Christopherson <sean.j.christopherson@intel.com>

[*] https://patchwork.kernel.org/patch/10461319/#21985483

>  			}
>  
>  			/*
> -- 
> 2.20.1
> 

  reply	other threads:[~2019-11-12 19:02 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-11-12 18:33 [PATCH] KVM: x86: Optimization: Requst TLB flush in fast_cr3_switch() instead of do it directly Liran Alon
2019-11-12 19:02 ` Sean Christopherson [this message]
2019-11-13  9:20 ` Vitaly Kuznetsov
2019-11-13 15:17 ` Paolo Bonzini
2019-11-13 15:20   ` Liran Alon

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=20191112190238.GC18089@linux.intel.com \
    --to=sean.j.christopherson@intel.com \
    --cc=bhavesh.davda@oracle.com \
    --cc=jmattson@google.com \
    --cc=kvm@vger.kernel.org \
    --cc=liran.alon@oracle.com \
    --cc=pbonzini@redhat.com \
    --cc=rkrcmar@redhat.com \
    --cc=vkuznets@redhat.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 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.