[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v5 03/14] x86emul: abstract out XCRn accesses
>>> On 15.03.18 at 16:41, <andrew.cooper3@xxxxxxxxxx> wrote: > On 15/03/18 13:04, Jan Beulich wrote: >> --- a/xen/arch/x86/x86_emulate.c >> +++ b/xen/arch/x86/x86_emulate.c >> @@ -42,3 +42,50 @@ >> }) >> >> #include "x86_emulate/x86_emulate.c" >> + >> +int x86emul_read_xcr(unsigned int reg, uint64_t *val, >> + struct x86_emulate_ctxt *ctxt) >> +{ >> + switch ( reg ) >> + { >> + case 0: >> + *val = current->arch.xcr0; >> + return X86EMUL_OKAY; >> + >> + case 1: >> + if ( cpu_has_xgetbv1 && current->domain->arch.cpuid->xstate.xgetbv1 >> ) >> + break; >> + /* fall through */ >> + default: >> + x86_emul_hw_exception(TRAP_gp_fault, 0, ctxt); >> + return X86EMUL_EXCEPTION; >> + } >> + >> + *val = xgetbv(reg); >> + >> + return X86EMUL_OKAY; >> +} >> + >> +int x86emul_write_xcr(unsigned int reg, uint64_t val, >> + struct x86_emulate_ctxt *ctxt) >> +{ >> + switch ( reg ) >> + { >> + case 0: >> + break; >> + >> + case 1: >> + if ( cpu_has_xgetbv1 && current->domain->arch.cpuid->xstate.xgetbv1 >> ) >> + break; >> + /* fall through */ > > Actually, this is wrong. cpu_has_xgetbv1 applies only to the read > side. xsetbv[1] is still strictly reserved and yields #GP. (Given the > way other bits in xcr0 work, I wouldn't be surprised if xsetbv[1] is > reserved forever more.) > > I'd just drop this case block and let 1 fall into the default case, > rather than relying on the sanity check in handle_xsetbv() Oh, indeed, this was rather silly of me. 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 |