Messages in this thread Patch in this message | | | From | Lai Jiangshan <> | Subject | [PATCH V4 5/6] x86/entry/32: Use percpu to get thread.sp0 in SYSENTER | Date | Wed, 10 Feb 2021 21:39:16 +0800 |
| |
From: Lai Jiangshan <laijs@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 entry_SYSENTER_32, the CR3 is already kernel CR3 and the kernel %fs is loaded.
So it directly uses percpu instead of offset-calculation via TSS_entry2task_stack.
And we remove the unused TSS_entry2task_stack.
Signed-off-by: Lai Jiangshan <laijs@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 01f098c5b017..d5b5b43fd0c0 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
| |