|
|
@@ -356,7 +356,8 @@ ENTRY(entry_INT80_compat)
|
|
|
|
|
|
/* Need to switch before accessing the thread stack. */
|
|
|
SWITCH_TO_KERNEL_CR3 scratch_reg=%rdi
|
|
|
- movq %rsp, %rdi
|
|
|
+ /* In the Xen PV case we already run on the thread stack. */
|
|
|
+ ALTERNATIVE "movq %rsp, %rdi", "jmp .Lint80_keep_stack", X86_FEATURE_XENPV
|
|
|
movq PER_CPU_VAR(cpu_current_top_of_stack), %rsp
|
|
|
|
|
|
pushq 6*8(%rdi) /* regs->ss */
|
|
|
@@ -365,8 +366,9 @@ ENTRY(entry_INT80_compat)
|
|
|
pushq 3*8(%rdi) /* regs->cs */
|
|
|
pushq 2*8(%rdi) /* regs->ip */
|
|
|
pushq 1*8(%rdi) /* regs->orig_ax */
|
|
|
-
|
|
|
pushq (%rdi) /* pt_regs->di */
|
|
|
+.Lint80_keep_stack:
|
|
|
+
|
|
|
pushq %rsi /* pt_regs->si */
|
|
|
xorl %esi, %esi /* nospec si */
|
|
|
pushq %rdx /* pt_regs->dx */
|