[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v8 03/12] x86emul: support ENQCMD insns
On 05/05/2020 09:13, Jan Beulich wrote: > Note that the ISA extensions document revision 038 doesn't specify > exception behavior for ModRM.mod == 0b11; assuming #UD here. Stale. > --- a/xen/arch/x86/x86_emulate/x86_emulate.c > +++ b/xen/arch/x86/x86_emulate/x86_emulate.c > @@ -11480,11 +11513,36 @@ int x86_emul_blk( > { > switch ( state->blk ) > { > + bool zf; > + > /* > * Throughout this switch(), memory clobbers are used to compensate > * that other operands may not properly express the (full) memory > * ranges covered. > */ > + case blk_enqcmd: > + ASSERT(bytes == 64); > + if ( ((unsigned long)ptr & 0x3f) ) > + { > + ASSERT_UNREACHABLE(); > + return X86EMUL_UNHANDLEABLE; > + } > + *eflags &= ~EFLAGS_MASK; > +#ifdef HAVE_AS_ENQCMD > + asm ( "enqcmds (%[src]), %[dst]" ASM_FLAG_OUT(, "; setz %0") %[zf] > + : [zf] ASM_FLAG_OUT("=@ccz", "=qm") (zf) > + : [src] "r" (data), [dst] "r" (ptr) : "memory" ); Can't src get away with being "m" (*data)? There is no need to force it into a single register, even if it is overwhelmingly likely to end up with %rsi scheduled here. > +#else > + /* enqcmds (%rsi), %rdi */ > + asm ( ".byte 0xf3, 0x0f, 0x38, 0xf8, 0x3e" > + ASM_FLAG_OUT(, "; setz %[zf]") > + : [zf] ASM_FLAG_OUT("=@ccz", "=qm") (zf) > + : "S" (data), "D" (ptr) : "memory" ); > +#endif > + if ( zf ) > + *eflags |= X86_EFLAGS_ZF; > + break; > + > case blk_movdir: > switch ( bytes ) > { > --- a/xen/include/asm-x86/msr-index.h > +++ b/xen/include/asm-x86/msr-index.h > @@ -420,6 +420,10 @@ > #define MSR_IA32_TSC_DEADLINE 0x000006E0 > #define MSR_IA32_ENERGY_PERF_BIAS 0x000001b0 > > +#define MSR_IA32_PASID 0x00000d93 > +#define PASID_PASID_MASK 0x000fffff > +#define PASID_VALID 0x80000000 > + Above the legacy line please as this is using the newer style, and drop _IA32. Intel's ideal of architectural-ness isn't interesting or worth the added code volume. PASSID_PASSID_MASK isn't great, but I can't suggest anything better, and MSR_PASSID_MAS doesn't work either. Otherwise, Acked-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |