[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20210210133917.2414-3-jiangshanlai@gmail.com>
Date: Wed, 10 Feb 2021 21:39:13 +0800
From: Lai Jiangshan <jiangshanlai@...il.com>
To: linux-kernel@...r.kernel.org, Borislav Petkov <bp@...en8.de>
Cc: Lai Jiangshan <laijs@...ux.alibaba.com>,
Andy Lutomirski <luto@...nel.org>,
Thomas Gleixner <tglx@...utronix.de>,
Ingo Molnar <mingo@...hat.com>, x86@...nel.org,
"H. Peter Anvin" <hpa@...or.com>,
Dave Hansen <dave.hansen@...ux.intel.com>,
Peter Zijlstra <peterz@...radead.org>,
Al Viro <viro@...iv.linux.org.uk>,
Vincenzo Frascino <vincenzo.frascino@....com>,
Joerg Roedel <jroedel@...e.de>,
Ricardo Neri <ricardo.neri-calderon@...ux.intel.com>,
Reinette Chatre <reinette.chatre@...el.com>,
Balbir Singh <sblbir@...zon.com>,
Andrew Morton <akpm@...ux-foundation.org>,
Gabriel Krisman Bertazi <krisman@...labora.com>,
Kees Cook <keescook@...omium.org>,
Frederic Weisbecker <frederic@...nel.org>,
Jens Axboe <axboe@...nel.dk>,
Arvind Sankar <nivedita@...m.mit.edu>,
Brian Gerst <brgerst@...il.com>,
Ard Biesheuvel <ardb@...nel.org>,
Andi Kleen <ak@...ux.intel.com>,
Mike Rapoport <rppt@...nel.org>, Mike Hommey <mh@...ndium.org>,
Mark Gross <mgross@...ux.intel.com>,
Fenghua Yu <fenghua.yu@...el.com>,
Tony Luck <tony.luck@...el.com>,
Anthony Steinhauser <asteinhauser@...gle.com>,
Jay Lang <jaytlang@....edu>,
"Chang S. Bae" <chang.seok.bae@...el.com>
Subject: [PATCH V4 2/6] x86/entry/32: Use percpu instead of offset-calculation to get thread.sp0 in SWITCH_TO_KERNEL_STACK
From: Lai Jiangshan <laijs@...ux.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 <laijs@...ux.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
Powered by blists - more mailing lists