71 lines
2.1 KiB
Diff
71 lines
2.1 KiB
Diff
From: Denys Vlasenko <dvlasenk@redhat.com>
|
|
Date: Wed, 1 Apr 2015 16:50:57 +0200
|
|
Subject: [1/9] x86/asm/entry/64: Fold the 'test_in_nmi' macro into its
|
|
only user
|
|
Origin: https://git.kernel.org/linus/0784b36448a2a85b95b6eb21a69b9045c896c065
|
|
|
|
No code changes.
|
|
|
|
Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
|
|
Acked-by: Borislav Petkov <bp@suse.de>
|
|
Cc: Alexei Starovoitov <ast@plumgrid.com>
|
|
Cc: Andy Lutomirski <luto@amacapital.net>
|
|
Cc: Borislav Petkov <bp@alien8.de>
|
|
Cc: Frederic Weisbecker <fweisbec@gmail.com>
|
|
Cc: H. Peter Anvin <hpa@zytor.com>
|
|
Cc: Kees Cook <keescook@chromium.org>
|
|
Cc: Linus Torvalds <torvalds@linux-foundation.org>
|
|
Cc: Oleg Nesterov <oleg@redhat.com>
|
|
Cc: Steven Rostedt <rostedt@goodmis.org>
|
|
Cc: Will Drewry <wad@chromium.org>
|
|
Link: http://lkml.kernel.org/r/1427899858-7165-1-git-send-email-dvlasenk@redhat.com
|
|
Signed-off-by: Ingo Molnar <mingo@kernel.org>
|
|
---
|
|
arch/x86/kernel/entry_64.S | 28 +++++++++++++---------------
|
|
1 file changed, 13 insertions(+), 15 deletions(-)
|
|
|
|
--- a/arch/x86/kernel/entry_64.S
|
|
+++ b/arch/x86/kernel/entry_64.S
|
|
@@ -1462,19 +1462,7 @@ ENTRY(error_exit)
|
|
CFI_ENDPROC
|
|
END(error_exit)
|
|
|
|
-/*
|
|
- * Test if a given stack is an NMI stack or not.
|
|
- */
|
|
- .macro test_in_nmi reg stack nmi_ret normal_ret
|
|
- cmpq %\reg, \stack
|
|
- ja \normal_ret
|
|
- subq $EXCEPTION_STKSZ, %\reg
|
|
- cmpq %\reg, \stack
|
|
- jb \normal_ret
|
|
- jmp \nmi_ret
|
|
- .endm
|
|
-
|
|
- /* runs on exception stack */
|
|
+/* Runs on exception stack */
|
|
ENTRY(nmi)
|
|
INTR_FRAME
|
|
PARAVIRT_ADJUST_EXCEPTION_FRAME
|
|
@@ -1535,8 +1523,18 @@ ENTRY(nmi)
|
|
* We check the variable because the first NMI could be in a
|
|
* breakpoint routine using a breakpoint stack.
|
|
*/
|
|
- lea 6*8(%rsp), %rdx
|
|
- test_in_nmi rdx, 4*8(%rsp), nested_nmi, first_nmi
|
|
+ lea 6*8(%rsp), %rdx
|
|
+ /* Compare the NMI stack (rdx) with the stack we came from (4*8(%rsp)) */
|
|
+ cmpq %rdx, 4*8(%rsp)
|
|
+ /* If the stack pointer is above the NMI stack, this is a normal NMI */
|
|
+ ja first_nmi
|
|
+ subq $EXCEPTION_STKSZ, %rdx
|
|
+ cmpq %rdx, 4*8(%rsp)
|
|
+ /* If it is below the NMI stack, it is a normal NMI */
|
|
+ jb first_nmi
|
|
+ /* Ah, it is within the NMI stack, treat it as nested */
|
|
+ jmp nested_nmi
|
|
+
|
|
CFI_REMEMBER_STATE
|
|
|
|
nested_nmi:
|