From 7cf73995e05fa88f5f569ad51768893fb16f6b25 Mon Sep 17 00:00:00 2001 From: He Chuyue Date: Wed, 8 Feb 2023 11:22:40 +0800 Subject: [PATCH] sw64: fix THREAD_INFO_IN_TASK support Sunway inclusion category: bugfix bugzilla: https://gitee.com/openeuler/kernel/issues/I6ILGG -------------------------------- Since CONFIG_THREAD_INFO_IN_TASK has been activated, init_thread_info and __current_thread_info are removed, and compile errors occur if CONFIG_DYNAMIC_FTRACE=y or CONFIG_RELOCATABLE=y. This patch replaces init_thread_info with task_thread_info(&init_task) and fixes the method to relocate task pointer and stack pointer to new kernel image for kaslr. Signed-off-by: He Chuyue Reviewed-by: He Sheng Signed-off-by: Gu Zitao --- arch/sw_64/kernel/ftrace.c | 6 ++++-- arch/sw_64/kernel/head.S | 4 +++- arch/sw_64/kernel/relocate.c | 3 --- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/arch/sw_64/kernel/ftrace.c b/arch/sw_64/kernel/ftrace.c index 3d99f723dced..fb25ffe3dbda 100644 --- a/arch/sw_64/kernel/ftrace.c +++ b/arch/sw_64/kernel/ftrace.c @@ -100,10 +100,12 @@ void arch_ftrace_update_code(int command) int __init ftrace_dyn_arch_init(void) { - init_thread_info.dyn_ftrace_addr = FTRACE_ADDR; + struct thread_info *ti = task_thread_info(&init_task); + + ti->dyn_ftrace_addr = FTRACE_ADDR; #ifdef CONFIG_DYNAMIC_FTRACE_WITH_REGS - init_thread_info.dyn_ftrace_regs_addr = FTRACE_REGS_ADDR; + ti->dyn_ftrace_regs_addr = FTRACE_REGS_ADDR; #endif return 0; } diff --git a/arch/sw_64/kernel/head.S b/arch/sw_64/kernel/head.S index d5975a971b86..c855d31de715 100644 --- a/arch/sw_64/kernel/head.S +++ b/arch/sw_64/kernel/head.S @@ -40,8 +40,10 @@ __start: call $26, relocate_kernel ldl $29, 0($30) addl $29, $0, $29 + addl $8, $0, $8 + ldi $30, 8($30) /* Repoint the sp into the new kernel image */ - ldi $30, ASM_THREAD_SIZE($8) + addl $30, $0, $30 #endif /* ... and then we can start the kernel. */ call $26, sw64_start_kernel diff --git a/arch/sw_64/kernel/relocate.c b/arch/sw_64/kernel/relocate.c index 792ee1a9c2b1..ebdf7d894805 100644 --- a/arch/sw_64/kernel/relocate.c +++ b/arch/sw_64/kernel/relocate.c @@ -239,9 +239,6 @@ unsigned int __init relocate_kernel(void) if (plat_post_relocation(offset)) goto out; - /* The current thread is now within the relocated image */ - __current_thread_info = RELOCATED(&init_thread_union); - /* Return the new kernel's offset */ return offset; } -- GitLab