commit c89a3f986870176b2c178a28fce82e868160ee61 Author: Andre Przywara Date: Sun Jul 25 15:09:44 2010 +0200 svm: implement INVLPG part of DecodeAssist Newer SVM implementations (Bulldozer) give the desired address on a INVLPG intercept explicitly in the EXITINFO1 field of the VMCB. Use this address to avoid a costly instruction fetch and deocde cycle. Only useful with shadow paging. Signed-off-by: Andre Przywara diff --git a/xen/arch/x86/hvm/svm/svm.c b/xen/arch/x86/hvm/svm/svm.c index c406bd3..6b196b3 100644 --- a/xen/arch/x86/hvm/svm/svm.c +++ b/xen/arch/x86/hvm/svm/svm.c @@ -1939,7 +1939,10 @@ asmlinkage void svm_vmexit_handler(struct cpu_user_regs *regs) case VMEXIT_INVLPG: case VMEXIT_INVLPGA: - if ( !handle_mmio() ) + if (cpu_has_svm_decode) { + svm_invlpg_intercept(vmcb->exitinfo1); + __update_guest_eip(regs, vmcb->nextrip - vmcb->rip); + } else if ( !handle_mmio() ) hvm_inject_exception(TRAP_gp_fault, 0, 0); break;