]> www.infradead.org Git - users/dwmw2/linux.git/commit
tracing: Disable branch profiling in noinstr code
authorJosh Poimboeuf <jpoimboe@kernel.org>
Fri, 21 Mar 2025 19:53:32 +0000 (12:53 -0700)
committerIngo Molnar <mingo@kernel.org>
Sat, 22 Mar 2025 08:49:26 +0000 (09:49 +0100)
commit2cbb20b008dba39893f0e296dc8ca312f40a9a0e
treef079da8bb91aecf528cb081d899e70dbaffb4028
parent73070466ed3b5e4620e03c159ee12a570b171d08
tracing: Disable branch profiling in noinstr code

CONFIG_TRACE_BRANCH_PROFILING inserts a call to ftrace_likely_update()
for each use of likely() or unlikely().  That breaks noinstr rules if
the affected function is annotated as noinstr.

Disable branch profiling for files with noinstr functions.  In addition
to some individual files, this also includes the entire arch/x86
subtree, as well as the kernel/entry, drivers/cpuidle, and drivers/idle
directories, all of which are noinstr-heavy.

Due to the nature of how sched binaries are built by combining multiple
.c files into one, branch profiling is disabled more broadly across the
sched code than would otherwise be needed.

This fixes many warnings like the following:

  vmlinux.o: warning: objtool: do_syscall_64+0x40: call to ftrace_likely_update() leaves .noinstr.text section
  vmlinux.o: warning: objtool: __rdgsbase_inactive+0x33: call to ftrace_likely_update() leaves .noinstr.text section
  vmlinux.o: warning: objtool: handle_bug.isra.0+0x198: call to ftrace_likely_update() leaves .noinstr.text section
  ...

Reported-by: Ingo Molnar <mingo@kernel.org>
Suggested-by: Steven Rostedt <rostedt@goodmis.org>
Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Acked-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Link: https://lore.kernel.org/r/fb94fc9303d48a5ed370498f54500cc4c338eb6d.1742586676.git.jpoimboe@kernel.org
14 files changed:
arch/x86/Kbuild
arch/x86/coco/sev/core.c
arch/x86/kernel/head64.c
arch/x86/mm/kasan_init_64.c
arch/x86/mm/mem_encrypt_amd.c
arch/x86/mm/mem_encrypt_identity.c
drivers/acpi/Makefile
drivers/cpuidle/Makefile
drivers/idle/Makefile
kernel/Makefile
kernel/entry/Makefile
kernel/sched/Makefile
kernel/time/Makefile
lib/Makefile