|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v5 07/15] VMX: add VMFUNC leaf 0 (EPTP switching) to emulator.
>>> On 14.07.15 at 02:14, <edmund.h.white@xxxxxxxxx> wrote:
> --- a/xen/arch/x86/hvm/emulate.c
> +++ b/xen/arch/x86/hvm/emulate.c
> @@ -1436,6 +1436,19 @@ static int hvmemul_invlpg(
> return rc;
> }
>
> +static int hvmemul_vmfunc(
> + struct x86_emulate_ctxt *ctxt)
> +{
> + int rc;
> +
> + rc = hvm_funcs.altp2m_vcpu_emulate_vmfunc(ctxt->regs);
> + if ( rc != X86EMUL_OKAY )
> + {
> + hvmemul_inject_hw_exception(TRAP_invalid_op, 0, ctxt);
> + }
> + return rc;
Pointless braces and missing blank line before final return.
> @@ -1830,6 +1831,19 @@ static void vmx_vcpu_update_vmfunc_ve(struct vcpu *v)
> vmx_vmcs_exit(v);
> }
>
> +static int vmx_vcpu_emulate_vmfunc(struct cpu_user_regs *regs)
> +{
> + int rc = X86EMUL_EXCEPTION;
> + struct vcpu *curr = current;
> +
> + if ( !cpu_has_vmx_vmfunc && altp2m_active(curr->domain) &&
> + regs->eax == 0 &&
> + p2m_switch_vcpu_altp2m_by_id(curr, (uint16_t)regs->ecx) )
Documentation suggests that the upper 32 bits of RAX are being
ignored, and that all 32 bits of ECX are being used.
> @@ -3234,6 +3263,15 @@ void vmx_vmexit_handler(struct cpu_user_regs *regs)
> update_guest_eip();
> break;
>
> + case EXIT_REASON_VMFUNC:
> + if ( (vmx_vmfunc_intercept(regs) == X86EMUL_EXCEPTION) ||
> + (vmx_vmfunc_intercept(regs) == X86EMUL_UNHANDLEABLE) ||
> + (vmx_vmfunc_intercept(regs) == X86EMUL_RETRY) )
Why would you want to invoke the function 3 times? How about
simply != X86EMUL_OKAY?
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |