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