From: "H. Peter Anvin" <hpa@zytor.com>
To: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: wei.y.yang@intel.com,
"xen-devel@lists.xensource.com" <xen-devel@lists.xensource.com>,
haitao.shan@intel.com, xin.li@intel.com,
Stefan Bader <stefan.bader@canonical.com>
Subject: Re: Xen HVM regression on certain Intel CPUs
Date: Wed, 27 Mar 2013 09:09:19 -0700 [thread overview]
Message-ID: <515319AF.1050900@zytor.com> (raw)
In-Reply-To: <20130327160427.GB6688@phenom.dumpdata.com>
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
next prev parent reply other threads:[~2013-03-27 16:09 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-03-27 15:26 Xen HVM regression on certain Intel CPUs Stefan Bader
2013-03-27 15:53 ` Stefan Bader
2013-03-27 16:04 ` Konrad Rzeszutek Wilk
2013-03-27 16:09 ` H. Peter Anvin [this message]
2013-03-27 16:24 ` Stefan Bader
2013-03-27 16:32 ` H. Peter Anvin
2013-03-27 16:32 ` Stefano Stabellini
2013-03-27 16:45 ` Stefan Bader
2013-03-27 16:52 ` H. Peter Anvin
2013-03-27 17:17 ` Stefan Bader
2013-03-27 17:23 ` H. Peter Anvin
2013-03-27 17:38 ` Stefan Bader
2013-03-28 13:34 ` Jan Beulich
2013-03-28 15:02 ` Stefan Bader
2013-03-28 16:39 ` Stefan Bader
2013-04-03 11:56 ` Stefan Bader
2013-04-03 12:43 ` Jan Beulich
2013-04-03 14:28 ` Keir Fraser
2013-04-03 15:00 ` Xu, Dongxiao
2013-04-03 15:48 ` H. Peter Anvin
2013-04-03 16:05 ` Jan Beulich
2013-03-27 17:28 ` Stefan Bader
2013-03-27 17:30 ` H. Peter Anvin
2013-03-27 17:40 ` Stefan Bader
2013-03-27 17:44 ` H. Peter Anvin
2013-03-27 20:24 ` Keir Fraser
2013-03-28 15:06 ` Stefan Bader
2013-03-28 15:42 ` H. Peter Anvin
2013-03-28 16:12 ` Stefan Bader
2013-03-27 16:18 ` H. Peter Anvin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=515319AF.1050900@zytor.com \
--to=hpa@zytor.com \
--cc=haitao.shan@intel.com \
--cc=konrad.wilk@oracle.com \
--cc=stefan.bader@canonical.com \
--cc=wei.y.yang@intel.com \
--cc=xen-devel@lists.xensource.com \
--cc=xin.li@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).