Commit 2cb16181 authored by Brian Gerst's avatar Brian Gerst Committed by Ingo Molnar

x86/boot: Simplify boot stack setup

Define the symbol __top_init_kernel_stack instead of duplicating
the offset from __end_init_task in multiple places.
Signed-off-by: default avatarBrian Gerst <brgerst@gmail.com>
Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
Cc: Kees Cook <keescook@chromium.org>
Cc: Uros Bizjak <ubizjak@gmail.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Andy Lutomirski <luto@kernel.org>
Link: https://lore.kernel.org/r/20240321180506.89030-1-brgerst@gmail.com
parent 4ae3dc83
...@@ -636,12 +636,10 @@ static __always_inline void prefetchw(const void *x) ...@@ -636,12 +636,10 @@ static __always_inline void prefetchw(const void *x)
#define KSTK_ESP(task) (task_pt_regs(task)->sp) #define KSTK_ESP(task) (task_pt_regs(task)->sp)
#else #else
extern unsigned long __end_init_task[]; extern unsigned long __top_init_kernel_stack[];
#define INIT_THREAD { \ #define INIT_THREAD { \
.sp = (unsigned long)&__end_init_task - \ .sp = (unsigned long)&__top_init_kernel_stack, \
TOP_OF_KERNEL_STACK_PADDING - \
sizeof(struct pt_regs), \
} }
extern unsigned long KSTK_ESP(struct task_struct *task); extern unsigned long KSTK_ESP(struct task_struct *task);
......
...@@ -44,9 +44,6 @@ ...@@ -44,9 +44,6 @@
#define X86_CAPABILITY new_cpu_data+CPUINFO_x86_capability #define X86_CAPABILITY new_cpu_data+CPUINFO_x86_capability
#define X86_VENDOR_ID new_cpu_data+CPUINFO_x86_vendor_id #define X86_VENDOR_ID new_cpu_data+CPUINFO_x86_vendor_id
#define SIZEOF_PTREGS 17*4
/* /*
* Worst-case size of the kernel mapping we need to make: * Worst-case size of the kernel mapping we need to make:
* a relocatable kernel can live anywhere in lowmem, so we need to be able * a relocatable kernel can live anywhere in lowmem, so we need to be able
...@@ -488,13 +485,7 @@ SYM_DATA_END(initial_page_table) ...@@ -488,13 +485,7 @@ SYM_DATA_END(initial_page_table)
.data .data
.balign 4 .balign 4
/* SYM_DATA(initial_stack, .long __top_init_kernel_stack)
* The SIZEOF_PTREGS gap is a convention which helps the in-kernel unwinder
* reliably detect the end of the stack.
*/
SYM_DATA(initial_stack,
.long init_thread_union + THREAD_SIZE -
SIZEOF_PTREGS - TOP_OF_KERNEL_STACK_PADDING)
__INITRODATA __INITRODATA
int_msg: int_msg:
......
...@@ -66,7 +66,7 @@ SYM_CODE_START_NOALIGN(startup_64) ...@@ -66,7 +66,7 @@ SYM_CODE_START_NOALIGN(startup_64)
mov %rsi, %r15 mov %rsi, %r15
/* Set up the stack for verify_cpu() */ /* Set up the stack for verify_cpu() */
leaq (__end_init_task - TOP_OF_KERNEL_STACK_PADDING - PTREGS_SIZE)(%rip), %rsp leaq __top_init_kernel_stack(%rip), %rsp
/* Setup GSBASE to allow stack canary access for C code */ /* Setup GSBASE to allow stack canary access for C code */
movl $MSR_GS_BASE, %ecx movl $MSR_GS_BASE, %ecx
......
...@@ -172,6 +172,9 @@ SECTIONS ...@@ -172,6 +172,9 @@ SECTIONS
/* init_task */ /* init_task */
INIT_TASK_DATA(THREAD_SIZE) INIT_TASK_DATA(THREAD_SIZE)
/* equivalent to task_pt_regs(&init_task) */
__top_init_kernel_stack = __end_init_task - TOP_OF_KERNEL_STACK_PADDING - PTREGS_SIZE;
#ifdef CONFIG_X86_32 #ifdef CONFIG_X86_32
/* 32 bit has nosave before _edata */ /* 32 bit has nosave before _edata */
NOSAVE_DATA NOSAVE_DATA
......
...@@ -49,7 +49,7 @@ SYM_CODE_START(startup_xen) ...@@ -49,7 +49,7 @@ SYM_CODE_START(startup_xen)
ANNOTATE_NOENDBR ANNOTATE_NOENDBR
cld cld
leaq (__end_init_task - TOP_OF_KERNEL_STACK_PADDING - PTREGS_SIZE)(%rip), %rsp leaq __top_init_kernel_stack(%rip), %rsp
/* Set up %gs. /* Set up %gs.
* *
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment