On Wed, 20 Dec 2017, Thomas Gleixner wrote:

> Changes since V163:
> 
>   - Moved the cpu entry area out of the fixmap because that caused failures
>     due to fixmap size and cleanup_highmap() zapping fixmap PTEs.
> 
>   - Moved all cpu entry area related code into separate files. The
>     hodgepodge in cpu/common.c was really not appropriate.
> 
>   - Folded Juergens XEN PV fix for vsyscall
> 
>   - Folded Peters ACCESS bit simplification
> 
>   - Cleaned up and fixed dump_pagetables
> 
>   - Added Vlastimils PTI/NOPTI marker for dumpstack
> 
>   - Addressed various minor review comments
> 
>   Diffstat against V163 appended.
> 
> Thanks to everyone who looked and cared!
> 
> It's perfect now because I'm going to have quiet holidays no matter what.

Almost perfect. 0-day is amazing. It unearthed yet more include hell. I'm
not going to repost the whole thing. Find the delta fix below.

I've updated the git tree at:

   git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git WIP.x86/pti

head commit is now: 9b12709513089f4e71190685930e7f9f0d75fee7

The new patch tarball is at:

   https://tglx.de/~tglx/patches-pti-184.tar.bz2

   sha1sum of decompressed tarball: 2dbdfb57cf65a0c1e558ed55747e17d3c8d8adee

Thanks,

        tglx

8<--------------

diff --git a/arch/x86/include/asm/cpu_entry_area.h 
b/arch/x86/include/asm/cpu_entry_area.h
index e05a39029446..4a7884b8dca5 100644
--- a/arch/x86/include/asm/cpu_entry_area.h
+++ b/arch/x86/include/asm/cpu_entry_area.h
@@ -71,13 +71,7 @@ extern void cea_set_pte(void *cea_vaddr, phys_addr_t pa, 
pgprot_t flags);
 #define CPU_ENTRY_AREA_MAP_SIZE                        \
        (CPU_ENTRY_AREA_PER_CPU + CPU_ENTRY_AREA_TOT_SIZE - CPU_ENTRY_AREA_BASE)
 
-static inline struct cpu_entry_area *get_cpu_entry_area(int cpu)
-{
-       unsigned long va = CPU_ENTRY_AREA_PER_CPU + cpu * CPU_ENTRY_AREA_SIZE;
-       BUILD_BUG_ON(sizeof(struct cpu_entry_area) % PAGE_SIZE != 0);
-
-       return (struct cpu_entry_area *) va;
-}
+extern struct cpu_entry_area *get_cpu_entry_area(int cpu);
 
 static inline struct entry_stack *cpu_entry_stack(int cpu)
 {
diff --git a/arch/x86/mm/cpu_entry_area.c b/arch/x86/mm/cpu_entry_area.c
index 66c0d1207243..b5dfb762c64c 100644
--- a/arch/x86/mm/cpu_entry_area.c
+++ b/arch/x86/mm/cpu_entry_area.c
@@ -1,6 +1,8 @@
 // SPDX-License-Identifier: GPL-2.0
 
+#include <linux/spinlock.h>
 #include <linux/percpu.h>
+
 #include <asm/cpu_entry_area.h>
 #include <asm/pgtable.h>
 #include <asm/fixmap.h>
@@ -13,6 +15,15 @@ static DEFINE_PER_CPU_PAGE_ALIGNED(char, exception_stacks
        [(N_EXCEPTION_STACKS - 1) * EXCEPTION_STKSZ + DEBUG_STKSZ]);
 #endif
 
+struct cpu_entry_area *get_cpu_entry_area(int cpu)
+{
+       unsigned long va = CPU_ENTRY_AREA_PER_CPU + cpu * CPU_ENTRY_AREA_SIZE;
+       BUILD_BUG_ON(sizeof(struct cpu_entry_area) % PAGE_SIZE != 0);
+
+       return (struct cpu_entry_area *) va;
+}
+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;

Reply via email to