From: Dave Hansen <dave.hansen@linux.intel.com>
To: linux-kernel@vger.kernel.org
Cc: linux-mm@kvack.org, Dave Hansen <dave.hansen@linux.intel.com>,
aarcange@redhat.com, luto@kernel.org,
torvalds@linux-foundation.org, keescook@google.com,
hughd@google.com, jgross@suse.com, x86@kernel.org,
namit@vmware.com
Subject: [PATCH 09/11] x86/pti: enable global pages for shared areas
Date: Fri, 23 Mar 2018 10:45:00 -0700 [thread overview]
Message-ID: <20180323174500.64BD3D36@viggo.jf.intel.com> (raw)
In-Reply-To: <20180323174447.55F35636@viggo.jf.intel.com>
From: Dave Hansen <dave.hansen@linux.intel.com>
The entry/exit text and cpu_entry_area are mapped into userspace and
the kernel. But, they are not _PAGE_GLOBAL. This creates unnecessary
TLB misses.
Add the _PAGE_GLOBAL flag for these areas.
Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
Cc: Andrea Arcangeli <aarcange@redhat.com>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Kees Cook <keescook@google.com>
Cc: Hugh Dickins <hughd@google.com>
Cc: Juergen Gross <jgross@suse.com>
Cc: x86@kernel.org
Cc: Nadav Amit <namit@vmware.com>
---
b/arch/x86/mm/cpu_entry_area.c | 10 +++++++++-
b/arch/x86/mm/pti.c | 9 ++++++++-
2 files changed, 17 insertions(+), 2 deletions(-)
diff -puN arch/x86/mm/cpu_entry_area.c~kpti-why-no-global arch/x86/mm/cpu_entry_area.c
--- a/arch/x86/mm/cpu_entry_area.c~kpti-why-no-global 2018-03-21 16:32:00.797192311 -0700
+++ b/arch/x86/mm/cpu_entry_area.c 2018-03-21 16:32:00.802192311 -0700
@@ -27,8 +27,16 @@ EXPORT_SYMBOL(get_cpu_entry_area);
void cea_set_pte(void *cea_vaddr, phys_addr_t pa, pgprot_t flags)
{
unsigned long va = (unsigned long) cea_vaddr;
+ pte_t pte = pfn_pte(pa >> PAGE_SHIFT, flags);
- set_pte_vaddr(va, pfn_pte(pa >> PAGE_SHIFT, flags));
+ /*
+ * The cpu_entry_area is shared between the user and kernel
+ * page tables. All of its ptes can safely be global.
+ */
+ if (boot_cpu_has(X86_FEATURE_PGE))
+ pte = pte_set_flags(pte, _PAGE_GLOBAL);
+
+ set_pte_vaddr(va, pte);
}
static void __init
diff -puN arch/x86/mm/pti.c~kpti-why-no-global arch/x86/mm/pti.c
--- a/arch/x86/mm/pti.c~kpti-why-no-global 2018-03-21 16:32:00.799192311 -0700
+++ b/arch/x86/mm/pti.c 2018-03-21 16:32:00.803192311 -0700
@@ -300,6 +300,13 @@ pti_clone_pmds(unsigned long start, unsi
return;
/*
+ * Setting 'target_pmd' below creates a mapping in both
+ * the user and kernel page tables. It is effectively
+ * global, so set it as global in both copies.
+ */
+ *pmd = pmd_set_flags(*pmd, _PAGE_GLOBAL);
+
+ /*
* Copy the PMD. That is, the kernelmode and usermode
* tables will share the last-level page tables of this
* address range
@@ -348,7 +355,7 @@ static void __init pti_clone_entry_text(
{
pti_clone_pmds((unsigned long) __entry_text_start,
(unsigned long) __irqentry_text_end,
- _PAGE_RW | _PAGE_GLOBAL);
+ _PAGE_RW);
}
/*
_
next prev parent reply other threads:[~2018-03-23 17:47 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-03-23 17:44 [PATCH 00/11] Use global pages with PTI Dave Hansen
2018-03-23 17:44 ` [PATCH 01/11] x86/mm: factor out pageattr _PAGE_GLOBAL setting Dave Hansen
2018-03-23 17:44 ` [PATCH 02/11] x86/mm: undo double _PAGE_PSE clearing Dave Hansen
2018-03-23 17:44 ` [PATCH 03/11] x86/mm: introduce "default" kernel PTE mask Dave Hansen
2018-03-23 17:44 ` [PATCH 04/11] x86/espfix: document use of _PAGE_GLOBAL Dave Hansen
2018-03-23 17:44 ` [PATCH 05/11] x86/mm: do not auto-massage page protections Dave Hansen
2018-03-23 19:15 ` Nadav Amit
2018-03-23 19:26 ` Dave Hansen
2018-03-23 19:26 ` Dave Hansen
2018-03-23 19:34 ` Nadav Amit
2018-03-23 19:38 ` Dave Hansen
2018-03-24 15:10 ` kbuild test robot
2018-03-24 15:10 ` kbuild test robot
2018-03-24 15:21 ` kbuild test robot
2018-03-24 15:21 ` kbuild test robot
2018-03-23 17:44 ` [PATCH 06/11] x86/mm: remove extra filtering in pageattr code Dave Hansen
2018-03-23 17:44 ` [PATCH 07/11] x86/mm: comment _PAGE_GLOBAL mystery Dave Hansen
2018-03-23 17:44 ` [PATCH 08/11] x86/mm: do not forbid _PAGE_RW before init for __ro_after_init Dave Hansen
2018-03-23 17:45 ` Dave Hansen [this message]
2018-03-23 19:12 ` [PATCH 09/11] x86/pti: enable global pages for shared areas Nadav Amit
2018-03-23 19:36 ` Dave Hansen
2018-03-23 17:45 ` [PATCH 10/11] x86/pti: clear _PAGE_GLOBAL for kernel image Dave Hansen
2018-03-23 17:45 ` [PATCH 11/11] x86/pti: leave kernel text global for !PCID Dave Hansen
2018-03-23 18:26 ` [PATCH 00/11] Use global pages with PTI Linus Torvalds
2018-03-24 0:40 ` Dave Hansen
2018-03-24 0:46 ` Linus Torvalds
2018-03-24 0:54 ` Linus Torvalds
2018-03-24 11:05 ` Ingo Molnar
2018-03-27 13:36 ` Thomas Gleixner
2018-03-27 16:32 ` Dave Hansen
2018-03-27 17:51 ` Thomas Gleixner
2018-03-27 20:07 ` Ingo Molnar
2018-03-27 20:19 ` Dave Hansen
2018-03-29 0:17 ` Dave Hansen
2018-03-30 12:09 ` Ingo Molnar
2018-03-30 12:17 ` Ingo Molnar
2018-03-30 20:26 ` Dave Hansen
2018-03-30 20:32 ` Thomas Gleixner
2018-03-30 21:40 ` Dave Hansen
2018-03-31 5:39 ` Ingo Molnar
2018-03-31 18:19 ` Dave Hansen
-- strict thread matches above, loose matches on Subject: below --
2018-04-02 17:27 [PATCH 00/11] [v3] " Dave Hansen
2018-04-02 17:27 ` [PATCH 09/11] x86/pti: enable global pages for shared areas Dave Hansen
2018-04-02 17:56 ` Linus Torvalds
2018-04-02 20:41 ` Dave Hansen
2018-04-04 1:09 [PATCH 00/11] [v4] Use global pages with PTI Dave Hansen
2018-04-04 1:10 ` [PATCH 09/11] x86/pti: enable global pages for shared areas Dave Hansen
2018-04-04 4:45 ` Nadav Amit
2018-04-04 15:52 ` Dave Hansen
2018-04-04 16:09 ` Nadav Amit
2018-04-04 18:14 ` Thomas Gleixner
2018-04-06 20:55 [PATCH 00/11] [v5] Use global pages with PTI Dave Hansen
2018-04-06 20:55 ` [PATCH 09/11] x86/pti: enable global pages for shared areas Dave Hansen
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=20180323174500.64BD3D36@viggo.jf.intel.com \
--to=dave.hansen@linux.intel.com \
--cc=aarcange@redhat.com \
--cc=hughd@google.com \
--cc=jgross@suse.com \
--cc=keescook@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=luto@kernel.org \
--cc=namit@vmware.com \
--cc=torvalds@linux-foundation.org \
--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 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.