|
@@ -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 */
|