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

[Xen-changelog] [xen-unstable] x86 svm: Disable intercepting CR3 writes when nested paging is enabled



# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1247729189 -3600
# Node ID 8368aff1d759c48ea3904094089398c91c3fdc42
# Parent  06893fe1c39939e8363f99101b1eb89cd276f30b
x86 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 increase their performance.

Signed-off-by: Wei Huang <wei.huang2@xxxxxxx>
---
 xen/arch/x86/hvm/svm/svm.c  |    3 +++
 xen/arch/x86/hvm/svm/vmcb.c |    7 ++-----
 2 files changed, 5 insertions(+), 5 deletions(-)

diff -r 06893fe1c399 -r 8368aff1d759 xen/arch/x86/hvm/svm/svm.c
--- a/xen/arch/x86/hvm/svm/svm.c        Wed Jul 15 16:21:12 2009 +0100
+++ b/xen/arch/x86/hvm/svm/svm.c        Thu Jul 16 08:26:29 2009 +0100
@@ -1299,6 +1299,9 @@ 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 06893fe1c399 -r 8368aff1d759 xen/arch/x86/hvm/svm/vmcb.c
--- a/xen/arch/x86/hvm/svm/vmcb.c       Wed Jul 15 16:21:12 2009 +0100
+++ b/xen/arch/x86/hvm/svm/vmcb.c       Thu Jul 16 08:26:29 2009 +0100
@@ -235,11 +235,8 @@ static int construct_vmcb(struct vcpu *v
         vmcb->g_pat = 0x0007040600070406ULL; /* guest PAT */
         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.
-         */
-        vmcb->cr_intercepts &= ~CR_INTERCEPT_CR3_READ;
+        /* No point in intercepting CR3 reads/writes. */
+        vmcb->cr_intercepts &= ~(CR_INTERCEPT_CR3_READ|CR_INTERCEPT_CR3_WRITE);
 
         /*
          * No point in intercepting INVLPG if we don't have shadow pagetables

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

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