|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] x86/intel: Protect set_cpuidmask() against #GP faults
>>> On 05.06.14 at 13:19, <andrew.cooper3@xxxxxxxxxx> wrote:
> Virtual environments such as Xen HVM containers and VirtualBox do not
> necessarily provide support for feature masking MSRs.
>
> As their presence is detected by model numbers alone, and their use
> predicated
> on command line parameters, use the safe() variants of {wr,rd}msr() to avoid
> dying with an early #GP fault.
I'm tempted to say "Then just don't pass these options." There are
other options that can lead to boot failure if not used properly.
> * Call set_cpuidmask() unconditionally so faulting-capable hardware still gets
> a log message indicating to the user why their command line arguments are
> not taking effect.
I don't think Intel will particularly like this part.
> - /* Only family 6 supports this feature */
> - switch ((c->x86 == 6) * c->x86_model) {
> - case 0x17:
> - if ((c->x86_mask & 0x0f) < 4)
> - break;
I had been inquiring about this stepping specific check here too,
without ever getting clarification. I think we shouldn't blindly
drop it.
> + setmask:
> + if (msr_basic &&
> + wrmsr_safe(msr_basic,
> + ((u64)opt_cpuid_mask_edx << 32) | opt_cpuid_mask_ecx)){
> + msr_basic = 0;
> + printk("Failed to set CPUID feature mask\n");
> + }
> +
> + if (msr_ext &&
> + wrmsr_safe(msr_ext,
> + ((u64)opt_cpuid_mask_ext_edx << 32) |
> opt_cpuid_mask_ext_ecx)){
> + msr_ext = 0;
> + printk("Failed to set CPUID extended feature mask\n");
> + }
> +
> + if (msr_xsave &&
> + (rdmsr_safe(msr_xsave, msr_val) ||
> + wrmsr_safe(msr_xsave,
> + ((u64)msr_val << 32) | opt_cpuid_mask_xsave_eax))){
I'm afraid copy'n'paste went a little too far here: Neither does msr_val
need a u64 cast, nor do you want to write into the high half what you
read from the low one.
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |