All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andy Lutomirski <luto@amacapital.net>
To: linux-efi@vger.kernel.ogr, LKML <linux-kernel@vger.kernel.org>
Subject: EFI mixed mode + perf = rampant triple faults
Date: Wed, 17 Dec 2014 08:51:52 -0800	[thread overview]
Message-ID: <5491B4A8.905@amacapital.net> (raw)

I figured I should send this email before I forget about this issue:

If you run perf record across any EFI mixed mode call or otherwise
receive an NMI or MCE, the machine triple-faults.  The cause is
straightforward: there is no valid IDT when we have long mode disabled
for the duration of the EFI call.

As far as I know, the only way to have continuously functional interrupt
handling across a long mode transition is to install an interrupt vector
table and hope that CPUs actually do something intelligent when
receiving an interrupt with LME=1, LMA=1, and PG=0.  Yuck.

Could we get away with issuing 32-bit EFI calls in compat mode, i.e.
with a 32-bit CPL0 CS but while still in long mode?  I think that
delivery of an IST interrupt (which includes both NMI and MCE) will
correctly switch to a fully valid 64-bit state and would correctly
switch back when we execute IRET at the end.  (Am I missing some reason
that switching bitness without a privilege level change doesn't work
well?  I haven't thought of anything, other than the lack of SS controls
on intra-ring interrupts, but that shouldn't be an issue here.)

As an added benefit, this would considerably simplify the code.

--Andy

             reply	other threads:[~2014-12-17 16:51 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-12-17 16:51 Andy Lutomirski [this message]
2014-12-17 16:54 ` EFI mixed mode + perf = rampant triple faults Andy Lutomirski
2014-12-31 18:37   ` Matt Fleming
     [not found]     ` <20141231183739.GA28946-HNK1S37rvNbeXh+fF434Mdi2O/JbrIOy@public.gmane.org>
2015-01-14 16:51       ` Matt Fleming
2015-01-14 16:51         ` Matt Fleming
     [not found]         ` <20150114165151.GA3479-mF/unelCI9GS6iBeEJttW/XRex20P6io@public.gmane.org>
2015-01-14 18:27           ` Andy Lutomirski
2015-01-14 18:27             ` Andy Lutomirski
     [not found]             ` <CALCETrWOxPwoL0zo0UZMk=05uAEqgY-Xovk1=JHwbVtinx3u3w-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-01-14 18:35               ` Borislav Petkov
2015-01-14 18:35                 ` Borislav Petkov
2015-01-14 18:38                 ` Andy Lutomirski
     [not found]                   ` <CALCETrUEfQY-hnmNV9-PfDbEYLa7bVoRcsZc2X0V+mEAbfNH2g-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-01-14 18:47                     ` Borislav Petkov
2015-01-14 18:47                       ` Borislav Petkov
2015-01-14 18:49                       ` Andy Lutomirski
2015-01-15 19:41               ` Matt Fleming
2015-01-15 19:41                 ` Matt Fleming
     [not found]                 ` <20150115194127.GB12079-mF/unelCI9GS6iBeEJttW/XRex20P6io@public.gmane.org>
2015-01-15 19:59                   ` H. Peter Anvin
2015-01-15 19:59                     ` H. Peter Anvin
     [not found]                     ` <54B81C2E.2090909-YMNOUZJC4hwAvxtiuMwx3w@public.gmane.org>
2015-01-15 22:21                       ` Matt Fleming
2015-01-15 22:21                         ` Matt Fleming

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=5491B4A8.905@amacapital.net \
    --to=luto@amacapital.net \
    --cc=linux-efi@vger.kernel.ogr \
    --cc=linux-kernel@vger.kernel.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.