All of lore.kernel.org
 help / color / mirror / Atom feed
* [tip: core/urgent] smpboot: Mark idle_init() as __always_inlined to work around aggressive compiler un-inlining
@ 2021-07-13  4:36 tip-bot2 for Ingo Molnar
  0 siblings, 0 replies; only message in thread
From: tip-bot2 for Ingo Molnar @ 2021-07-13  4:36 UTC (permalink / raw)
  To: linux-tip-commits; +Cc: Ingo Molnar, x86, linux-kernel

The following commit has been merged into the core/urgent branch of tip:

Commit-ID:     e9ba16e68cce2f85e9f5d2eba5c0453f1a741fd2
Gitweb:        https://git.kernel.org/tip/e9ba16e68cce2f85e9f5d2eba5c0453f1a741fd2
Author:        Ingo Molnar <mingo@kernel.org>
AuthorDate:    Sun, 11 Jul 2021 08:26:45 +02:00
Committer:     Ingo Molnar <mingo@kernel.org>
CommitterDate: Tue, 13 Jul 2021 06:32:59 +02:00

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 <idle_init>:
  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 <mingo@kernel.org>
---
 kernel/smpboot.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

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);
 

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2021-07-13  4:36 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-07-13  4:36 [tip: core/urgent] smpboot: Mark idle_init() as __always_inlined to work around aggressive compiler un-inlining tip-bot2 for Ingo Molnar

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.