xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
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

  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).