aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoerg Roedel <jroedel@suse.de>2018-07-18 05:40:46 -0400
committerThomas Gleixner <tglx@linutronix.de>2018-07-19 19:11:38 -0400
commit8b376fae0514dc7ee04786e2327169e39d12e51b (patch)
tree14a391b28ada310e5564b49582e61f6dbba859ae
parente5862d0515ad970ccec6208ecf5bb0cffe291ea3 (diff)
x86/entry/32: Introduce SAVE_ALL_NMI and RESTORE_ALL_NMI
These macros will be used in the NMI handler code and replace plain SAVE_ALL and RESTORE_REGS there. The NMI-specific CR3-switch will be added to these macros later. Signed-off-by: Joerg Roedel <jroedel@suse.de> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Tested-by: Pavel Machek <pavel@ucw.cz> Cc: "H . Peter Anvin" <hpa@zytor.com> Cc: linux-mm@kvack.org Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Andy Lutomirski <luto@kernel.org> Cc: Dave Hansen <dave.hansen@intel.com> Cc: Josh Poimboeuf <jpoimboe@redhat.com> Cc: Juergen Gross <jgross@suse.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Borislav Petkov <bp@alien8.de> Cc: Jiri Kosina <jkosina@suse.cz> Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com> Cc: Brian Gerst <brgerst@gmail.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: 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: Andrea Arcangeli <aarcange@redhat.com> Cc: Waiman Long <llong@redhat.com> Cc: "David H . Gutteridge" <dhgutteridge@sympatico.ca> Cc: joro@8bytes.org Link: https://lkml.kernel.org/r/1531906876-13451-10-git-send-email-joro@8bytes.org
-rw-r--r--arch/x86/entry/entry_32.S15
1 files changed, 11 insertions, 4 deletions
diff --git a/arch/x86/entry/entry_32.S b/arch/x86/entry/entry_32.S
index a905e6215ea9..763592596727 100644
--- a/arch/x86/entry/entry_32.S
+++ b/arch/x86/entry/entry_32.S
@@ -181,6 +181,9 @@
181 181
182.endm 182.endm
183 183
184.macro SAVE_ALL_NMI
185 SAVE_ALL
186.endm
184/* 187/*
185 * This is a sneaky trick to help the unwinder find pt_regs on the stack. The 188 * This is a sneaky trick to help the unwinder find pt_regs on the stack. The
186 * frame pointer is replaced with an encoded pointer to pt_regs. The encoding 189 * frame pointer is replaced with an encoded pointer to pt_regs. The encoding
@@ -227,6 +230,10 @@
227 POP_GS_EX 230 POP_GS_EX
228.endm 231.endm
229 232
233.macro RESTORE_ALL_NMI pop=0
234 RESTORE_REGS pop=\pop
235.endm
236
230.macro CHECK_AND_APPLY_ESPFIX 237.macro CHECK_AND_APPLY_ESPFIX
231#ifdef CONFIG_X86_ESPFIX32 238#ifdef CONFIG_X86_ESPFIX32
232#define GDT_ESPFIX_SS PER_CPU_VAR(gdt_page) + (GDT_ENTRY_ESPFIX_SS * 8) 239#define GDT_ESPFIX_SS PER_CPU_VAR(gdt_page) + (GDT_ENTRY_ESPFIX_SS * 8)
@@ -1161,7 +1168,7 @@ ENTRY(nmi)
1161#endif 1168#endif
1162 1169
1163 pushl %eax # pt_regs->orig_ax 1170 pushl %eax # pt_regs->orig_ax
1164 SAVE_ALL 1171 SAVE_ALL_NMI
1165 ENCODE_FRAME_POINTER 1172 ENCODE_FRAME_POINTER
1166 xorl %edx, %edx # zero error code 1173 xorl %edx, %edx # zero error code
1167 movl %esp, %eax # pt_regs pointer 1174 movl %esp, %eax # pt_regs pointer
@@ -1189,7 +1196,7 @@ ENTRY(nmi)
1189 1196
1190.Lnmi_return: 1197.Lnmi_return:
1191 CHECK_AND_APPLY_ESPFIX 1198 CHECK_AND_APPLY_ESPFIX
1192 RESTORE_REGS 4 1199 RESTORE_ALL_NMI pop=4
1193 jmp .Lirq_return 1200 jmp .Lirq_return
1194 1201
1195#ifdef CONFIG_X86_ESPFIX32 1202#ifdef CONFIG_X86_ESPFIX32
@@ -1205,12 +1212,12 @@ ENTRY(nmi)
1205 pushl 16(%esp) 1212 pushl 16(%esp)
1206 .endr 1213 .endr
1207 pushl %eax 1214 pushl %eax
1208 SAVE_ALL 1215 SAVE_ALL_NMI
1209 ENCODE_FRAME_POINTER 1216 ENCODE_FRAME_POINTER
1210 FIXUP_ESPFIX_STACK # %eax == %esp 1217 FIXUP_ESPFIX_STACK # %eax == %esp
1211 xorl %edx, %edx # zero error code 1218 xorl %edx, %edx # zero error code
1212 call do_nmi 1219 call do_nmi
1213 RESTORE_REGS 1220 RESTORE_ALL_NMI
1214 lss 12+4(%esp), %esp # back to espfix stack 1221 lss 12+4(%esp), %esp # back to espfix stack
1215 jmp .Lirq_return 1222 jmp .Lirq_return
1216#endif 1223#endif