From: Lai Jiangshan <la...@linux.alibaba.com>

TSS_entry2task_stack is used to refer to tss.sp1 which is a copy of
thread.sp0.

When TSS_entry2task_stack is used in SWITCH_TO_KERNEL_STACK, the CR3 is
already kernel CR3 and the kernel segments are loaded.

So it directly uses percpu to get tss.sp1(thread.sp0) instead of
the complicated offset-calculation via TSS_entry2task_stack.

Signed-off-by: Lai Jiangshan <la...@linux.alibaba.com>
---
 arch/x86/entry/entry_32.S | 9 ++-------
 1 file changed, 2 insertions(+), 7 deletions(-)

diff --git a/arch/x86/entry/entry_32.S b/arch/x86/entry/entry_32.S
index df8c017e6161..3b4d1a63d1f0 100644
--- a/arch/x86/entry/entry_32.S
+++ b/arch/x86/entry/entry_32.S
@@ -465,16 +465,11 @@
        cmpl    $SIZEOF_entry_stack, %ecx
        jae     .Lend_\@
 
-       /* Load stack pointer into %esi and %edi */
+       /* Load stack pointer into %esi */
        movl    %esp, %esi
-       movl    %esi, %edi
-
-       /* Move %edi to the top of the entry stack */
-       andl    $(MASK_entry_stack), %edi
-       addl    $(SIZEOF_entry_stack), %edi
 
        /* Load top of task-stack into %edi */
-       movl    TSS_entry2task_stack(%edi), %edi
+       movl    PER_CPU_VAR(cpu_tss_rw + TSS_sp1), %edi
 
        /* Special case - entry from kernel mode via entry stack */
 #ifdef CONFIG_VM86
-- 
2.19.1.6.gb485710b

Reply via email to