From: Lai Jiangshan <la...@linux.alibaba.com> TSS_entry2task_stack is used to refer to tss.sp1 which is stored the value of thread.sp0.
At the code where TSS_entry2task_stack is used in sysenter, the CR3 is already kernel CR3 and kernel segments is loaded. So that we can directly use percpu for it instead of offset-calculation. And we remove the unused TSS_entry2task_stack. Signed-off-by: Lai Jiangshan <la...@linux.alibaba.com> --- arch/x86/entry/entry_32.S | 2 +- arch/x86/kernel/asm-offsets_32.c | 10 ---------- 2 files changed, 1 insertion(+), 11 deletions(-) diff --git a/arch/x86/entry/entry_32.S b/arch/x86/entry/entry_32.S index a8d2640394f9..3cb42efb3c04 100644 --- a/arch/x86/entry/entry_32.S +++ b/arch/x86/entry/entry_32.S @@ -916,7 +916,7 @@ SYM_FUNC_START(entry_SYSENTER_32) /* Switch to task stack */ movl %esp, %eax - movl (3*4+TSS_entry2task_stack)(%esp), %esp + movl PER_CPU_VAR(cpu_tss_rw + TSS_sp1), %esp .Lsysenter_past_esp: pushl $__USER_DS /* pt_regs->ss */ diff --git a/arch/x86/kernel/asm-offsets_32.c b/arch/x86/kernel/asm-offsets_32.c index 6e043f295a60..6d4143cfbf03 100644 --- a/arch/x86/kernel/asm-offsets_32.c +++ b/arch/x86/kernel/asm-offsets_32.c @@ -43,16 +43,6 @@ void foo(void) OFFSET(saved_context_gdt_desc, saved_context, gdt_desc); BLANK(); - /* - * Offset from the entry stack to task stack stored in TSS. Kernel entry - * happens on the per-cpu entry-stack, and the asm code switches to the - * task-stack pointer stored in x86_tss.sp1, which is a copy of - * task->thread.sp0 where entry code can find it. - */ - DEFINE(TSS_entry2task_stack, - offsetof(struct cpu_entry_area, tss.x86_tss.sp1) - - offsetofend(struct cpu_entry_area, entry_stack_page.stack)); - #ifdef CONFIG_STACKPROTECTOR BLANK(); OFFSET(stack_canary_offset, stack_canary, canary); -- 2.19.1.6.gb485710b