[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 06/12] VMX: add VMFUNC leaf 0 (EPTP switching) to emulator.
>>> On 22.06.15 at 20:56, <edmund.h.white@xxxxxxxxx> wrote: > @@ -1826,6 +1827,20 @@ static void vmx_vcpu_update_vmfunc_ve(struct vcpu *v) > vmx_vmcs_exit(v); > } > > +static bool_t vmx_vcpu_emulate_vmfunc(struct cpu_user_regs *regs) > +{ > + bool_t rc = 0; > + > + if ( !cpu_has_vmx_vmfunc && altp2mhvm_active(current->domain) && > + regs->eax == 0 && > + p2m_switch_vcpu_altp2m_by_id(current, (uint16_t)regs->ecx) ) > + { > + regs->eip += 3; What if the instruction has some (bogus but not invalid) opcode prefix? > @@ -2091,6 +2108,13 @@ static void vmx_invlpg_intercept(unsigned long vaddr) > vpid_sync_vcpu_gva(curr, vaddr); > } > > +static int vmx_vmfunc_intercept(struct cpu_user_regs *regs) > +{ > + gdprintk(XENLOG_ERR, "Failed guest VMFUNC execution\n"); > + domain_crash(current->domain); > + return X86EMUL_OKAY; > +} What is this unconditional crashing of the guest good for? > --- a/xen/arch/x86/x86_emulate/x86_emulate.c > +++ b/xen/arch/x86/x86_emulate/x86_emulate.c > @@ -3837,6 +3837,14 @@ x86_emulate( > goto rdtsc; > } > > + if (modrm == 0xd4) /* vmfunc */ > + { > + fail_if(ops->vmfunc == NULL); > + if ( (rc = ops->vmfunc(ctxt) != 0) ) > + goto done; > + break; > + } Together with the two preceding if()-s this is now finally the point where switch() should be used instead. Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |