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: Brian Gerst <brgerst@gmail.com> Signed-off-by: Ingo 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
This commit is contained in:
parent
4ae3dc83b0
commit
2cb16181a1
@ -636,12 +636,10 @@ static __always_inline void prefetchw(const void *x)
|
||||
#define KSTK_ESP(task) (task_pt_regs(task)->sp)
|
||||
|
||||
#else
|
||||
extern unsigned long __end_init_task[];
|
||||
extern unsigned long __top_init_kernel_stack[];
|
||||
|
||||
#define INIT_THREAD { \
|
||||
.sp = (unsigned long)&__end_init_task - \
|
||||
TOP_OF_KERNEL_STACK_PADDING - \
|
||||
sizeof(struct pt_regs), \
|
||||
.sp = (unsigned long)&__top_init_kernel_stack, \
|
||||
}
|
||||
|
||||
extern unsigned long KSTK_ESP(struct task_struct *task);
|
||||
|
@ -44,9 +44,6 @@
|
||||
#define X86_CAPABILITY new_cpu_data+CPUINFO_x86_capability
|
||||
#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:
|
||||
* a relocatable kernel can live anywhere in lowmem, so we need to be able
|
||||
@ -488,13 +485,7 @@ SYM_DATA_END(initial_page_table)
|
||||
|
||||
.data
|
||||
.balign 4
|
||||
/*
|
||||
* 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)
|
||||
SYM_DATA(initial_stack, .long __top_init_kernel_stack)
|
||||
|
||||
__INITRODATA
|
||||
int_msg:
|
||||
|
@ -66,7 +66,7 @@ SYM_CODE_START_NOALIGN(startup_64)
|
||||
mov %rsi, %r15
|
||||
|
||||
/* 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 */
|
||||
movl $MSR_GS_BASE, %ecx
|
||||
|
@ -172,6 +172,9 @@ SECTIONS
|
||||
/* init_task */
|
||||
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
|
||||
/* 32 bit has nosave before _edata */
|
||||
NOSAVE_DATA
|
||||
|
@ -49,7 +49,7 @@ SYM_CODE_START(startup_xen)
|
||||
ANNOTATE_NOENDBR
|
||||
cld
|
||||
|
||||
leaq (__end_init_task - TOP_OF_KERNEL_STACK_PADDING - PTREGS_SIZE)(%rip), %rsp
|
||||
leaq __top_init_kernel_stack(%rip), %rsp
|
||||
|
||||
/* Set up %gs.
|
||||
*
|
||||
|
Loading…
Reference in New Issue
Block a user