aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/x86/entry/entry_64_compat.S13
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 */