From: Ingo Molnar Date: Sun, 11 Jul 2021 06:26:45 +0000 (+0200) Subject: smpboot: Mark idle_init() as __always_inlined to work around aggressive compiler... X-Git-Tag: accepted/tizen/unified/20230118.172025~6756^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e9ba16e68cce2f85e9f5d2eba5c0453f1a741fd2;p=platform%2Fkernel%2Flinux-rpi.git smpboot: Mark idle_init() as __always_inlined to work around aggressive compiler un-inlining While this function is a static inline, and is only used once in local scope, certain Kconfig variations may cause it to be compiled as a standalone function: 89231bf0 : 89231bf0: 83 05 60 d9 45 89 01 addl $0x1,0x8945d960 89231bf7: 55 push %ebp Resulting in this build failure: WARNING: modpost: vmlinux.o(.text.unlikely+0x7fd5): Section mismatch in reference from the function idle_init() to the function .init.text:fork_idle() The function idle_init() references the function __init fork_idle(). This is often because idle_init lacks a __init annotation or the annotation of fork_idle is wrong. ERROR: modpost: Section mismatches detected. Certain USBSAN options x86-32 builds with CONFIG_CC_OPTIMIZE_FOR_SIZE=y seem to be causing this. So mark idle_init() as __always_inline to work around this compiler bug/feature. Signed-off-by: Ingo Molnar --- diff --git a/kernel/smpboot.c b/kernel/smpboot.c index e416304..21b7953 100644 --- a/kernel/smpboot.c +++ b/kernel/smpboot.c @@ -47,7 +47,7 @@ void __init idle_thread_set_boot_cpu(void) * * Creates the thread if it does not exist. */ -static inline void idle_init(unsigned int cpu) +static inline void __always_inline idle_init(unsigned int cpu) { struct task_struct *tsk = per_cpu(idle_threads, cpu);