|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 06/11] VMX/altp2m: add code to support EPTP switching and #VE.
Hi,
At 13:26 -0800 on 09 Jan (1420806396), Ed White wrote:
> @@ -2551,6 +2640,17 @@ static void vmx_vmexit_ud_intercept(struct
> cpu_user_regs *regs)
> hvm_inject_hw_exception(TRAP_invalid_op, HVM_DELIVER_NO_ERROR_CODE);
> break;
> case X86EMUL_EXCEPTION:
> + /* check for a VMFUNC that should be emulated */
> + if ( !cpu_has_vmx_vmfunc && altp2mhvm_active(current->domain) &&
> + ctxt.insn_buf_bytes >= 3 && ctxt.insn_buf[0] == 0x0f &&
> + ctxt.insn_buf[1] == 0x01 && ctxt.insn_buf[2] == 0xd4 &&
> + regs->eax == 0 &&
> + p2m_switch_vcpu_altp2m_by_id(current, (uint16_t)regs->ecx) )
> + {
> + regs->eip += 3;
> + return;
> + }
> +
I think Andrew already pointed out that this needs to be done by
adding VMFUNC to the emulator itself with a callback. Apart from
anything else that will DTRT with prefix bytes &c.
> + if ( (uint16_t)idx != vcpu_altp2mhvm(v).p2midx )
> + {
> + cpumask_clear_cpu(v->vcpu_id, p2m_get_altp2m(v)->dirty_cpumask);
> + vcpu_altp2mhvm(v).p2midx = (uint16_t)idx;
> + cpumask_set_cpu(v->vcpu_id, p2m_get_altp2m(v)->dirty_cpumask);
This looks wrong -- you need to do a TLB flush before you can remove
this CPU from the dirty_cpumask.
> + }
> + }
>
> /* XXX: This looks ugly, but we need a mechanism to ensure
> * any pending vmresume has really happened
> @@ -3041,6 +3175,10 @@ void vmx_vmexit_handler(struct cpu_user_regs *regs)
> update_guest_eip();
> break;
>
> + case EXIT_REASON_VMFUNC:
> + vmx_vmexit_ud_intercept(regs);
I think vmx_vmexit_ud_intercept() should probably be renamed, and
perhaps split into two since this new caller won't want the
opt_hvm_fep stuff.
Tim.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |