|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] x86/cpuid: fix dom0 crash on skylake machine
>>> On 01.06.16 at 11:34, <andrew.cooper3@xxxxxxxxxx> wrote:
> On 01/06/16 10:17, Jan Beulich wrote:
>>>>> On 01.06.16 at 11:03, <andrew.cooper3@xxxxxxxxxx> wrote:
>>> While this does work, it undoes some of the work I started with my cpuid
>>> improvements in 4.7
>>>
>>> Does the attached patch also resolve your issue?
>> While that's much better than the original, I don't think it's quite
>> enough. The rest of the domain policy should be taken into account
>> (and I think I had suggested to do so during review of your CPUID
>> rework series), i.e. this can't be calculated once for every domain.
>
> Like the current use of {hvm,pv}_featureset, as an upper bound, this is
> just a stopgap fix.
>
> Fixing this in a properly per-domain way is part of my further plans for
> cpuid improvements. The reason it isn't done like this yet is because
> there is a substantial quantity of work required to make this function.
What substantial work other than XSTATE leaf handling inquiring
other leaves do you see?
>> And then, as said in reply to the original patch, handle_xsetbv()'s
>> checking should be generalized from the special casing of PKRU (or
>> if we don't want that, then that special case would better get
>> removed for consistency reasons).
>
> Oh - I hadn't even noticed that. How about this incremental change?
>
> diff --git a/xen/arch/x86/xstate.c b/xen/arch/x86/xstate.c
> index a0cfcc2..67c0e4b 100644
> --- a/xen/arch/x86/xstate.c
> +++ b/xen/arch/x86/xstate.c
> @@ -658,8 +658,8 @@ int handle_xsetbv(u32 index, u64 new_bv)
> if ( (new_bv & ~xfeature_mask) || !valid_xcr0(new_bv) )
> return -EINVAL;
>
> - /* XCR0.PKRU is disabled on PV mode. */
> - if ( is_pv_vcpu(curr) && (new_bv & XSTATE_PKRU) )
> + /* Sanity check against domain maximum. */
> + if ( new_bv & ~(is_pv_vcpu(curr) ? pv_xfeature_mask : hvm_xfeature_mask)
> )
> return -EOPNOTSUPP;
Looks good.
But one other aspect: MPX is tagged S, while PKU is tagged H. Do
we perhaps need three masks to get the above right at least with
just the global masking?
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |