[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 5/6] x86emul: support INVPCID
On 27.08.2019 17:31, Andrew Cooper wrote: On 01/07/2019 12:57, Jan Beulich wrote:--- a/xen/arch/x86/x86_emulate/x86_emulate.c +++ b/xen/arch/x86/x86_emulate/x86_emulate.c @@ -9124,6 +9126,48 @@ x86_emulate( ASSERT(!state->simd_size); break;+ case X86EMUL_OPC_66(0x0f38, 0x82): /* invpcid reg,m128 */+ vcpu_must_have(invpcid); + generate_exception_if(ea.type != OP_MEM, EXC_UD); + generate_exception_if(!mode_ring0(), EXC_GP, 0); + + if ( (rc = ops->read(ea.mem.seg, ea.mem.off, mmvalp, 16, + ctxt)) != X86EMUL_OKAY ) + goto done;The actual behaviour in hardware is to not even read the memory operand if it is unused. You can demonstrate this by doing an ALL_INC_GLOBAL flush with a non-canonical memory operand. Oh, that's sort of unexpected. In particular, I was intending to use this behaviour to speed up handling of INV{EPT,VPID} which trap unconditionally. Which would require the observed behavior to also be the SDM mandated one, wouldn't it? However, this is how the instruction is described in the SDM, and INVPCID should usually execute without trapping, so the unconditional read should be fine. Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> Thanks. Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |