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 |
