Messages in this thread | | | Date | Sun, 26 Nov 2017 18:41:49 +0100 | From | Borislav Petkov <> | Subject | Re: [PATCH 23/43] x86/mm/kaiser: Introduce user-mapped per-cpu areas |
| |
On Fri, Nov 24, 2017 at 06:23:51PM +0100, Ingo Molnar wrote: > From: Dave Hansen <dave.hansen@linux.intel.com> > > These patches are based on work from a team at Graz University of > Technology posted here: https://github.com/IAIK/KAISER > > The KAISER approach keeps two copies of the page tables: one for running > in the kernel and one for running userspace. But, there are a few > structures that are needed for switching in and out of the kernel and > a good subset of *those* are per-cpu data. > > This patch creates a new kind of per-cpu data that is mapped and
Never say "This patch" in the commit message of a patch. It is tautologically useless.
> can be used no matter which copy of the page tables is active. > Users of this new section will be forthcoming. > > Thanks to Hugh Dickins for cleanups to this code. > > Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com> > Signed-off-by: Thomas Gleixner <tglx@linutronix.de> > Cc: Linus Torvalds <torvalds@linux-foundation.org> > Cc: Peter Zijlstra <peterz@infradead.org> > Cc: daniel.gruss@iaik.tugraz.at > Cc: hughd@google.com > Cc: keescook@google.com > Cc: linux-mm@kvack.org > Cc: luto@kernel.org > Cc: michael.schwarz@iaik.tugraz.at > Cc: moritz.lipp@iaik.tugraz.at > Cc: richard.fellner@student.tugraz.at > Link: https://lkml.kernel.org/r/20171123003444.196CB6DB@viggo.jf.intel.com > Signed-off-by: Ingo Molnar <mingo@kernel.org> > --- > include/asm-generic/vmlinux.lds.h | 7 +++++++ > include/linux/percpu-defs.h | 30 ++++++++++++++++++++++++++++++ > 2 files changed, 37 insertions(+) > > diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h > index bdcd1caae092..e12168936d3f 100644 > --- a/include/asm-generic/vmlinux.lds.h > +++ b/include/asm-generic/vmlinux.lds.h > @@ -826,7 +826,14 @@ > */ > #define PERCPU_INPUT(cacheline) \ > VMLINUX_SYMBOL(__per_cpu_start) = .; \ > + VMLINUX_SYMBOL(__per_cpu_user_mapped_start) = .; \ > *(.data..percpu..first) \ > + . = ALIGN(cacheline); \ > + *(.data..percpu..user_mapped) \ > + *(.data..percpu..user_mapped..shared_aligned) \ > + . = ALIGN(PAGE_SIZE); \ > + *(.data..percpu..user_mapped..page_aligned) \ > + VMLINUX_SYMBOL(__per_cpu_user_mapped_end) = .; \ > . = ALIGN(PAGE_SIZE); \ > *(.data..percpu..page_aligned) \ > . = ALIGN(cacheline); \ > diff --git a/include/linux/percpu-defs.h b/include/linux/percpu-defs.h > index 2d2096ba1cfe..752513674295 100644 > --- a/include/linux/percpu-defs.h > +++ b/include/linux/percpu-defs.h > @@ -35,6 +35,12 @@ > > #endif > > +#ifdef CONFIG_KAISER > +#define USER_MAPPED_SECTION "..user_mapped" > +#else > +#define USER_MAPPED_SECTION "" > +#endif > /* > * Base implementations of per-CPU variable declarations and definitions, where > * the section in which the variable is to be placed is provided by the > @@ -115,6 +121,12 @@ > #define DEFINE_PER_CPU(type, name) \ > DEFINE_PER_CPU_SECTION(type, name, "") > > +#define DECLARE_PER_CPU_USER_MAPPED(type, name) \ > + DECLARE_PER_CPU_SECTION(type, name, USER_MAPPED_SECTION) > + > +#define DEFINE_PER_CPU_USER_MAPPED(type, name) \ > + DEFINE_PER_CPU_SECTION(type, name, USER_MAPPED_SECTION) > + > /* > * Declaration/definition used for per-CPU variables that must come first in > * the set of variables. > @@ -144,6 +156,14 @@ > DEFINE_PER_CPU_SECTION(type, name, PER_CPU_SHARED_ALIGNED_SECTION) \ > ____cacheline_aligned_in_smp > > +#define DECLARE_PER_CPU_SHARED_ALIGNED_USER_MAPPED(type, name) \ > + DECLARE_PER_CPU_SECTION(type, name, USER_MAPPED_SECTION PER_CPU_SHARED_ALIGNED_SECTION) \ > + ____cacheline_aligned_in_smp > + > +#define DEFINE_PER_CPU_SHARED_ALIGNED_USER_MAPPED(type, name) \ > + DEFINE_PER_CPU_SECTION(type, name, USER_MAPPED_SECTION PER_CPU_SHARED_ALIGNED_SECTION) \ > + ____cacheline_aligned_in_smp > + > #define DECLARE_PER_CPU_ALIGNED(type, name) \ > DECLARE_PER_CPU_SECTION(type, name, PER_CPU_ALIGNED_SECTION) \ > ____cacheline_aligned > @@ -162,6 +182,16 @@ > #define DEFINE_PER_CPU_PAGE_ALIGNED(type, name) \ > DEFINE_PER_CPU_SECTION(type, name, "..page_aligned") \ > __aligned(PAGE_SIZE) > +/* > + * Declaration/definition used for per-CPU variables that must be page aligned and need to be mapped in user mode. > + */
WARNING: line over 100 characters #122: FILE: include/linux/percpu-defs.h:186: + * Declaration/definition used for per-CPU variables that must be page aligned and need to be mapped in user mode.
> +#define DECLARE_PER_CPU_PAGE_ALIGNED_USER_MAPPED(type, name) \ > + DECLARE_PER_CPU_SECTION(type, name, USER_MAPPED_SECTION"..page_aligned") \ > + __aligned(PAGE_SIZE) > + > +#define DEFINE_PER_CPU_PAGE_ALIGNED_USER_MAPPED(type, name) \ > + DEFINE_PER_CPU_SECTION(type, name, USER_MAPPED_SECTION"..page_aligned") \ > + __aligned(PAGE_SIZE) > > /* > * Declaration/definition used for per-CPU variables that must be read mostly. > --
With that:
Reviewed-by: Borislav Petkov <bp@suse.de>
-- Regards/Gruss, Boris.
Good mailing practices for 400: avoid top-posting and trim the reply.
| |