Andy Lutomirski
e9b7b111e5
x86/irq/64: Print the offending IP in the stack overflow warning
...
commit 4f3789e792 upstream.
In case something goes wrong with unwind (not unlikely in case of
overflow), print the offending IP where we detected the overflow.
Signed-off-by: Andy Lutomirski <luto@kernel.org >
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Reviewed-by: Borislav Petkov <bp@suse.de >
Reviewed-by: Thomas Gleixner <tglx@linutronix.de >
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com >
Cc: Borislav Petkov <bp@alien8.de >
Cc: Borislav Petkov <bpetkov@suse.de >
Cc: Brian Gerst <brgerst@gmail.com >
Cc: Dave Hansen <dave.hansen@intel.com >
Cc: Dave Hansen <dave.hansen@linux.intel.com >
Cc: David Laight <David.Laight@aculab.com >
Cc: Denys Vlasenko <dvlasenk@redhat.com >
Cc: Eduardo Valentin <eduval@amazon.com >
Cc: Greg KH <gregkh@linuxfoundation.org >
Cc: H. Peter Anvin <hpa@zytor.com >
Cc: Josh Poimboeuf <jpoimboe@redhat.com >
Cc: Juergen Gross <jgross@suse.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Rik van Riel <riel@redhat.com >
Cc: Will Deacon <will.deacon@arm.com >
Cc: aliguori@amazon.com
Cc: daniel.gruss@iaik.tugraz.at
Cc: hughd@google.com
Cc: keescook@google.com
Link: https://lkml.kernel.org/r/20171204150605.231677119@linutronix.de
Signed-off-by: Ingo Molnar <mingo@kernel.org >
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2017-12-25 14:26:21 +01:00
Andy Lutomirski
996d087af0
x86/irq: Remove an old outdated comment about context tracking races
...
commit 6669a69260 upstream.
That race has been fixed and code cleaned up for a while now.
Signed-off-by: Andy Lutomirski <luto@kernel.org >
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Reviewed-by: Borislav Petkov <bp@suse.de >
Reviewed-by: Thomas Gleixner <tglx@linutronix.de >
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com >
Cc: Borislav Petkov <bp@alien8.de >
Cc: Borislav Petkov <bpetkov@suse.de >
Cc: Brian Gerst <brgerst@gmail.com >
Cc: Dave Hansen <dave.hansen@intel.com >
Cc: Dave Hansen <dave.hansen@linux.intel.com >
Cc: David Laight <David.Laight@aculab.com >
Cc: Denys Vlasenko <dvlasenk@redhat.com >
Cc: Eduardo Valentin <eduval@amazon.com >
Cc: Greg KH <gregkh@linuxfoundation.org >
Cc: H. Peter Anvin <hpa@zytor.com >
Cc: Josh Poimboeuf <jpoimboe@redhat.com >
Cc: Juergen Gross <jgross@suse.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Rik van Riel <riel@redhat.com >
Cc: Will Deacon <will.deacon@arm.com >
Cc: aliguori@amazon.com
Cc: daniel.gruss@iaik.tugraz.at
Cc: hughd@google.com
Cc: keescook@google.com
Link: https://lkml.kernel.org/r/20171204150605.150551639@linutronix.de
Signed-off-by: Ingo Molnar <mingo@kernel.org >
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2017-12-25 14:26:21 +01:00
Josh Poimboeuf
5209e8ac93
x86/unwinder: Handle stack overflows more gracefully
...
commit b02fcf9ba1 upstream.
There are at least two unwinder bugs hindering the debugging of
stack-overflow crashes:
- It doesn't deal gracefully with the case where the stack overflows and
the stack pointer itself isn't on a valid stack but the
to-be-dereferenced data *is*.
- The ORC oops dump code doesn't know how to print partial pt_regs, for the
case where if we get an interrupt/exception in *early* entry code
before the full pt_regs have been saved.
Fix both issues.
http://lkml.kernel.org/r/20171126024031.uxi4numpbjm5rlbr@treble
Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com >
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Reviewed-by: Borislav Petkov <bpetkov@suse.de >
Cc: Andy Lutomirski <luto@kernel.org >
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com >
Cc: Borislav Petkov <bp@alien8.de >
Cc: Brian Gerst <brgerst@gmail.com >
Cc: Dave Hansen <dave.hansen@intel.com >
Cc: Dave Hansen <dave.hansen@linux.intel.com >
Cc: David Laight <David.Laight@aculab.com >
Cc: Denys Vlasenko <dvlasenk@redhat.com >
Cc: Eduardo Valentin <eduval@amazon.com >
Cc: Greg KH <gregkh@linuxfoundation.org >
Cc: H. Peter Anvin <hpa@zytor.com >
Cc: Juergen Gross <jgross@suse.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Rik van Riel <riel@redhat.com >
Cc: Will Deacon <will.deacon@arm.com >
Cc: aliguori@amazon.com
Cc: daniel.gruss@iaik.tugraz.at
Cc: hughd@google.com
Cc: keescook@google.com
Link: https://lkml.kernel.org/r/20171204150605.071425003@linutronix.de
Signed-off-by: Ingo Molnar <mingo@kernel.org >
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2017-12-25 14:26:21 +01:00
Andy Lutomirski
40ddc692b5
x86/unwinder/orc: Dont bail on stack overflow
...
commit d3a0910401 upstream.
If the stack overflows into a guard page and the ORC unwinder should work
well: by construction, there can't be any meaningful data in the guard page
because no writes to the guard page will have succeeded.
But there is a bug that prevents unwinding from working correctly: if the
starting register state has RSP pointing into a stack guard page, the ORC
unwinder bails out immediately.
Instead of bailing out immediately check whether the next page up is a
valid check page and if so analyze that. As a result the ORC unwinder will
start the unwind.
Tested by intentionally overflowing the task stack. The result is an
accurate call trace instead of a trace consisting purely of '?' entries.
There are a few other bugs that are triggered if the unwinder encounters a
stack overflow after the first step, but they are outside the scope of this
fix.
Signed-off-by: Andy Lutomirski <luto@kernel.org >
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com >
Cc: Borislav Petkov <bp@alien8.de >
Cc: Borislav Petkov <bpetkov@suse.de >
Cc: Brian Gerst <brgerst@gmail.com >
Cc: Dave Hansen <dave.hansen@intel.com >
Cc: Dave Hansen <dave.hansen@linux.intel.com >
Cc: David Laight <David.Laight@aculab.com >
Cc: Denys Vlasenko <dvlasenk@redhat.com >
Cc: Eduardo Valentin <eduval@amazon.com >
Cc: Greg KH <gregkh@linuxfoundation.org >
Cc: H. Peter Anvin <hpa@zytor.com >
Cc: Josh Poimboeuf <jpoimboe@redhat.com >
Cc: Juergen Gross <jgross@suse.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Rik van Riel <riel@redhat.com >
Cc: Will Deacon <will.deacon@arm.com >
Cc: aliguori@amazon.com
Cc: daniel.gruss@iaik.tugraz.at
Cc: hughd@google.com
Cc: keescook@google.com
Link: https://lkml.kernel.org/r/20171204150604.991389777@linutronix.de
Signed-off-by: Ingo Molnar <mingo@kernel.org >
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2017-12-25 14:26:21 +01:00
Boris Ostrovsky
21ddc15fa8
x86/entry/64/paravirt: Use paravirt-safe macro to access eflags
...
commit e17f823453 upstream.
Commit 1d3e53e862 ("x86/entry/64: Refactor IRQ stacks and make them
NMI-safe") added DEBUG_ENTRY_ASSERT_IRQS_OFF macro that acceses eflags
using 'pushfq' instruction when testing for IF bit. On PV Xen guests
looking at IF flag directly will always see it set, resulting in 'ud2'.
Introduce SAVE_FLAGS() macro that will use appropriate save_fl pv op when
running paravirt.
Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com >
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Reviewed-by: Juergen Gross <jgross@suse.com >
Cc: Andy Lutomirski <luto@kernel.org >
Cc: Borislav Petkov <bp@alien8.de >
Cc: Borislav Petkov <bpetkov@suse.de >
Cc: Brian Gerst <brgerst@gmail.com >
Cc: Dave Hansen <dave.hansen@intel.com >
Cc: Dave Hansen <dave.hansen@linux.intel.com >
Cc: David Laight <David.Laight@aculab.com >
Cc: Denys Vlasenko <dvlasenk@redhat.com >
Cc: Eduardo Valentin <eduval@amazon.com >
Cc: Greg KH <gregkh@linuxfoundation.org >
Cc: H. Peter Anvin <hpa@zytor.com >
Cc: Josh Poimboeuf <jpoimboe@redhat.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Rik van Riel <riel@redhat.com >
Cc: Will Deacon <will.deacon@arm.com >
Cc: aliguori@amazon.com
Cc: daniel.gruss@iaik.tugraz.at
Cc: hughd@google.com
Cc: keescook@google.com
Cc: xen-devel@lists.xenproject.org
Link: https://lkml.kernel.org/r/20171204150604.899457242@linutronix.de
Signed-off-by: Ingo Molnar <mingo@kernel.org >
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2017-12-25 14:26:21 +01:00
Andrey Ryabinin
d455b71e73
x86/mm/kasan: Don't use vmemmap_populate() to initialize shadow
...
commit 2aeb07365b upstream.
[ Note, this is a Git cherry-pick of the following commit:
d17a1d97dc : ("x86/mm/kasan: don't use vmemmap_populate() to initialize shadow")
... for easier x86 PTI code testing and back-porting. ]
The KASAN shadow is currently mapped using vmemmap_populate() since that
provides a semi-convenient way to map pages into init_top_pgt. However,
since that no longer zeroes the mapped pages, it is not suitable for
KASAN, which requires zeroed shadow memory.
Add kasan_populate_shadow() interface and use it instead of
vmemmap_populate(). Besides, this allows us to take advantage of
gigantic pages and use them to populate the shadow, which should save us
some memory wasted on page tables and reduce TLB pressure.
Link: http://lkml.kernel.org/r/20171103185147.2688-2-pasha.tatashin@oracle.com
Signed-off-by: Andrey Ryabinin <aryabinin@virtuozzo.com >
Signed-off-by: Pavel Tatashin <pasha.tatashin@oracle.com >
Cc: Andy Lutomirski <luto@kernel.org >
Cc: Steven Sistare <steven.sistare@oracle.com >
Cc: Daniel Jordan <daniel.m.jordan@oracle.com >
Cc: Bob Picco <bob.picco@oracle.com >
Cc: Michal Hocko <mhocko@suse.com >
Cc: Alexander Potapenko <glider@google.com >
Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org >
Cc: Catalin Marinas <catalin.marinas@arm.com >
Cc: Christian Borntraeger <borntraeger@de.ibm.com >
Cc: David S. Miller <davem@davemloft.net >
Cc: Dmitry Vyukov <dvyukov@google.com >
Cc: Heiko Carstens <heiko.carstens@de.ibm.com >
Cc: "H. Peter Anvin" <hpa@zytor.com >
Cc: Ingo Molnar <mingo@redhat.com >
Cc: Mark Rutland <mark.rutland@arm.com >
Cc: Matthew Wilcox <willy@infradead.org >
Cc: Mel Gorman <mgorman@techsingularity.net >
Cc: Michal Hocko <mhocko@kernel.org >
Cc: Sam Ravnborg <sam@ravnborg.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Cc: Will Deacon <will.deacon@arm.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
Signed-off-by: Ingo Molnar <mingo@kernel.org >
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2017-12-25 14:26:21 +01:00
Will Deacon
5383f45db3
locking/barriers: Convert users of lockless_dereference() to READ_ONCE()
...
commit 3382290ed2 upstream.
[ Note, this is a Git cherry-pick of the following commit:
506458efaf ("locking/barriers: Convert users of lockless_dereference() to READ_ONCE()")
... for easier x86 PTI code testing and back-porting. ]
READ_ONCE() now has an implicit smp_read_barrier_depends() call, so it
can be used instead of lockless_dereference() without any change in
semantics.
Signed-off-by: Will Deacon <will.deacon@arm.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Link: http://lkml.kernel.org/r/1508840570-22169-4-git-send-email-will.deacon@arm.com
Signed-off-by: Ingo Molnar <mingo@kernel.org >
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2017-12-25 14:26:21 +01:00
Will Deacon
1aedecaf12
locking/barriers: Add implicit smp_read_barrier_depends() to READ_ONCE()
...
commit c2bc66082e upstream.
[ Note, this is a Git cherry-pick of the following commit:
76ebbe78f7 ("locking/barriers: Add implicit smp_read_barrier_depends() to READ_ONCE()")
... for easier x86 PTI code testing and back-porting. ]
In preparation for the removal of lockless_dereference(), which is the
same as READ_ONCE() on all architectures other than Alpha, add an
implicit smp_read_barrier_depends() to READ_ONCE() so that it can be
used to head dependency chains on all architectures.
Signed-off-by: Will Deacon <will.deacon@arm.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Link: http://lkml.kernel.org/r/1508840570-22169-3-git-send-email-will.deacon@arm.com
Signed-off-by: Ingo Molnar <mingo@kernel.org >
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2017-12-25 14:26:21 +01:00
Daniel Borkmann
065060cdd3
bpf: fix build issues on um due to mising bpf_perf_event.h
...
commit ab95477e7c upstream.
[ Note, this is a Git cherry-pick of the following commit:
a23f06f06d ("bpf: fix build issues on um due to mising bpf_perf_event.h")
... for easier x86 PTI code testing and back-porting. ]
Since c895f6f703 ("bpf: correct broken uapi for
BPF_PROG_TYPE_PERF_EVENT program type") um (uml) won't build
on i386 or x86_64:
[...]
CC init/main.o
In file included from ../include/linux/perf_event.h:18:0,
from ../include/linux/trace_events.h:10,
from ../include/trace/syscall.h:7,
from ../include/linux/syscalls.h:82,
from ../init/main.c:20:
../include/uapi/linux/bpf_perf_event.h:11:32: fatal error:
asm/bpf_perf_event.h: No such file or directory #include
<asm/bpf_perf_event.h>
[...]
Lets add missing bpf_perf_event.h also to um arch. This seems
to be the only one still missing.
Fixes: c895f6f703 ("bpf: correct broken uapi for BPF_PROG_TYPE_PERF_EVENT program type")
Reported-by: Randy Dunlap <rdunlap@infradead.org >
Suggested-by: Richard Weinberger <richard@sigma-star.at >
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net >
Tested-by: Randy Dunlap <rdunlap@infradead.org >
Cc: Hendrik Brueckner <brueckner@linux.vnet.ibm.com >
Cc: Richard Weinberger <richard@sigma-star.at >
Acked-by: Alexei Starovoitov <ast@kernel.org >
Acked-by: Richard Weinberger <richard@nod.at >
Signed-off-by: Alexei Starovoitov <ast@kernel.org >
Signed-off-by: Ingo Molnar <mingo@kernel.org >
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2017-12-25 14:26:20 +01:00
Andi Kleen
2d8c24ed93
perf/x86: Enable free running PEBS for REGS_USER/INTR
...
commit 2fe1bc1f50 upstream.
[ Note, this is a Git cherry-pick of the following commit:
a47ba4d77e ("perf/x86: Enable free running PEBS for REGS_USER/INTR")
... for easier x86 PTI code testing and back-porting. ]
Currently free running PEBS is disabled when user or interrupt
registers are requested. Most of the registers are actually
available in the PEBS record and can be supported.
So we just need to check for the supported registers and then
allow it: it is all except for the segment register.
For user registers this only works when the counter is limited
to ring 3 only, so this also needs to be checked.
Signed-off-by: Andi Kleen <ak@linux.intel.com >
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Link: http://lkml.kernel.org/r/20170831214630.21892-1-andi@firstfloor.org
Signed-off-by: Ingo Molnar <mingo@kernel.org >
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2017-12-25 14:26:20 +01:00
Rudolf Marek
e918424231
x86: Make X86_BUG_FXSAVE_LEAK detectable in CPUID on AMD
...
commit f2dbad36c5 upstream.
[ Note, this is a Git cherry-pick of the following commit:
2b67799bdf25 ("x86: Make X86_BUG_FXSAVE_LEAK detectable in CPUID on AMD")
... for easier x86 PTI code testing and back-porting. ]
The latest AMD AMD64 Architecture Programmer's Manual
adds a CPUID feature XSaveErPtr (CPUID_Fn80000008_EBX[2]).
If this feature is set, the FXSAVE, XSAVE, FXSAVEOPT, XSAVEC, XSAVES
/ FXRSTOR, XRSTOR, XRSTORS always save/restore error pointers,
thus making the X86_BUG_FXSAVE_LEAK workaround obsolete on such CPUs.
Signed-Off-By: Rudolf Marek <r.marek@assembler.cz >
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Reviewed-by: Borislav Petkov <bp@suse.de >
Tested-by: Borislav Petkov <bp@suse.de >
Cc: Andy Lutomirski <luto@amacapital.net >
Link: https://lkml.kernel.org/r/bdcebe90-62c5-1f05-083c-eba7f08b2540@assembler.cz
Signed-off-by: Ingo Molnar <mingo@kernel.org >
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2017-12-25 14:26:20 +01:00
Ricardo Neri
c6e38628af
x86/cpufeature: Add User-Mode Instruction Prevention definitions
...
commit a8b4db562e upstream.
[ Note, this is a Git cherry-pick of the following commit: (limited to the cpufeatures.h file)
3522c2a6a4 ("x86/cpufeature: Add User-Mode Instruction Prevention definitions")
... for easier x86 PTI code testing and back-porting. ]
User-Mode Instruction Prevention is a security feature present in new
Intel processors that, when set, prevents the execution of a subset of
instructions if such instructions are executed in user mode (CPL > 0).
Attempting to execute such instructions causes a general protection
exception.
The subset of instructions comprises:
* SGDT - Store Global Descriptor Table
* SIDT - Store Interrupt Descriptor Table
* SLDT - Store Local Descriptor Table
* SMSW - Store Machine Status Word
* STR - Store Task Register
This feature is also added to the list of disabled-features to allow
a cleaner handling of build-time configuration.
Signed-off-by: Ricardo Neri <ricardo.neri-calderon@linux.intel.com >
Reviewed-by: Thomas Gleixner <tglx@linutronix.de >
Reviewed-by: Borislav Petkov <bp@suse.de >
Cc: Andrew Morton <akpm@linux-foundation.org >
Cc: Andy Lutomirski <luto@kernel.org >
Cc: Borislav Petkov <bp@alien8.de >
Cc: Brian Gerst <brgerst@gmail.com >
Cc: Chen Yucong <slaoub@gmail.com >
Cc: Chris Metcalf <cmetcalf@mellanox.com >
Cc: Dave Hansen <dave.hansen@linux.intel.com >
Cc: Denys Vlasenko <dvlasenk@redhat.com >
Cc: Fenghua Yu <fenghua.yu@intel.com >
Cc: H. Peter Anvin <hpa@zytor.com >
Cc: Huang Rui <ray.huang@amd.com >
Cc: Jiri Slaby <jslaby@suse.cz >
Cc: Jonathan Corbet <corbet@lwn.net >
Cc: Josh Poimboeuf <jpoimboe@redhat.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Masami Hiramatsu <mhiramat@kernel.org >
Cc: Michael S. Tsirkin <mst@redhat.com >
Cc: Paolo Bonzini <pbonzini@redhat.com >
Cc: Paul Gortmaker <paul.gortmaker@windriver.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Ravi V. Shankar <ravi.v.shankar@intel.com >
Cc: Shuah Khan <shuah@kernel.org >
Cc: Tony Luck <tony.luck@intel.com >
Cc: Vlastimil Babka <vbabka@suse.cz >
Cc: ricardo.neri@intel.com
Link: http://lkml.kernel.org/r/1509935277-22138-7-git-send-email-ricardo.neri-calderon@linux.intel.com
Signed-off-by: Ingo Molnar <mingo@kernel.org >
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2017-12-25 14:26:20 +01:00
Ingo Molnar
330a4f53bb
drivers/misc/intel/pti: Rename the header file to free up the namespace
...
commit 1784f9144b upstream.
We'd like to use the 'PTI' acronym for 'Page Table Isolation' - free up the
namespace by renaming the <linux/pti.h> driver header to <linux/intel-pti.h>.
(Also standardize the header guard name while at it.)
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Cc: J Freyensee <james_p_freyensee@linux.intel.com >
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org >
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2017-12-25 14:26:20 +01:00
Juergen Gross
399bbc9bb6
x86/virt: Add enum for hypervisors to replace x86_hyper
...
commit 03b2a320b1 upstream.
The x86_hyper pointer is only used for checking whether a virtual
device is supporting the hypervisor the system is running on.
Use an enum for that purpose instead and drop the x86_hyper pointer.
Signed-off-by: Juergen Gross <jgross@suse.com >
Acked-by: Thomas Gleixner <tglx@linutronix.de >
Acked-by: Xavier Deguillard <xdeguillard@vmware.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: akataria@vmware.com
Cc: arnd@arndb.de
Cc: boris.ostrovsky@oracle.com
Cc: devel@linuxdriverproject.org
Cc: dmitry.torokhov@gmail.com
Cc: gregkh@linuxfoundation.org
Cc: haiyangz@microsoft.com
Cc: kvm@vger.kernel.org
Cc: kys@microsoft.com
Cc: linux-graphics-maintainer@vmware.com
Cc: linux-input@vger.kernel.org
Cc: moltmann@vmware.com
Cc: pbonzini@redhat.com
Cc: pv-drivers@vmware.com
Cc: rkrcmar@redhat.com
Cc: sthemmin@microsoft.com
Cc: virtualization@lists.linux-foundation.org
Cc: xen-devel@lists.xenproject.org
Link: http://lkml.kernel.org/r/20171109132739.23465-3-jgross@suse.com
Signed-off-by: Ingo Molnar <mingo@kernel.org >
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2017-12-25 14:26:20 +01:00
Juergen Gross
04d26709b1
x86/virt, x86/platform: Merge 'struct x86_hyper' into 'struct x86_platform' and 'struct x86_init'
...
commit f72e38e8ec upstream.
Instead of x86_hyper being either NULL on bare metal or a pointer to a
struct hypervisor_x86 in case of the kernel running as a guest merge
the struct into x86_platform and x86_init.
This will remove the need for wrappers making it hard to find out what
is being called. With dummy functions added for all callbacks testing
for a NULL function pointer can be removed, too.
Suggested-by: Ingo Molnar <mingo@kernel.org >
Signed-off-by: Juergen Gross <jgross@suse.com >
Acked-by: Thomas Gleixner <tglx@linutronix.de >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: akataria@vmware.com
Cc: boris.ostrovsky@oracle.com
Cc: devel@linuxdriverproject.org
Cc: haiyangz@microsoft.com
Cc: kvm@vger.kernel.org
Cc: kys@microsoft.com
Cc: pbonzini@redhat.com
Cc: rkrcmar@redhat.com
Cc: rusty@rustcorp.com.au
Cc: sthemmin@microsoft.com
Cc: virtualization@lists.linux-foundation.org
Cc: xen-devel@lists.xenproject.org
Link: http://lkml.kernel.org/r/20171109132739.23465-2-jgross@suse.com
Signed-off-by: Ingo Molnar <mingo@kernel.org >
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2017-12-25 14:26:20 +01:00
James Morse
99aee22dca
ACPI / APEI: Replace ioremap_page_range() with fixmap
...
commit 4f89fa286f upstream.
Replace ghes_io{re,un}map_pfn_{nmi,irq}()s use of ioremap_page_range()
with __set_fixmap() as ioremap_page_range() may sleep to allocate a new
level of page-table, even if its passed an existing final-address to
use in the mapping.
The GHES driver can only be enabled for architectures that select
HAVE_ACPI_APEI: Add fixmap entries to both x86 and arm64.
clear_fixmap() does the TLB invalidation in __set_fixmap() for arm64
and __set_pte_vaddr() for x86. In each case its the same as the
respective arch_apei_flush_tlb_one().
Reported-by: Fengguang Wu <fengguang.wu@intel.com >
Suggested-by: Linus Torvalds <torvalds@linux-foundation.org >
Signed-off-by: James Morse <james.morse@arm.com >
Reviewed-by: Borislav Petkov <bp@suse.de >
Tested-by: Tyler Baicar <tbaicar@codeaurora.org >
Tested-by: Toshi Kani <toshi.kani@hpe.com >
[ For the arm64 bits: ]
Acked-by: Will Deacon <will.deacon@arm.com >
[ For the x86 bits: ]
Acked-by: Ingo Molnar <mingo@kernel.org >
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com >
Cc: All applicable <stable@vger.kernel.org >
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2017-12-25 14:26:20 +01:00
Andy Lutomirski
4a464a66db
selftests/x86/ldt_gdt: Run most existing LDT test cases against the GDT as well
...
commit adedf2893c upstream.
Now that the main test infrastructure supports the GDT, run tests
that will pass the kernel's GDT permission tests against the GDT.
Signed-off-by: Andy Lutomirski <luto@kernel.org >
Cc: Borislav Petkov <bpetkov@suse.de >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Link: http://lkml.kernel.org/r/686a1eda63414da38fcecc2412db8dba1ae40581.1509794321.git.luto@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org >
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2017-12-25 14:26:19 +01:00
Andy Lutomirski
46e6a15b40
selftests/x86/ldt_gdt: Add infrastructure to test set_thread_area()
...
commit d744dcad39 upstream.
Much of the test design could apply to set_thread_area() (i.e. GDT),
not just modify_ldt(). Add set_thread_area() to the
install_valid_mode() helper.
Signed-off-by: Andy Lutomirski <luto@kernel.org >
Cc: Borislav Petkov <bpetkov@suse.de >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Link: http://lkml.kernel.org/r/02c23f8fba5547007f741dc24c3926e5284ede02.1509794321.git.luto@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org >
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2017-12-25 14:26:19 +01:00
Ingo Molnar
d9eb267780
x86/cpufeatures: Fix various details in the feature definitions
...
commit f3a624e901 upstream.
Kept this commit separate from the re-tabulation changes, to make
the changes easier to review:
- add better explanation for entries with no explanation
- fix/enhance the text of some of the entries
- fix the vertical alignment of some of the feature number definitions
- fix inconsistent capitalization
- ... and lots of other small details
i.e. make it all more of a coherent unit, instead of a patchwork of years of additions.
Cc: Andrew Morton <akpm@linux-foundation.org >
Cc: Andy Lutomirski <luto@amacapital.net >
Cc: Andy Lutomirski <luto@kernel.org >
Cc: Borislav Petkov <bp@alien8.de >
Cc: Brian Gerst <brgerst@gmail.com >
Cc: Denys Vlasenko <dvlasenk@redhat.com >
Cc: Josh Poimboeuf <jpoimboe@redhat.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Link: http://lkml.kernel.org/r/20171031121723.28524-4-mingo@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org >
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2017-12-25 14:26:19 +01:00
Ingo Molnar
47af9e68f3
x86/cpufeatures: Re-tabulate the X86_FEATURE definitions
...
commit acbc845ffe upstream.
Over the years asm/cpufeatures.h has become somewhat of a mess: the original
tabulation style was too narrow, while x86 feature names also kept growing
in length, creating frequent field width overflows.
Re-tabulate it to make it wider and easier to read/modify. Also harmonize
the tabulation of the other defines in this file to match it.
Cc: Andrew Morton <akpm@linux-foundation.org >
Cc: Andy Lutomirski <luto@amacapital.net >
Cc: Andy Lutomirski <luto@kernel.org >
Cc: Borislav Petkov <bp@alien8.de >
Cc: Brian Gerst <brgerst@gmail.com >
Cc: Denys Vlasenko <dvlasenk@redhat.com >
Cc: Josh Poimboeuf <jpoimboe@redhat.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Link: http://lkml.kernel.org/r/20171031121723.28524-3-mingo@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org >
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2017-12-25 14:26:19 +01:00
Borislav Petkov
64766453be
x86/mm: Define _PAGE_TABLE using _KERNPG_TABLE
...
commit c7da092a1f upstream.
... so that the difference is obvious.
No functionality change.
Signed-off-by: Borislav Petkov <bp@suse.de >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Link: http://lkml.kernel.org/r/20171103102028.20284-1-bp@alien8.de
Signed-off-by: Ingo Molnar <mingo@kernel.org >
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2017-12-25 14:26:19 +01:00
Thomas Gleixner
c1ffb6aefb
bitops: Revert cbe9637502 ("bitops: Add clear/set_bit32() to linux/bitops.h")
...
commit 1943dc07b4 upstream.
These ops are not endian safe and may break on architectures which have
aligment requirements.
Reverts: cbe9637502 ("bitops: Add clear/set_bit32() to linux/bitops.h")
Reported-by: Peter Zijlstra <peterz@infradead.org >
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: Andi Kleen <ak@linux.intel.com >
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2017-12-25 14:26:19 +01:00
Thomas Gleixner
3243ae9292
x86/cpuid: Replace set/clear_bit32()
...
commit 06dd688ddd upstream.
Peter pointed out that the set/clear_bit32() variants are broken in various
aspects.
Replace them with open coded set/clear_bit() and type cast
cpu_info::x86_capability as it's done in all other places throughout x86.
Fixes: 0b00de857a ("x86/cpuid: Add generic table for CPUID dependencies")
Reported-by: Peter Ziljstra <peterz@infradead.org >
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: Andi Kleen <ak@linux.intel.com >
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2017-12-25 14:26:19 +01:00
Borislav Petkov
b36c2c3ab3
x86/entry/64: Shorten TEST instructions
...
commit 1e4c4f610f upstream.
Convert TESTL to TESTB and save 3 bytes per callsite.
No functionality change.
Signed-off-by: Borislav Petkov <bp@suse.de >
Cc: Andy Lutomirski <luto@kernel.org >
Cc: Brian Gerst <brgerst@gmail.com >
Cc: Dave Hansen <dave.hansen@intel.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Link: http://lkml.kernel.org/r/20171102120926.4srwerqrr7g72e2k@pd.tnic
Signed-off-by: Ingo Molnar <mingo@kernel.org >
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2017-12-25 14:26:19 +01:00
Andy Lutomirski
35c1d57e63
x86/traps: Use a new on_thread_stack() helper to clean up an assertion
...
commit 3383642c2f upstream.
Let's keep the stack-related logic together rather than open-coding
a comparison in an assertion in the traps code.
Signed-off-by: Andy Lutomirski <luto@kernel.org >
Reviewed-by: Borislav Petkov <bp@suse.de >
Cc: Borislav Petkov <bpetkov@suse.de >
Cc: Brian Gerst <brgerst@gmail.com >
Cc: Dave Hansen <dave.hansen@intel.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Link: http://lkml.kernel.org/r/856b15bee1f55017b8f79d3758b0d51c48a08cf8.1509609304.git.luto@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org >
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2017-12-25 14:26:19 +01:00
Andy Lutomirski
c6f563cd13
x86/entry/64: Remove thread_struct::sp0
...
commit d375cf1530 upstream.
On x86_64, we can easily calculate sp0 when needed instead of
storing it in thread_struct.
On x86_32, a similar cleanup would be possible, but it would require
cleaning up the vm86 code first, and that can wait for a later
cleanup series.
Signed-off-by: Andy Lutomirski <luto@kernel.org >
Cc: Borislav Petkov <bpetkov@suse.de >
Cc: Brian Gerst <brgerst@gmail.com >
Cc: Dave Hansen <dave.hansen@intel.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Link: http://lkml.kernel.org/r/719cd9c66c548c4350d98a90f050aee8b17f8919.1509609304.git.luto@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org >
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2017-12-25 14:26:18 +01:00
Andy Lutomirski
266a0b1917
x86/entry/32: Fix cpu_current_top_of_stack initialization at boot
...
commit cd493a6deb upstream.
cpu_current_top_of_stack's initialization forgot about
TOP_OF_KERNEL_STACK_PADDING. This bug didn't matter because the
idle threads never enter user mode.
Signed-off-by: Andy Lutomirski <luto@kernel.org >
Reviewed-by: Borislav Petkov <bp@suse.de >
Cc: Borislav Petkov <bpetkov@suse.de >
Cc: Brian Gerst <brgerst@gmail.com >
Cc: Dave Hansen <dave.hansen@intel.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Link: http://lkml.kernel.org/r/e5e370a7e6e4fddd1c4e4cf619765d96bb874b21.1509609304.git.luto@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org >
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2017-12-25 14:26:18 +01:00
Andy Lutomirski
c30eb760e3
x86/entry/64: Remove all remaining direct thread_struct::sp0 reads
...
commit 46f5a10a72 upstream.
The only remaining readers in context switch code or vm86(), and
they all just want to update TSS.sp0 to match the current task.
Replace them all with a new helper update_sp0().
Signed-off-by: Andy Lutomirski <luto@kernel.org >
Reviewed-by: Borislav Petkov <bp@suse.de >
Cc: Borislav Petkov <bpetkov@suse.de >
Cc: Brian Gerst <brgerst@gmail.com >
Cc: Dave Hansen <dave.hansen@intel.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Link: http://lkml.kernel.org/r/2d231687f4ff288c9d9e98d7861b7df374246ac3.1509609304.git.luto@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org >
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2017-12-25 14:26:18 +01:00
Andy Lutomirski
71d7244efb
x86/entry/64: Stop initializing TSS.sp0 at boot
...
commit 20bb83443e upstream.
In my quest to get rid of thread_struct::sp0, I want to clean up or
remove all of its readers. Two of them are in cpu_init() (32-bit and
64-bit), and they aren't needed. This is because we never enter
userspace at all on the threads that CPUs are initialized in.
Poison the initial TSS.sp0 and stop initializing it on CPU init.
The comment text mostly comes from Dave Hansen. Thanks!
Signed-off-by: Andy Lutomirski <luto@kernel.org >
Cc: Borislav Petkov <bpetkov@suse.de >
Cc: Brian Gerst <brgerst@gmail.com >
Cc: Dave Hansen <dave.hansen@intel.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Link: http://lkml.kernel.org/r/ee4a00540ad28c6cff475fbcc7769a4460acc861.1509609304.git.luto@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org >
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2017-12-25 14:26:18 +01:00
Andy Lutomirski
0917dd6e7a
x86/xen/64, x86/entry/64: Clean up SP code in cpu_initialize_context()
...
commit f16b3da1dc upstream.
I'm removing thread_struct::sp0, and Xen's usage of it is slightly
dubious and unnecessary. Use appropriate helpers instead.
While we're at at, reorder the code slightly to make it more obvious
what's going on.
Signed-off-by: Andy Lutomirski <luto@kernel.org >
Reviewed-by: Juergen Gross <jgross@suse.com >
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com >
Cc: Borislav Petkov <bpetkov@suse.de >
Cc: Brian Gerst <brgerst@gmail.com >
Cc: Dave Hansen <dave.hansen@intel.com >
Cc: Juergen Gross <jgross@suse.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Link: http://lkml.kernel.org/r/d5b9a3da2b47c68325bd2bbe8f82d9554dee0d0f.1509609304.git.luto@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org >
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2017-12-25 14:26:18 +01:00
Andy Lutomirski
f576136bc8
x86/entry: Add task_top_of_stack() to find the top of a task's stack
...
commit 3500130b84 upstream.
This will let us get rid of a few places that hardcode accesses to
thread.sp0.
Signed-off-by: Andy Lutomirski <luto@kernel.org >
Cc: Borislav Petkov <bpetkov@suse.de >
Cc: Brian Gerst <brgerst@gmail.com >
Cc: Dave Hansen <dave.hansen@intel.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Link: http://lkml.kernel.org/r/b49b3f95a8ff858c40c9b0f5b32be0355324327d.1509609304.git.luto@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org >
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2017-12-25 14:26:18 +01:00
Andy Lutomirski
e37558449a
x86/entry/64: Pass SP0 directly to load_sp0()
...
commit da51da189a upstream.
load_sp0() had an odd signature:
void load_sp0(struct tss_struct *tss, struct thread_struct *thread);
Simplify it to:
void load_sp0(unsigned long sp0);
Also simplify a few get_cpu()/put_cpu() sequences to
preempt_disable()/preempt_enable().
Signed-off-by: Andy Lutomirski <luto@kernel.org >
Reviewed-by: Borislav Petkov <bp@suse.de >
Cc: Borislav Petkov <bpetkov@suse.de >
Cc: Brian Gerst <brgerst@gmail.com >
Cc: Dave Hansen <dave.hansen@intel.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Link: http://lkml.kernel.org/r/2655d8b42ed940aa384fe18ee1129bbbcf730a08.1509609304.git.luto@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org >
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2017-12-25 14:26:18 +01:00
Andy Lutomirski
ebef3548d5
x86/entry/32: Pull the MSR_IA32_SYSENTER_CS update code out of native_load_sp0()
...
commit bd7dc5a6af upstream.
This causes the MSR_IA32_SYSENTER_CS write to move out of the
paravirt callback. This shouldn't affect Xen PV: Xen already ignores
MSR_IA32_SYSENTER_ESP writes. In any event, Xen doesn't support
vm86() in a useful way.
Note to any potential backporters: This patch won't break lguest, as
lguest didn't have any SYSENTER support at all.
Signed-off-by: Andy Lutomirski <luto@kernel.org >
Cc: Borislav Petkov <bpetkov@suse.de >
Cc: Brian Gerst <brgerst@gmail.com >
Cc: Dave Hansen <dave.hansen@intel.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Link: http://lkml.kernel.org/r/75cf09fe03ae778532d0ca6c65aa58e66bc2f90c.1509609304.git.luto@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org >
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2017-12-25 14:26:18 +01:00
Andy Lutomirski
6ff096cf2b
x86/entry/64: De-Xen-ify our NMI code
...
commit 929bacec21 upstream.
Xen PV is fundamentally incompatible with our fancy NMI code: it
doesn't use IST at all, and Xen entries clobber two stack slots
below the hardware frame.
Drop Xen PV support from our NMI code entirely.
Signed-off-by: Andy Lutomirski <luto@kernel.org >
Reviewed-by: Borislav Petkov <bp@suse.de >
Acked-by: Juergen Gross <jgross@suse.com >
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com >
Cc: Borislav Petkov <bpetkov@suse.de >
Cc: Brian Gerst <brgerst@gmail.com >
Cc: Dave Hansen <dave.hansen@intel.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Link: http://lkml.kernel.org/r/bfbe711b5ae03f672f8848999a8eb2711efc7f98.1509609304.git.luto@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org >
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2017-12-25 14:26:17 +01:00
Juergen Gross
f53f7a3f01
xen, x86/entry/64: Add xen NMI trap entry
...
commit 43e4111086 upstream.
Instead of trying to execute any NMI via the bare metal's NMI trap
handler use a Xen specific one for PV domains, like we do for e.g.
debug traps. As in a PV domain the NMI is handled via the normal
kernel stack this is the correct thing to do.
This will enable us to get rid of the very fragile and questionable
dependencies between the bare metal NMI handler and Xen assumptions
believed to be broken anyway.
Signed-off-by: Juergen Gross <jgross@suse.com >
Signed-off-by: Andy Lutomirski <luto@kernel.org >
Cc: Borislav Petkov <bpetkov@suse.de >
Cc: Brian Gerst <brgerst@gmail.com >
Cc: Dave Hansen <dave.hansen@intel.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Link: http://lkml.kernel.org/r/5baf5c0528d58402441550c5770b98e7961e7680.1509609304.git.luto@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org >
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2017-12-25 14:26:17 +01:00
Andy Lutomirski
8d50dee92f
x86/entry/64: Remove the RESTORE_..._REGS infrastructure
...
commit c39858de69 upstream.
All users of RESTORE_EXTRA_REGS, RESTORE_C_REGS and such, and
REMOVE_PT_GPREGS_FROM_STACK are gone. Delete the macros.
Signed-off-by: Andy Lutomirski <luto@kernel.org >
Cc: Borislav Petkov <bpetkov@suse.de >
Cc: Brian Gerst <brgerst@gmail.com >
Cc: Dave Hansen <dave.hansen@intel.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Link: http://lkml.kernel.org/r/c32672f6e47c561893316d48e06c7656b1039a36.1509609304.git.luto@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org >
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2017-12-25 14:26:17 +01:00
Andy Lutomirski
2550871499
x86/entry/64: Use POP instead of MOV to restore regs on NMI return
...
commit 471ee48322 upstream.
This gets rid of the last user of the old RESTORE_..._REGS infrastructure.
Signed-off-by: Andy Lutomirski <luto@kernel.org >
Cc: Borislav Petkov <bpetkov@suse.de >
Cc: Brian Gerst <brgerst@gmail.com >
Cc: Dave Hansen <dave.hansen@intel.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Link: http://lkml.kernel.org/r/652a260f17a160789bc6a41d997f98249b73e2ab.1509609304.git.luto@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org >
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2017-12-25 14:26:17 +01:00
Andy Lutomirski
e7273aae13
x86/entry/64: Merge the fast and slow SYSRET paths
...
commit a512210643 upstream.
They did almost the same thing. Remove a bunch of pointless
instructions (mostly hidden in macros) and reduce cognitive load by
merging them.
Signed-off-by: Andy Lutomirski <luto@kernel.org >
Cc: Borislav Petkov <bpetkov@suse.de >
Cc: Brian Gerst <brgerst@gmail.com >
Cc: Dave Hansen <dave.hansen@intel.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Link: http://lkml.kernel.org/r/1204e20233fcab9130a1ba80b3b1879b5db3fc1f.1509609304.git.luto@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org >
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2017-12-25 14:26:17 +01:00
Andy Lutomirski
673b1522c6
x86/entry/64: Use pop instead of movq in syscall_return_via_sysret
...
commit 4fbb39108f upstream.
Saves 64 bytes.
Signed-off-by: Andy Lutomirski <luto@kernel.org >
Reviewed-by: Borislav Petkov <bp@suse.de >
Cc: Borislav Petkov <bpetkov@suse.de >
Cc: Brian Gerst <brgerst@gmail.com >
Cc: Dave Hansen <dave.hansen@intel.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Link: http://lkml.kernel.org/r/6609b7f74ab31c36604ad746e019ea8495aec76c.1509609304.git.luto@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org >
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2017-12-25 14:26:17 +01:00
Andy Lutomirski
b774233bcd
x86/entry/64: Shrink paranoid_exit_restore and make labels local
...
commit e53178328c upstream.
paranoid_exit_restore was a copy of restore_regs_and_return_to_kernel.
Merge them and make the paranoid_exit internal labels local.
Keeping .Lparanoid_exit makes the code a bit shorter because it
allows a 2-byte jnz instead of a 5-byte jnz.
Saves 96 bytes of text.
( This is still a bit suboptimal in a non-CONFIG_TRACE_IRQFLAGS
kernel, but fixing that would make the code rather messy. )
Signed-off-by: Andy Lutomirski <luto@kernel.org >
Cc: Borislav Petkov <bpetkov@suse.de >
Cc: Brian Gerst <brgerst@gmail.com >
Cc: Dave Hansen <dave.hansen@intel.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Link: http://lkml.kernel.org/r/510d66a1895cda9473c84b1086f0bb974f22de6a.1509609304.git.luto@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org >
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2017-12-25 14:26:17 +01:00
Andy Lutomirski
37bae8ecdb
x86/entry/64: Simplify reg restore code in the standard IRET paths
...
commit e872045bfd upstream.
The old code restored all the registers with movq instead of pop.
In theory, this was done because some CPUs have higher movq
throughput, but any gain there would be tiny and is almost certainly
outweighed by the higher text size.
This saves 96 bytes of text.
Signed-off-by: Andy Lutomirski <luto@kernel.org >
Cc: Borislav Petkov <bpetkov@suse.de >
Cc: Brian Gerst <brgerst@gmail.com >
Cc: Dave Hansen <dave.hansen@intel.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Link: http://lkml.kernel.org/r/ad82520a207ccd851b04ba613f4f752b33ac05f7.1509609304.git.luto@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org >
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2017-12-25 14:26:17 +01:00
Andy Lutomirski
7d4bb32bc6
x86/entry/64: Move SWAPGS into the common IRET-to-usermode path
...
commit 8a055d7f41 upstream.
All of the code paths that ended up doing IRET to usermode did
SWAPGS immediately beforehand. Move the SWAPGS into the common
code.
Signed-off-by: Andy Lutomirski <luto@kernel.org >
Cc: Borislav Petkov <bpetkov@suse.de >
Cc: Brian Gerst <brgerst@gmail.com >
Cc: Dave Hansen <dave.hansen@intel.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Link: http://lkml.kernel.org/r/27fd6f45b7cd640de38fb9066fd0349bcd11f8e1.1509609304.git.luto@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org >
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2017-12-25 14:26:17 +01:00
Andy Lutomirski
65236abc42
x86/entry/64: Split the IRET-to-user and IRET-to-kernel paths
...
commit 26c4ef9c49 upstream.
These code paths will diverge soon.
Signed-off-by: Andy Lutomirski <luto@kernel.org >
Cc: Borislav Petkov <bpetkov@suse.de >
Cc: Brian Gerst <brgerst@gmail.com >
Cc: Dave Hansen <dave.hansen@intel.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Link: http://lkml.kernel.org/r/dccf8c7b3750199b4b30383c812d4e2931811509.1509609304.git.luto@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org >
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2017-12-25 14:26:16 +01:00
Andy Lutomirski
b7ee7fcca8
x86/entry/64: Remove the restore_c_regs_and_iret label
...
commit 9da78ba6b4 upstream.
The only user was the 64-bit opportunistic SYSRET failure path, and
that path didn't really need it. This change makes the
opportunistic SYSRET code a bit more straightforward and gets rid of
the label.
Signed-off-by: Andy Lutomirski <luto@kernel.org >
Reviewed-by: Borislav Petkov <bp@suse.de >
Cc: Borislav Petkov <bpetkov@suse.de >
Cc: Brian Gerst <brgerst@gmail.com >
Cc: Dave Hansen <dave.hansen@intel.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Link: http://lkml.kernel.org/r/be3006a7ad3326e3458cf1cc55d416252cbe1986.1509609304.git.luto@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org >
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2017-12-25 14:26:16 +01:00
Ricardo Neri
ab3e5dfff3
ptrace,x86: Make user_64bit_mode() available to 32-bit builds
...
commit e27c310af5 upstream.
In its current form, user_64bit_mode() can only be used when CONFIG_X86_64
is selected. This implies that code built with CONFIG_X86_64=n cannot use
it. If a piece of code needs to be built for both CONFIG_X86_64=y and
CONFIG_X86_64=n and wants to use this function, it needs to wrap it in
an #ifdef/#endif; potentially, in multiple places.
This can be easily avoided with a single #ifdef/#endif pair within
user_64bit_mode() itself.
Suggested-by: Borislav Petkov <bp@suse.de >
Signed-off-by: Ricardo Neri <ricardo.neri-calderon@linux.intel.com >
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Reviewed-by: Borislav Petkov <bp@suse.de >
Cc: "Michael S. Tsirkin" <mst@redhat.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Dave Hansen <dave.hansen@linux.intel.com >
Cc: ricardo.neri@intel.com
Cc: Adrian Hunter <adrian.hunter@intel.com >
Cc: Paul Gortmaker <paul.gortmaker@windriver.com >
Cc: Huang Rui <ray.huang@amd.com >
Cc: Qiaowei Ren <qiaowei.ren@intel.com >
Cc: Shuah Khan <shuah@kernel.org >
Cc: Kees Cook <keescook@chromium.org >
Cc: Jonathan Corbet <corbet@lwn.net >
Cc: Jiri Slaby <jslaby@suse.cz >
Cc: Dmitry Vyukov <dvyukov@google.com >
Cc: "Ravi V. Shankar" <ravi.v.shankar@intel.com >
Cc: Chris Metcalf <cmetcalf@mellanox.com >
Cc: Brian Gerst <brgerst@gmail.com >
Cc: Arnaldo Carvalho de Melo <acme@redhat.com >
Cc: Andy Lutomirski <luto@kernel.org >
Cc: Colin Ian King <colin.king@canonical.com >
Cc: Chen Yucong <slaoub@gmail.com >
Cc: Adam Buchbinder <adam.buchbinder@gmail.com >
Cc: Vlastimil Babka <vbabka@suse.cz >
Cc: Lorenzo Stoakes <lstoakes@gmail.com >
Cc: Masami Hiramatsu <mhiramat@kernel.org >
Cc: Paolo Bonzini <pbonzini@redhat.com >
Cc: Andrew Morton <akpm@linux-foundation.org >
Cc: Thomas Garnier <thgarnie@google.com >
Link: https://lkml.kernel.org/r/1509135945-13762-4-git-send-email-ricardo.neri-calderon@linux.intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2017-12-25 14:26:16 +01:00
Ricardo Neri
985cba4842
x86/boot: Relocate definition of the initial state of CR0
...
commit b0ce5b8c95 upstream.
Both head_32.S and head_64.S utilize the same value to initialize the
control register CR0. Also, other parts of the kernel might want to access
this initial definition (e.g., emulation code for User-Mode Instruction
Prevention uses this state to provide a sane dummy value for CR0 when
emulating the smsw instruction). Thus, relocate this definition to a
header file from which it can be conveniently accessed.
Suggested-by: Borislav Petkov <bp@alien8.de >
Signed-off-by: Ricardo Neri <ricardo.neri-calderon@linux.intel.com >
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Reviewed-by: Borislav Petkov <bp@suse.de >
Reviewed-by: Andy Lutomirski <luto@kernel.org >
Cc: "Michael S. Tsirkin" <mst@redhat.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Dave Hansen <dave.hansen@linux.intel.com >
Cc: ricardo.neri@intel.com
Cc: linux-mm@kvack.org
Cc: Paul Gortmaker <paul.gortmaker@windriver.com >
Cc: Huang Rui <ray.huang@amd.com >
Cc: Shuah Khan <shuah@kernel.org >
Cc: linux-arch@vger.kernel.org
Cc: Jonathan Corbet <corbet@lwn.net >
Cc: Jiri Slaby <jslaby@suse.cz >
Cc: "Ravi V. Shankar" <ravi.v.shankar@intel.com >
Cc: Denys Vlasenko <dvlasenk@redhat.com >
Cc: Chris Metcalf <cmetcalf@mellanox.com >
Cc: Brian Gerst <brgerst@gmail.com >
Cc: Josh Poimboeuf <jpoimboe@redhat.com >
Cc: Chen Yucong <slaoub@gmail.com >
Cc: Vlastimil Babka <vbabka@suse.cz >
Cc: Dave Hansen <dave.hansen@intel.com >
Cc: Andy Lutomirski <luto@amacapital.net >
Cc: Masami Hiramatsu <mhiramat@kernel.org >
Cc: Paolo Bonzini <pbonzini@redhat.com >
Cc: Andrew Morton <akpm@linux-foundation.org >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Link: https://lkml.kernel.org/r/1509135945-13762-3-git-send-email-ricardo.neri-calderon@linux.intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2017-12-25 14:26:16 +01:00
Ricardo Neri
4ed772a7de
x86/mm: Relocate page fault error codes to traps.h
...
commit 1067f03099 upstream.
Up to this point, only fault.c used the definitions of the page fault error
codes. Thus, it made sense to keep them within such file. Other portions of
code might be interested in those definitions too. For instance, the User-
Mode Instruction Prevention emulation code will use such definitions to
emulate a page fault when it is unable to successfully copy the results
of the emulated instructions to user space.
While relocating the error code enumeration, the prefix X86_ is used to
make it consistent with the rest of the definitions in traps.h. Of course,
code using the enumeration had to be updated as well. No functional changes
were performed.
Signed-off-by: Ricardo Neri <ricardo.neri-calderon@linux.intel.com >
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Reviewed-by: Borislav Petkov <bp@suse.de >
Reviewed-by: Andy Lutomirski <luto@kernel.org >
Cc: "Michael S. Tsirkin" <mst@redhat.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Dave Hansen <dave.hansen@linux.intel.com >
Cc: ricardo.neri@intel.com
Cc: Paul Gortmaker <paul.gortmaker@windriver.com >
Cc: Huang Rui <ray.huang@amd.com >
Cc: Shuah Khan <shuah@kernel.org >
Cc: Jonathan Corbet <corbet@lwn.net >
Cc: Jiri Slaby <jslaby@suse.cz >
Cc: "Ravi V. Shankar" <ravi.v.shankar@intel.com >
Cc: Chris Metcalf <cmetcalf@mellanox.com >
Cc: Brian Gerst <brgerst@gmail.com >
Cc: Josh Poimboeuf <jpoimboe@redhat.com >
Cc: Chen Yucong <slaoub@gmail.com >
Cc: Vlastimil Babka <vbabka@suse.cz >
Cc: Masami Hiramatsu <mhiramat@kernel.org >
Cc: Paolo Bonzini <pbonzini@redhat.com >
Cc: Andrew Morton <akpm@linux-foundation.org >
Cc: "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com >
Link: https://lkml.kernel.org/r/1509135945-13762-2-git-send-email-ricardo.neri-calderon@linux.intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2017-12-25 14:26:16 +01:00
Gayatri Kammela
12dc3fa301
x86/cpufeatures: Enable new SSE/AVX/AVX512 CPU features
...
commit c128dbfa0f upstream.
Add a few new SSE/AVX/AVX512 instruction groups/features for enumeration
in /proc/cpuinfo: AVX512_VBMI2, GFNI, VAES, VPCLMULQDQ, AVX512_VNNI,
AVX512_BITALG.
CPUID.(EAX=7,ECX=0):ECX[bit 6] AVX512_VBMI2
CPUID.(EAX=7,ECX=0):ECX[bit 8] GFNI
CPUID.(EAX=7,ECX=0):ECX[bit 9] VAES
CPUID.(EAX=7,ECX=0):ECX[bit 10] VPCLMULQDQ
CPUID.(EAX=7,ECX=0):ECX[bit 11] AVX512_VNNI
CPUID.(EAX=7,ECX=0):ECX[bit 12] AVX512_BITALG
Detailed information of CPUID bits for these features can be found
in the Intel Architecture Instruction Set Extensions and Future Features
Programming Interface document (refer to Table 1-1. and Table 1-2.).
A copy of this document is available at
https://bugzilla.kernel.org/show_bug.cgi?id=197239
Signed-off-by: Gayatri Kammela <gayatri.kammela@intel.com >
Acked-by: Thomas Gleixner <tglx@linutronix.de >
Cc: Andi Kleen <andi.kleen@intel.com >
Cc: Fenghua Yu <fenghua.yu@intel.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Ravi Shankar <ravi.v.shankar@intel.com >
Cc: Ricardo Neri <ricardo.neri@intel.com >
Cc: Yang Zhong <yang.zhong@intel.com >
Cc: bp@alien8.de
Link: http://lkml.kernel.org/r/1509412829-23380-1-git-send-email-gayatri.kammela@intel.com
Signed-off-by: Ingo Molnar <mingo@kernel.org >
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2017-12-25 14:26:16 +01:00
Baoquan He
c60238f571
x86/mm/64: Rename the register_page_bootmem_memmap() 'size' parameter to 'nr_pages'
...
commit 15670bfe19 upstream.
register_page_bootmem_memmap()'s 3rd 'size' parameter is named
in a somewhat misleading fashion - rename it to 'nr_pages' which
makes the units of it much clearer.
Meanwhile rename the existing local variable 'nr_pages' to
'nr_pmd_pages', a more expressive name, to avoid conflict with
new function parameter 'nr_pages'.
(Also clean up the unnecessary parentheses in which get_order() is called.)
Signed-off-by: Baoquan He <bhe@redhat.com >
Acked-by: Thomas Gleixner <tglx@linutronix.de >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: akpm@linux-foundation.org
Link: http://lkml.kernel.org/r/1509154238-23250-1-git-send-email-bhe@redhat.com
Signed-off-by: Ingo Molnar <mingo@kernel.org >
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2017-12-25 14:26:16 +01:00
Masahiro Yamada
3df257ddc5
x86/build: Beautify build log of syscall headers
...
commit af8e947079 upstream.
This makes the build log look nicer.
Before:
SYSTBL arch/x86/entry/syscalls/../../include/generated/asm/syscalls_32.h
SYSHDR arch/x86/entry/syscalls/../../include/generated/asm/unistd_32_ia32.h
SYSHDR arch/x86/entry/syscalls/../../include/generated/asm/unistd_64_x32.h
SYSTBL arch/x86/entry/syscalls/../../include/generated/asm/syscalls_64.h
SYSHDR arch/x86/entry/syscalls/../../include/generated/uapi/asm/unistd_32.h
SYSHDR arch/x86/entry/syscalls/../../include/generated/uapi/asm/unistd_64.h
SYSHDR arch/x86/entry/syscalls/../../include/generated/uapi/asm/unistd_x32.h
After:
SYSTBL arch/x86/include/generated/asm/syscalls_32.h
SYSHDR arch/x86/include/generated/asm/unistd_32_ia32.h
SYSHDR arch/x86/include/generated/asm/unistd_64_x32.h
SYSTBL arch/x86/include/generated/asm/syscalls_64.h
SYSHDR arch/x86/include/generated/uapi/asm/unistd_32.h
SYSHDR arch/x86/include/generated/uapi/asm/unistd_64.h
SYSHDR arch/x86/include/generated/uapi/asm/unistd_x32.h
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com >
Acked-by: Thomas Gleixner <tglx@linutronix.de >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: "H. Peter Anvin" <hpa@zytor.com >
Cc: linux-kbuild@vger.kernel.org
Link: http://lkml.kernel.org/r/1509077470-2735-1-git-send-email-yamada.masahiro@socionext.com
Signed-off-by: Ingo Molnar <mingo@kernel.org >
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2017-12-25 14:26:16 +01:00