diff options
author | Steven Rostedt <srostedt@redhat.com> | 2011-12-08 18:32:27 +0100 |
---|---|---|
committer | Steven Rostedt <rostedt@goodmis.org> | 2011-12-21 21:38:53 +0100 |
commit | 1fd466efc88c48f50e5ee29f4dbb4e210a889172 (patch) | |
tree | b2ab7a342ca8eeda6fb62475011105fba5b29141 /arch/x86 | |
parent | x86: Do not schedule while still in NMI context (diff) | |
download | linux-1fd466efc88c48f50e5ee29f4dbb4e210a889172.tar.xz linux-1fd466efc88c48f50e5ee29f4dbb4e210a889172.zip |
x86: Document the NMI handler about not using paranoid_exit
Linus cleaned up the NMI handler but it still needs some comments to
explain why it uses save_paranoid but not paranoid_exit. Just to keep
others from adding that in the future, document why it's not used.
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Andi Kleen <andi@firstfloor.org>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Diffstat (limited to 'arch/x86')
-rw-r--r-- | arch/x86/kernel/entry_64.S | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S index 3819ea907339..d1d5434e7f6a 100644 --- a/arch/x86/kernel/entry_64.S +++ b/arch/x86/kernel/entry_64.S @@ -1480,9 +1480,16 @@ END(error_exit) ENTRY(nmi) INTR_FRAME PARAVIRT_ADJUST_EXCEPTION_FRAME - pushq_cfi $-1 + pushq_cfi $-1 /* ORIG_RAX: no syscall to restart */ subq $ORIG_RAX-R15, %rsp CFI_ADJUST_CFA_OFFSET ORIG_RAX-R15 + /* + * Use save_paranoid to handle SWAPGS, but no need to use paranoid_exit + * as we should not be calling schedule in NMI context. + * Even with normal interrupts enabled. An NMI should not be + * setting NEED_RESCHED or anything that normal interrupts and + * exceptions might do. + */ call save_paranoid DEFAULT_FRAME 0 /* paranoidentry do_nmi, 0; without TRACE_IRQS_OFF */ |