public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Matt Fleming <matt@codeblueprint.co.uk>
To: Alex Thorlton <athorlton@sgi.com>
Cc: Borislav Petkov <bp@suse.de>,
	linux-kernel@vger.kernel.org,
	Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>, "H. Peter Anvin" <hpa@zytor.com>,
	x86@kernel.org, linux-efi@vger.kernel.org,
	Russ Anderson <rja@sgi.com>, Dimitri Sivanich <sivanich@sgi.com>,
	mike travis <travis@sgi.com>, Nathan Zimmer <nzimmer@sgi.com>
Subject: Re: [BUG] x86/efi: MMRs no longer properly mapped after switch to isolated page table
Date: Sat, 30 Apr 2016 23:12:09 +0100	[thread overview]
Message-ID: <20160430221209.GO2839@codeblueprint.co.uk> (raw)
In-Reply-To: <20160429154119.GI113599@stormcage.americas.sgi.com>

On Fri, 29 Apr, at 10:41:19AM, Alex Thorlton wrote:
> 
> You can see here that we've made it past the MMR read in uv_system_init,
> but we die inside of our first EFI callback.  In this example, it looks
> like we're using the kernel page table at the time of the failure, and I
> believe that the failing address is somewhere in our EFI runtime code:
> 
> [    0.803396] efi: ATHORLTON EFI md dump:
> [    0.803396]         type: 5
> [    0.803396]         pad: 0
> [    0.803396]         phys_addr: 6a0a6000
> [    0.803396]         virt_addr: 0
> [    0.803396]         num_pages: 184
> [    0.803396]         attribute: 800000000000000f
> 
> So it looks like we're trying to read from EFI runtime space while using
> the kernel page table, which fails, presumably because the space is also
> not mapped into the kernel page table.  While I understand *why* it
> fails, and why the address isn't mapped, I don't fully know how we
> should handle fixing it.

How come you're not using the new EFI page tables while making EFI
runtime calls?

Who owns the MMR space and what is it used for? Do both the kernel and
the firmware need access to it? My SGI UV knowledge is zero, so I'm
happy to be educated! I can't think of any analogous memory regions on
x86 where the EFI services require the kernel to map them, other than
the EFI regions themselves.

Runtime EFI regions should be opaque, isolated and self-contained.
This is why there are two phases of execution for firmware; before and
after ExitBootServices(). Once the kernel takes control after
ExitBootServices() firmware can no longer provide timer services, for
example, and doesn't care where the kernel maps the LAPIC because it
never tries to access it.

The fact that the UV firmware does care where the MMR space is mapped
makes me suspect that there's a lack of isolation.

  reply	other threads:[~2016-04-30 22:12 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-04-27 15:41 [BUG] x86/efi: MMRs no longer properly mapped after switch to isolated page table Alex Thorlton
2016-04-27 18:23 ` Alex Thorlton
2016-04-27 22:51 ` Borislav Petkov
2016-04-28  1:41   ` Alex Thorlton
2016-04-28 12:57     ` Borislav Petkov
2016-04-29 15:41       ` Alex Thorlton
2016-04-30 22:12         ` Matt Fleming [this message]
2016-05-02 21:39           ` Alex Thorlton
2016-05-02 22:17             ` Mike Travis
2016-05-09 21:55             ` Matt Fleming
2016-05-10 17:35               ` Alex Thorlton
2016-05-02 10:02         ` Borislav Petkov
2016-05-02 22:27           ` Alex Thorlton
2016-05-03  0:10             ` Alex Thorlton
2016-05-03  9:48               ` Borislav Petkov
2016-05-03 18:47                 ` Alex Thorlton
2016-05-04 10:36                   ` Borislav Petkov
2016-05-04 16:32                     ` Alex Thorlton
2016-04-29  9:01 ` Matt Fleming
2016-04-29 15:45   ` Alex Thorlton

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=20160430221209.GO2839@codeblueprint.co.uk \
    --to=matt@codeblueprint.co.uk \
    --cc=athorlton@sgi.com \
    --cc=bp@suse.de \
    --cc=hpa@zytor.com \
    --cc=linux-efi@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=nzimmer@sgi.com \
    --cc=rja@sgi.com \
    --cc=sivanich@sgi.com \
    --cc=tglx@linutronix.de \
    --cc=travis@sgi.com \
    --cc=x86@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox