public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: "H. Peter Anvin" <hpa@zytor.com>
To: Steven Rostedt <rostedt@goodmis.org>
Cc: Jason Baron <jbaron@redhat.com>, Daniel Drake <dsd@laptop.org>,
	Andres Salomon <dilinger@queued.net>, Chris Ball <cjb@laptop.org>,
	linux-kernel@vger.kernel.org, mingo@elte.hu,
	Borislav Petkov <bp@alien8.de>
Subject: Re: Dynamic nop selection breaks boot on Geode LX
Date: Mon, 04 Oct 2010 15:22:26 -0700	[thread overview]
Message-ID: <4CAA53A2.6070703@zytor.com> (raw)
In-Reply-To: <1286230518.6750.76.camel@gandalf.stny.rr.com>

On 10/04/2010 03:15 PM, Steven Rostedt wrote:
>>
>> We tried exactly this type of dynamic selection before, and it doesn't
>> work on broken virtualizers; in particular Microsoft VirtualPC can pass
>> the exception test and yet fail later.
> 
> So the code is broken because of broken virtualizers??
> 

Yup.  Fun, isn't it?  :(  Unfortunately, broken virtualizers appear as
broken CPUs to us.  We used to do the #UD probe for NOPL, but it didn't
work.

>>
>> The end result is very simple: you can always use NOPL on 64 bits, you
>> can never use NOPL on 32 bits.
>>
>> 66 66 66 66 90 will always *work* (as in, it will never fail) but it's
>> pretty slow on older CPUs which took a hit on handle prefixes -- but it
>> might still be faster than a jump on those.  Thus, in your code the JMP
>> case will never be reached anyway.
> 
> The jmp was there because of paranoia, and I never expected it to be
> reached.
> 
>>
>> There isn't, of course, a classic 5-byte sequence, although the sequence:
>>
>> 	2E 8D 75 26 00
>>
>> ... should work (leal %ds:0(,%esi,1),%esi).  However, 66 ... 90 is
>> likely to work better on modern processors (although I haven't measured it.)
> 
> The point is, this nop will be at _every_ function call (it replaces the
> mcount call). Not just scattered throughout the kernel. It is imperative
> that we have the best nop available.
> 
> So what would you recommend?
> 

NOPL is special, because it's the only NOP sequence that isn't actually
*supported* on all processors (and we have found that we can't even use
it on 32 bits, even though the vast majority of all real-life 32-bit
processors do support it.)

Borislav is just checking to see if we can just use NOPL unconditionally
on 64 bits; as far as 32 bits is concerned the only option for picking
what is "best" is probably to benchmark some set of sequences on the set
of processors we care about.  However, I suspect that on any modern
processors either 66 66 66 66 90 or 2E 8D 75 26 00 will work equally well.

With a bit of benchmarking I think we could adopt the policy of using
NOPL on 64 bits and one of the above sequences on 32 bits.

	-hpa



  reply	other threads:[~2010-10-04 22:23 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-10-02 19:16 Dynamic nop selection breaks boot on Geode LX Daniel Drake
2010-10-03  5:50 ` Borislav Petkov
2010-10-03  9:26   ` Borislav Petkov
2010-10-03 14:47     ` Borislav Petkov
2010-10-03 16:32   ` Daniel Drake
2010-10-03 17:12     ` Borislav Petkov
2010-10-04 18:06     ` Steven Rostedt
2010-10-04 15:46 ` Jason Baron
2010-10-04 16:49   ` Daniel Drake
2010-10-04 20:31   ` Steven Rostedt
2010-10-04 20:39     ` Jason Baron
2010-10-04 22:11       ` Steven Rostedt
2010-10-04 21:51   ` H. Peter Anvin
2010-10-04 22:15     ` Steven Rostedt
2010-10-04 22:22       ` H. Peter Anvin [this message]
2010-10-04 22:27         ` Nick Lowe
     [not found]         ` <AANLkTikCkwF+yd4kdad8Bcz-6YX+STiy1wgrFfJxsfRg@mail.gmail.com>
2010-10-04 22:32           ` H. Peter Anvin
2010-10-26 20:08   ` Daniel Drake
2010-10-26 20:12     ` Jason Baron

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=4CAA53A2.6070703@zytor.com \
    --to=hpa@zytor.com \
    --cc=bp@alien8.de \
    --cc=cjb@laptop.org \
    --cc=dilinger@queued.net \
    --cc=dsd@laptop.org \
    --cc=jbaron@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=rostedt@goodmis.org \
    /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