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@amd.com>
This commit is contained in:
Keir Fraser committed 2009-07-16 08:26:29 +01:00
1 parent b84689836a
commit dacf09d460
2 files changed
+5 -5

No files matched your search

+3
View File
@@ -1299,6 +1299,9 @@ asmlinkage void svm_vmexit_handler(struct cpu_user_regs *regs)
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)
+2 -5
View File
@@ -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
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.