From: Sai Praneeth Prakhya <sai.praneeth.prakhya@intel.com>
To: Andy Lutomirski <luto@amacapital.net>
Cc: "Ravi V. Shankar" <ravi.v.shankar@intel.com>,
Toshi Kani <toshi.kani@hp.com>, Brian Gerst <brgerst@gmail.com>,
Thomas Gleixner <tglx@linutronix.de>,
Ingo Molnar <mingo@kernel.org>,
Linus Torvalds <torvalds@linux-foundation.org>,
Luis Rodriguez <mcgrof@suse.com>,
Andrew Morton <akpm@linux-foundation.org>,
Denys Vlasenko <dvlasenk@redhat.com>,
Matt Fleming <matt@codeblueprint.co.uk>,
"H. Peter Anvin" <hpa@zytor.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
Borislav Petkov <bp@alien8.de>,
ricardo.neri@intel.com, Hugh Dickins <hughd@google.com>,
Ard Biesheuvel <ard.biesheuvel@linaro.org>
Subject: Re: [tip:efi/core] x86/mm/pat: Use _PAGE_GLOBAL bit for EFI page table mappings
Date: Tue, 23 Feb 2016 16:50:02 -0800 [thread overview]
Message-ID: <1456275002.2781.41.camel@intel.com> (raw)
In-Reply-To: <CALCETrW17PWUywMCKWn=KGNLfJQ9kPHXeX2h9sVR47TzyGOJww@mail.gmail.com>
On Tue, 2016-02-23 at 09:47 -0800, Andy Lutomirski wrote:
> On Feb 23, 2016 1:09 AM, <"tip-bot for Sai Praneeth
> <tipbot@zytor.com>"@zytor.com> wrote:
>
> Something's wrong with tip-bot. This should say:
>
>
> commit 397630150632639b3ca5b4414accd5011c45e276
> Author: Sai Praneeth <sai.praneeth.prakhya@intel.com>
> Date: Wed Feb 17 12:35:56 2016 +0000
>
> x86/mm/pat: Use _PAGE_GLOBAL bit for EFI page table mappings
>
> Since EFI page tables can be treated as kernel page tables they should
> be global. All the other page mapping functions in pageattr.c set the
> _PAGE_GLOBAL bit and we want to avoid inconsistencies when we map a page
> in the EFI code paths, for example when that page is split in
> __split_large_page(), etc. It also makes it easier to validate that the
> EFI region mappings have the correct attributes because there are fewer
> differences compared with regular kernel mappings.
>
> But the actual patch is:
>
>
> @@ -909,6 +909,20 @@ static void populate_pte(struct cpa_data *cpa,
>
> pte = pte_offset_kernel(pmd, start);
>
> + /*
> + * Set the GLOBAL flags only if the PRESENT flag is
> + * set otherwise pte_present will return true even on
> + * a non present pte. The canon_pgprot will clear
> + * _PAGE_GLOBAL for the ancient hardware that doesn't
> + * support it.
> + */
> + if (pgprot_val(pgprot) & _PAGE_PRESENT)
> + pgprot_val(pgprot) |= _PAGE_GLOBAL;
> + else
> + pgprot_val(pgprot) &= ~_PAGE_GLOBAL;
> +
> + pgprot = canon_pgprot(pgprot);
> +
>
> The comment is confusing. This code is setting GLOBAL if PRESENT is
> set even if not requested, but the comment is about setting GLOBAL
> *only* if PRESENT is set.
As you rightly said the code is about making a page GLOBAL if PRESENT is
set and we do set PRESENT bit before mapping so that page is GLOBAL.
This code was taken from the other parts of pageattr.c. The point is
that we don't want differences between whether things were mapped in the
EFI page tables directly (i.e. using populate_pte()) or later split from
large pages via the split_large_page() code path. If this is still
confusing could you please elaborate on it further.
>
> Can you explain:
>
> a) Why this wasn't already broken. (were there no callers who set
> GLOBAL but not PRESENT? If there weren't any, why is that part
> needed?)
>
I don't think previous implementation is broken and this is not a bug
fix as such. Before this patch some EFI region mappings had GLOBAL bit
set (which followed split large page path) and some aren't (which used
populate_pte). This patch just aligns the mappings done via two
different code paths as mentioned above. As a whole it also maintains
consistency with kernel mappings.
> b) Why setting GLOBAL for EFI mappings is useful.
We did this for consistency among EFI mappings. This has some advantages
as mentioned in the commit message. It also makes it less confusing when
starting at the PGT_DUMP traces if _PAGE_GLOBAL is used consistently.
We don't actually do anything special with _PAGE_GLOBAL in EFI.
> c) Why setting GLOBAL for EFI mappings is safe. Don't we unmap the
> EFI mappings when we're not actively using them in new kernels? If
> so, don't we explicitly want them *not* to be GLOBAL to avoid needing
> an extra-expensive global flush?
This is a valid point. I know that EFI runtime regions persist during
and after boot if we have a UEFI firmware and other commits made EFI
regions have separate page table but I am not clear about the effect of
global flush. I think Matt/Boris could comment on it.
> d) Why this doesn't break any non-EFI code.
We touch this code path only when mapping EFI runtime regions to VA
space, i.e. we added pgd field in cpa only as a support for mapping efi
runtime regions.
> --Andy
next prev parent reply other threads:[~2016-02-24 0:50 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-02-17 12:35 [GIT PULL 00/13] EFI changes for v4.6 part 2 Matt Fleming
2016-02-17 12:35 ` [PATCH 01/13] efi: Reformat GUID tables to follow the format in UEFI spec Matt Fleming
2016-02-22 12:12 ` [tip:efi/core] " =?UTF-8?B?dGlwLWJvdCBmb3IgUGV0ZXIgSm9uZXMgPHRpcGJvdEB6eXRvci5jb20+?=
2016-02-17 12:35 ` [PATCH 02/13] efi/runtime-wrappers: Run UEFI Runtime Services with interrupts enabled Matt Fleming
2016-02-22 12:13 ` [tip:efi/core] " =?UTF-8?B?dGlwLWJvdCBmb3IgQXJkIEJpZXNoZXV2ZWwgPHRpcGJvdEB6eXRvci5jb20+?=
2016-02-17 12:35 ` [PATCH 03/13] x86/mm/pageattr: Use _PAGE_GLOBAL bit for EFI page table mappings Matt Fleming
2016-02-22 12:13 ` [tip:efi/core] x86/mm/pat: " =?UTF-8?B?dGlwLWJvdCBmb3IgU2FpIFByYW5lZXRoIDx0aXBib3RAenl0b3IuY29tPg==?=
2016-02-23 17:47 ` Andy Lutomirski
2016-02-23 18:08 ` Linus Torvalds
2016-02-23 18:12 ` Borislav Petkov
2016-02-24 2:09 ` H. Peter Anvin
2016-02-24 2:13 ` H. Peter Anvin
2016-02-25 8:59 ` Ingo Molnar
2016-02-24 0:50 ` Sai Praneeth Prakhya [this message]
2016-02-24 2:43 ` Andy Lutomirski
2016-02-24 14:10 ` Matt Fleming
2016-02-24 16:20 ` Borislav Petkov
2016-02-24 16:36 ` Andy Lutomirski
2016-02-24 18:56 ` Linus Torvalds
2016-02-24 19:45 ` Matt Fleming
2016-02-24 19:50 ` Andy Lutomirski
2016-02-29 10:56 ` Sylvain Chouleur
2016-03-02 11:20 ` Matt Fleming
2016-02-24 19:33 ` Matt Fleming
2016-02-24 19:49 ` Andy Lutomirski
2016-02-25 9:06 ` Ingo Molnar
2016-02-25 15:27 ` Matt Fleming
2016-02-24 16:41 ` Borislav Petkov
2016-02-24 16:47 ` Andy Lutomirski
2016-02-24 16:39 ` Andy Lutomirski
2016-02-25 16:00 ` Matt Fleming
2016-02-17 12:35 ` [PATCH 04/13] efi/arm64: Drop __init annotation from handle_kernel_image() Matt Fleming
2016-02-22 12:14 ` [tip:efi/core] " =?UTF-8?B?dGlwLWJvdCBmb3IgQXJkIEJpZXNoZXV2ZWwgPHRpcGJvdEB6eXRvci5jb20+?=
2016-02-17 12:35 ` [PATCH 05/13] arm64: vmlinux.lds.S: Handle .init.rodata.xxx and .init.bss sections Matt Fleming
2016-02-22 12:14 ` [tip:efi/core] arm64/vmlinux.lds.S: " =?UTF-8?B?dGlwLWJvdCBmb3IgQXJkIEJpZXNoZXV2ZWwgPHRpcGJvdEB6eXRvci5jb20+?=
2016-02-17 12:35 ` [PATCH 06/13] efi/efistub: Prevent __init annotations from being used Matt Fleming
2016-02-22 12:14 ` [tip:efi/core] " =?UTF-8?B?dGlwLWJvdCBmb3IgQXJkIEJpZXNoZXV2ZWwgPHRpcGJvdEB6eXRvci5jb20+?=
2016-02-17 12:36 ` [PATCH 07/13] efi/arm-init: Use read-only early mappings Matt Fleming
2016-02-22 12:15 ` [tip:efi/core] " =?UTF-8?B?dGlwLWJvdCBmb3IgQXJkIEJpZXNoZXV2ZWwgPHRpcGJvdEB6eXRvci5jb20+?=
2016-02-17 12:36 ` [PATCH 08/13] efi/arm: Check for LPAE support before booting a LPAE kernel Matt Fleming
2016-02-22 12:15 ` [tip:efi/core] " =?UTF-8?B?dGlwLWJvdCBmb3IgQXJkIEJpZXNoZXV2ZWwgPHRpcGJvdEB6eXRvci5jb20+?=
2016-02-17 12:36 ` [PATCH 09/13] efi/arm64: Check for h/w support before booting a >4 KB granule kernel Matt Fleming
2016-02-22 12:16 ` [tip:efi/core] efi/arm64: Check for h/w support before booting a >4 KB granular kernel =?UTF-8?B?dGlwLWJvdCBmb3IgQXJkIEJpZXNoZXV2ZWwgPHRpcGJvdEB6eXRvci5jb20+?=
2016-03-06 3:35 ` [PATCH 09/13] efi/arm64: Check for h/w support before booting a >4 KB granule kernel Ard Biesheuvel
2016-03-07 11:02 ` Matt Fleming
2016-03-07 11:05 ` Ard Biesheuvel
2016-02-17 12:36 ` [PATCH 10/13] efi/arm*: Perform hardware compatibility check Matt Fleming
2016-02-22 12:16 ` [tip:efi/core] " =?UTF-8?B?dGlwLWJvdCBmb3IgQXJkIEJpZXNoZXV2ZWwgPHRpcGJvdEB6eXRvci5jb20+?=
2016-02-17 12:36 ` [PATCH 11/13] x86/mm/pageattr: Don't implicitly allow _PAGE_RW in kernel_map_pages_in_pgd() Matt Fleming
2016-02-22 12:16 ` [tip:efi/core] x86/mm/pat: " =?UTF-8?B?dGlwLWJvdCBmb3IgU2FpIFByYW5lZXRoIDx0aXBib3RAenl0b3IuY29tPg==?=
2016-02-17 12:36 ` [PATCH 12/13] x86/efi: Map EFI_MEMORY_{XP,RO} memory region bits to EFI page tables Matt Fleming
2016-02-22 12:17 ` [tip:efi/core] " =?UTF-8?B?dGlwLWJvdCBmb3IgU2FpIFByYW5lZXRoIDx0aXBib3RAenl0b3IuY29tPg==?=
2016-02-17 12:36 ` [PATCH 13/13] x86/efi: Only map kernel text for EFI mixed mode Matt Fleming
2016-02-22 12:17 ` [tip:efi/core] " =?UTF-8?B?dGlwLWJvdCBmb3IgU2FpIFByYW5lZXRoIDx0aXBib3RAenl0b3IuY29tPg==?=
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=1456275002.2781.41.camel@intel.com \
--to=sai.praneeth.prakhya@intel.com \
--cc=akpm@linux-foundation.org \
--cc=ard.biesheuvel@linaro.org \
--cc=bp@alien8.de \
--cc=brgerst@gmail.com \
--cc=dvlasenk@redhat.com \
--cc=hpa@zytor.com \
--cc=hughd@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=luto@amacapital.net \
--cc=matt@codeblueprint.co.uk \
--cc=mcgrof@suse.com \
--cc=mingo@kernel.org \
--cc=peterz@infradead.org \
--cc=ravi.v.shankar@intel.com \
--cc=ricardo.neri@intel.com \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.org \
--cc=toshi.kani@hp.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).