--- zzzz-none-000/linux-4.4.271/arch/arm64/kernel/head.S 2021-06-03 06:22:09.000000000 +0000 +++ hawkeye-5590-750/linux-4.4.271/arch/arm64/kernel/head.S 2023-04-19 10:22:27.000000000 +0000 @@ -424,8 +424,18 @@ str xzr, [x6], #8 // Clear BSS b 1b 2: +#ifdef CONFIG_THREAD_INFO_IN_TASK + adrp x4, init_thread_union + add sp, x4, #THREAD_SIZE + adr_l x5, init_task + msr sp_el0, x5 // Save thread_info +#else adrp x4, initial_sp add sp, x4, :lo12:initial_sp + mov x4, sp + and x4, x4, #~(THREAD_SIZE - 1) + msr sp_el0, x4 // Save thread_info +#endif str_l x21, __fdt_pointer, x5 // Save FDT pointer str_l x24, memstart_addr, x6 // Save PHYS_OFFSET mov x29, #0 @@ -612,8 +622,16 @@ ENDPROC(secondary_startup) ENTRY(__secondary_switched) +#ifdef CONFIG_THREAD_INFO_IN_TASK + ldr x0, [x21, #CPU_BOOT_STACK] // get secondary_data.stack + mov sp, x0 + ldr x0, [x21, #CPU_BOOT_TASK] +#else ldr x0, [x21] // get secondary_data.stack mov sp, x0 + and x0, x0, #~(THREAD_SIZE - 1) +#endif + msr sp_el0, x0 // save thread_info mov x29, #0 b secondary_start_kernel ENDPROC(__secondary_switched)