diff options
-rw-r--r-- | arch/x86/entry/entry_64.S | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/arch/x86/entry/entry_64.S b/arch/x86/entry/entry_64.S index 404ca97c4715..055a01de7c8d 100644 --- a/arch/x86/entry/entry_64.S +++ b/arch/x86/entry/entry_64.S | |||
@@ -1190,9 +1190,12 @@ ENTRY(nmi) | |||
1190 | * we don't want to enable interrupts, because then we'll end | 1190 | * we don't want to enable interrupts, because then we'll end |
1191 | * up in an awkward situation in which IRQs are on but NMIs | 1191 | * up in an awkward situation in which IRQs are on but NMIs |
1192 | * are off. | 1192 | * are off. |
1193 | * | ||
1194 | * We also must not push anything to the stack before switching | ||
1195 | * stacks lest we corrupt the "NMI executing" variable. | ||
1193 | */ | 1196 | */ |
1194 | 1197 | ||
1195 | SWAPGS | 1198 | SWAPGS_UNSAFE_STACK |
1196 | cld | 1199 | cld |
1197 | movq %rsp, %rdx | 1200 | movq %rsp, %rdx |
1198 | movq PER_CPU_VAR(cpu_current_top_of_stack), %rsp | 1201 | movq PER_CPU_VAR(cpu_current_top_of_stack), %rsp |