[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] RFC: Nested VMX patch series 08: vmwrite
Thx, Eddie Signed-off-by: Qing He <qing.he@xxxxxxxxx> Signed-off-by: Eddie Dong <eddie.dong@xxxxxxxxx> diff -r 135cec9c2aac xen/arch/x86/hvm/vmx/vmx.c --- a/xen/arch/x86/hvm/vmx/vmx.c Wed Jun 01 09:19:39 2011 +0800 +++ b/xen/arch/x86/hvm/vmx/vmx.c Wed Jun 01 09:23:22 2011 +0800 @@ -2460,12 +2460,16 @@ 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 135cec9c2aac xen/arch/x86/hvm/vmx/vvmx.c --- a/xen/arch/x86/hvm/vmx/vvmx.c Wed Jun 01 09:19:39 2011 +0800 +++ b/xen/arch/x86/hvm/vmx/vvmx.c Wed Jun 01 09:23:22 2011 +0800 @@ -624,3 +624,27 @@ 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 135cec9c2aac xen/include/asm-x86/hvm/vmx/vvmx.h --- a/xen/include/asm-x86/hvm/vmx/vvmx.h Wed Jun 01 09:19:39 2011 +0800 +++ b/xen/include/asm-x86/hvm/vmx/vvmx.h Wed Jun 01 09:23:22 2011 +0800 @@ -111,6 +111,7 @@ 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 |