[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 10 of 20] Emulation of guest VMWRITE
# HG changeset patch # User Eddie Dong <eddie.dong@xxxxxxxxx> # Date 1307003600 -28800 # Node ID 16e0e95f457e9b3f8ff0528c8f2b0f88b1c41109 # Parent 35cc736e8a75a0a349790871232f8761ceae41be Emulation of guest VMWRITE Signed-off-by: Qing He <qing.he@xxxxxxxxx> Signed-off-by: Eddie Dong <eddie.dong@xxxxxxxxx> diff -r 35cc736e8a75 -r 16e0e95f457e xen/arch/x86/hvm/vmx/vmx.c --- a/xen/arch/x86/hvm/vmx/vmx.c Thu Jun 02 16:33:20 2011 +0800 +++ b/xen/arch/x86/hvm/vmx/vmx.c Thu Jun 02 16:33:20 2011 +0800 @@ -2459,12 +2459,16 @@ asmlinkage void vmx_vmexit_handler(struc update_guest_eip(); break; + case EXIT_REASON_VMWRITE: + if ( nvmx_handle_vmwrite(regs) == X86EMUL_OKAY ) + update_guest_eip(); + break; + case EXIT_REASON_MWAIT_INSTRUCTION: case EXIT_REASON_MONITOR_INSTRUCTION: case EXIT_REASON_VMLAUNCH: case EXIT_REASON_VMREAD: case EXIT_REASON_VMRESUME: - case EXIT_REASON_VMWRITE: case EXIT_REASON_GETSEC: case EXIT_REASON_INVEPT: case EXIT_REASON_INVVPID: diff -r 35cc736e8a75 -r 16e0e95f457e xen/arch/x86/hvm/vmx/vvmx.c --- a/xen/arch/x86/hvm/vmx/vvmx.c Thu Jun 02 16:33:20 2011 +0800 +++ b/xen/arch/x86/hvm/vmx/vvmx.c Thu Jun 02 16:33:20 2011 +0800 @@ -568,3 +568,27 @@ out: return X86EMUL_OKAY; } +int nvmx_handle_vmwrite(struct cpu_user_regs *regs) +{ + struct vcpu *v = current; + struct vmx_inst_decoded decode; + struct nestedvcpu *nvcpu = &vcpu_nestedhvm(v); + u64 operandS, vmcs_encoding; + + if ( decode_vmx_inst(regs, &decode, &operandS, 0) + != X86EMUL_OKAY ) + return X86EMUL_EXCEPTION; + + vmcs_encoding = reg_read(regs, decode.reg2); + __set_vvmcs(nvcpu->nv_vvmcx, vmcs_encoding, operandS); + + if ( vmcs_encoding == IO_BITMAP_A || vmcs_encoding == IO_BITMAP_A_HIGH ) + __map_io_bitmap (v, IO_BITMAP_A); + else if ( vmcs_encoding == IO_BITMAP_B || + vmcs_encoding == IO_BITMAP_B_HIGH ) + __map_io_bitmap (v, IO_BITMAP_B); + + vmreturn(regs, VMSUCCEED); + return X86EMUL_OKAY; +} + diff -r 35cc736e8a75 -r 16e0e95f457e xen/include/asm-x86/hvm/vmx/vvmx.h --- a/xen/include/asm-x86/hvm/vmx/vvmx.h Thu Jun 02 16:33:20 2011 +0800 +++ b/xen/include/asm-x86/hvm/vmx/vvmx.h Thu Jun 02 16:33:20 2011 +0800 @@ -156,6 +156,7 @@ void nvmx_destroy_vmcs(struct vcpu *v); int nvmx_handle_vmptrld(struct cpu_user_regs *regs); int nvmx_handle_vmptrst(struct cpu_user_regs *regs); int nvmx_handle_vmclear(struct cpu_user_regs *regs); +int nvmx_handle_vmwrite(struct cpu_user_regs *regs); #endif /* __ASM_X86_HVM_VVMX_H__ */ _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |