From mboxrd@z Thu Jan 1 00:00:00 1970 From: Christoph Egger Subject: [PATCH] nestedsvm: reduce TLB flushes Date: Wed, 18 May 2011 17:26:06 +0200 Message-ID: <4DD3E50E.4030607@amd.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------090805060300010205000104" Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: "xen-devel@lists.xensource.com" List-Id: xen-devel@lists.xenproject.org --------------090805060300010205000104 Content-Type: text/plain; charset="ISO-8859-15"; format=flowed Content-Transfer-Encoding: 7bit Reduce TLB flushes: 1. When we update the cr3 during VMRUN/VMEXIT emulation we toggle between n1asid and n2asid forth and back => no TLB flush needed 2. Only flush n1asid or n2asid depending on vcpu guest mode and not both unconditionally. Signed-off-by: Christoph Egger -- ---to satisfy European Law for business letters: Advanced Micro Devices GmbH Einsteinring 24, 85689 Dornach b. Muenchen Geschaeftsfuehrer: Alberto Bozzo, Andrew Bowd Sitz: Dornach, Gemeinde Aschheim, Landkreis Muenchen Registergericht Muenchen, HRB Nr. 43632 --------------090805060300010205000104 Content-Type: text/plain; name="xen_nh_asid.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="xen_nh_asid.diff" Content-Description: xen_nh_asid.diff diff -r 0e45a2e91f17 xen/arch/x86/hvm/svm/svm.c --- a/xen/arch/x86/hvm/svm/svm.c Thu May 12 14:35:58 2011 +0200 +++ b/xen/arch/x86/hvm/svm/svm.c Wed May 18 17:26:16 2011 +0200 @@ -450,7 +452,19 @@ static void svm_update_guest_cr(struct v break; case 3: vmcb_set_cr3(vmcb, v->arch.hvm_vcpu.hw_cr[3]); - hvm_asid_flush_vcpu(v); + if ( !nestedhvm_enabled(v->domain) ) { + hvm_asid_flush_vcpu(v); + break; + } + if ( nestedhvm_vmswitch_in_progress(v) ) + /* During VMRUN/VMEXIT emulation we toggle between + * n1asid and n2asid. */ + break; + + if ( nestedhvm_vcpu_in_guestmode(v) ) + hvm_asid_flush_vcpu_asid(&vcpu_nestedhvm(v).nv_n2asid); + else + hvm_asid_flush_vcpu_asid(&v->arch.hvm_vcpu.n1asid); break; case 4: value = HVM_CR4_HOST_MASK; --------------090805060300010205000104 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --------------090805060300010205000104--