From: Joerg Roedel <jroedel@xxxxxxx> Also move it to a header file so that it can be used in the idt code to setup the early IDT. Signed-off-by: Joerg Roedel <jroedel@xxxxxxx> --- arch/x86/include/asm/setup.h | 10 ++++++++++ arch/x86/kernel/head64.c | 5 ----- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/arch/x86/include/asm/setup.h b/arch/x86/include/asm/setup.h index 5c2fd05bd52c..8aa6ba0427b0 100644 --- a/arch/x86/include/asm/setup.h +++ b/arch/x86/include/asm/setup.h @@ -74,6 +74,16 @@ static inline void x86_ce4100_early_setup(void) { } extern struct boot_params boot_params; extern char _text[]; +/* + * This function is used in C code that runs while the kernel still runs on + * identity mapped addresses to get the correct address of kernel pointers in + * the identity mapping. + */ +static __always_inline void *fixup_pointer(void *ptr, unsigned long physaddr) +{ + return ptr - (void *)_text + (void *)physaddr; +} + static inline bool kaslr_enabled(void) { return IS_ENABLED(CONFIG_RANDOMIZE_MEMORY) && diff --git a/arch/x86/kernel/head64.c b/arch/x86/kernel/head64.c index b0ab5627900b..8703292a35e9 100644 --- a/arch/x86/kernel/head64.c +++ b/arch/x86/kernel/head64.c @@ -82,11 +82,6 @@ static struct desc_ptr startup_gdt_descr = { #define __head __section(.head.text) -static void __head *fixup_pointer(void *ptr, unsigned long physaddr) -{ - return ptr - (void *)_text + (void *)physaddr; -} - static unsigned long __head *fixup_long(void *ptr, unsigned long physaddr) { return fixup_pointer(ptr, physaddr); -- 2.27.0