diff options
| -rw-r--r-- | arch/x86/entry/entry_64_compat.S | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/arch/x86/entry/entry_64_compat.S b/arch/x86/entry/entry_64_compat.S index 40f17009ec20..98d5358e4041 100644 --- a/arch/x86/entry/entry_64_compat.S +++ b/arch/x86/entry/entry_64_compat.S | |||
| @@ -190,8 +190,13 @@ ENTRY(entry_SYSCALL_compat) | |||
| 190 | /* Interrupts are off on entry. */ | 190 | /* Interrupts are off on entry. */ |
| 191 | swapgs | 191 | swapgs |
| 192 | 192 | ||
| 193 | /* Stash user ESP and switch to the kernel stack. */ | 193 | /* Stash user ESP */ |
| 194 | movl %esp, %r8d | 194 | movl %esp, %r8d |
| 195 | |||
| 196 | /* Use %rsp as scratch reg. User ESP is stashed in r8 */ | ||
| 197 | SWITCH_TO_KERNEL_CR3 scratch_reg=%rsp | ||
| 198 | |||
| 199 | /* Switch to the kernel stack */ | ||
| 195 | movq PER_CPU_VAR(cpu_current_top_of_stack), %rsp | 200 | movq PER_CPU_VAR(cpu_current_top_of_stack), %rsp |
| 196 | 201 | ||
| 197 | /* Construct struct pt_regs on stack */ | 202 | /* Construct struct pt_regs on stack */ |
| @@ -220,12 +225,6 @@ GLOBAL(entry_SYSCALL_compat_after_hwframe) | |||
| 220 | pushq $0 /* pt_regs->r15 = 0 */ | 225 | pushq $0 /* pt_regs->r15 = 0 */ |
| 221 | 226 | ||
| 222 | /* | 227 | /* |
| 223 | * We just saved %rdi so it is safe to clobber. It is not | ||
| 224 | * preserved during the C calls inside TRACE_IRQS_OFF anyway. | ||
| 225 | */ | ||
| 226 | SWITCH_TO_KERNEL_CR3 scratch_reg=%rdi | ||
| 227 | |||
| 228 | /* | ||
| 229 | * User mode is traced as though IRQs are on, and SYSENTER | 228 | * User mode is traced as though IRQs are on, and SYSENTER |
| 230 | * turned them off. | 229 | * turned them off. |
| 231 | */ | 230 | */ |
