[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [Patch][SVM]Disable intercepting CR3 writes when nested paging is enabled



This patch disables intercepting CR3 writes when nested paging is enabled. For applications which cause excessive CR3 accesses, the patch can increases their performance.

Signed-off-by: Wei Huang <wei.huang2@xxxxxxx>
diff -r c31edc59ae5d xen/arch/x86/hvm/svm/svm.c
--- a/xen/arch/x86/hvm/svm/svm.c        Sat Jul 25 19:31:35 2009 -0500
+++ b/xen/arch/x86/hvm/svm/svm.c        Sat Jul 25 19:31:51 2009 -0500
@@ -1299,6 +1299,8 @@ asmlinkage void svm_vmexit_handler(struc
     eventinj_t eventinj;
     int inst_len, rc;
 
+    if ( paging_mode_hap(v->domain) )
+        v->arch.hvm_vcpu.guest_cr[3] = v->arch.hvm_vcpu.hw_cr[3] = vmcb->cr3;
     /*
      * Before doing anything else, we need to sync up the VLAPIC's TPR with
      * SVM's vTPR. It's OK if the guest doesn't touch CR8 (e.g. 32-bit Windows)
diff -r c31edc59ae5d xen/arch/x86/hvm/svm/vmcb.c
--- a/xen/arch/x86/hvm/svm/vmcb.c       Sat Jul 25 19:31:35 2009 -0500
+++ b/xen/arch/x86/hvm/svm/vmcb.c       Sat Jul 25 19:31:51 2009 -0500
@@ -236,10 +236,10 @@ static int construct_vmcb(struct vcpu *v
         vmcb->h_cr3 = pagetable_get_paddr(v->domain->arch.phys_table);
 
         /*
-         * No point in intercepting CR3 reads, because the hardware will return
-         * the guest version anyway.
+         * No point in intercepting CR3 reads/writes
          */
         vmcb->cr_intercepts &= ~CR_INTERCEPT_CR3_READ;
+        vmcb->cr_intercepts &= ~CR_INTERCEPT_CR3_WRITE;
 
         /*
          * No point in intercepting INVLPG if we don't have shadow pagetables
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.