|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] Xen HVM regression on certain Intel CPUs
On 03/27/2013 09:04 AM, Konrad Rzeszutek Wilk wrote:
>>>
>>> From the Xen debugging console it was possible to gather a bit more data
>>> which
>>> pointed to a failure very close to setting CR4 in startup_32. On this
>>> particular
>>> hardware the saved CR4 (about to be set) was 0x1407f0.
>>>
>>> This would set two flags that somehow feel dangerous: PGE (page global
>>> enable)
>>> and SMEP (supervisor mode execution protection). SMEP turns out to be the
>>> main
>>> offender and the following change allows the APs to start:
>>>
>>> --- a/arch/x86/realmode/rm/trampoline_64.S
>>> +++ b/arch/x86/realmode/rm/trampoline_64.S
>>> @@ -93,7 +93,9 @@ ENTRY(startup_32)
>>> movl %edx, %fs
>>> movl %edx, %gs
>>>
>>> - movl pa_tr_cr4, %eax
>>> + movl $X86_CR4_SMEP, %eax
>>> + notl %eax
>>> + andl pa_tr_cr4, %eax
>>> movl %eax, %cr4 # Enable PAE mode
>>>
>>> # Setup trampoline 4 level pagetables
>>>
>>> Now I am not completely convinced that this is really the way to go. Likely
>>> the
>>> Xen hypervisor should not start up the guest with CR4 on the BP containing
>>> those
>>> flags. But maybe it still makes sense to mask some dangerous ones off in the
>>> realmode code (btw, it seemed that masking the assignments in arch_setup or
>>> setup_realmode did not work).
>>>
>>> And finally I am wondering why the SMEP flag in CR4 is set anyway. My
>>> understanding would be that this should only be done if cpuid[7].ebx has
>>> bit7
>>> set. And this does not seem to be the case at least on the one box I was
>>> doing
>>> the bisection on.
>>
>> Seems that I was relying on the wrong source of information when checking
>> SMEP
>> support. The cpuid command seems at fail. But /proc/cpuinfo reports it. So
>> that
>> at least explains where that comes from... sorry for that.
>
> OK, so if you boot Xen with smep=1 (which disables SMEP, kind of
> counterintuive flag)
> that would work fine?
>
> CC-ing the Intel folks who added this in.
>
If it is present in /proc/cpuinfo and not in cpuid it means the kernel
thinks it has SMEP but the CPU doesn't... an obvious case of fail.
However, *where the hell* does the bit come from in the first place?
That is what we need to track down.
When you say Xen HVM, am I correct in assuming that neither CPUID nor
CR4 operations in the main kernel are run through paravirt_ops?
-hpa
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |