From: "Masami Hiramatsu (Google)" <mhiramat@kernel.org>
To: Steven Rostedt <rostedt@goodmis.org>
Cc: Gabriel de Perthuis <g2p.code@gmail.com>,
Haiyue Wang <haiyuewa@163.com>,
Sami Tolvanen <samitolvanen@google.com>,
Mark Rutland <mark.rutland@arm.com>,
Thomas Gleixner <tglx@linutronix.de>,
Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>,
Dave Hansen <dave.hansen@linux.intel.com>,
"H . Peter Anvin" <hpa@zytor.com>,
x86@kernel.org, linux-trace-kernel@vger.kernel.org,
LKML <linux-kernel@vger.kernel.org>
Subject: [PATCH] ftrace: x86: Fix a compile error about get_kernel_nofault()
Date: Thu, 6 Feb 2025 12:12:42 +0900 [thread overview]
Message-ID: <173881156244.211648.1242168038709680511.stgit@devnote2> (raw)
From: Masami Hiramatsu (Google) <mhiramat@kernel.org>
Fix a compile error about get_kernel_nofault() which is defined in the
linux/uaccess.h. Since asm/ftrace.h is widely used, including
linux/uaccess.h in asm/ftrace.h caused another error. Thus this
moves arch_ftrace_get_symaddr() into arch/x86/kernel/ftrace.c.
The original errors look like:
In file included from ./arch/x86/include/asm/asm-prototypes.h:2,
from <stdin>:3:
./arch/x86/include/asm/ftrace.h: In function 'arch_ftrace_get_symaddr':
./arch/x86/include/asm/ftrace.h:46:21: error: implicit declaration of function 'get_kernel_nofault' [-Werror=implicit-function-declaration]
46 | if (get_kernel_nofault(instr, (u32 *)(fentry_ip - ENDBR_INSN_SIZE)))
| ^~~~~~~~~~~~~~~~~~
This also makes ftrace_get_symaddr() available only when
CONFIG_HAVE_FENTRY=y on x86.
Reported-by: Gabriel de Perthuis <g2p.code@gmail.com>
Closes: https://lore.kernel.org/all/a87f98bf-45b1-4ef5-aa77-02f7e61203f4@gmail.com/
Reported-by: Haiyue Wang <haiyuewa@163.com>
Closes: https://lore.kernel.org/all/20250205180116.88644-1-haiyuewa@163.com/
Fixes: 2bc56fdae1ba ("ftrace: Add ftrace_get_symaddr to convert fentry_ip to symaddr")
Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
---
arch/x86/include/asm/ftrace.h | 23 ++++-------------------
arch/x86/kernel/ftrace.c | 26 +++++++++++++++++++++++++-
2 files changed, 29 insertions(+), 20 deletions(-)
diff --git a/arch/x86/include/asm/ftrace.h b/arch/x86/include/asm/ftrace.h
index f9cb4d07df58..1ed08f2de366 100644
--- a/arch/x86/include/asm/ftrace.h
+++ b/arch/x86/include/asm/ftrace.h
@@ -34,26 +34,11 @@ static inline unsigned long ftrace_call_adjust(unsigned long addr)
return addr;
}
-static inline unsigned long arch_ftrace_get_symaddr(unsigned long fentry_ip)
-{
-#ifdef CONFIG_X86_KERNEL_IBT
- u32 instr;
-
- /* We want to be extra safe in case entry ip is on the page edge,
- * but otherwise we need to avoid get_kernel_nofault()'s overhead.
- */
- if ((fentry_ip & ~PAGE_MASK) < ENDBR_INSN_SIZE) {
- if (get_kernel_nofault(instr, (u32 *)(fentry_ip - ENDBR_INSN_SIZE)))
- return fentry_ip;
- } else {
- instr = *(u32 *)(fentry_ip - ENDBR_INSN_SIZE);
- }
- if (is_endbr(instr))
- fentry_ip -= ENDBR_INSN_SIZE;
-#endif
- return fentry_ip;
-}
+/* This does not support mcount. */
+#ifdef CONFIG_HAVE_FENTRY
+unsigned long arch_ftrace_get_symaddr(unsigned long fentry_ip);
#define ftrace_get_symaddr(fentry_ip) arch_ftrace_get_symaddr(fentry_ip)
+#endif
#ifdef CONFIG_HAVE_DYNAMIC_FTRACE_WITH_ARGS
diff --git a/arch/x86/kernel/ftrace.c b/arch/x86/kernel/ftrace.c
index 166bc0ea3bdf..7250118005fc 100644
--- a/arch/x86/kernel/ftrace.c
+++ b/arch/x86/kernel/ftrace.c
@@ -29,11 +29,35 @@
#include <trace/syscall.h>
-#include <asm/kprobes.h>
#include <asm/ftrace.h>
+#include <asm/ibt.h>
+#include <asm/kprobes.h>
#include <asm/nops.h>
#include <asm/text-patching.h>
+#ifdef CONFIG_HAVE_FENTRY
+/* Convert fentry address to the symbol address. */
+unsigned long arch_ftrace_get_symaddr(unsigned long fentry_ip)
+{
+#ifdef CONFIG_X86_KERNEL_IBT
+ u32 instr;
+
+ /* We want to be extra safe in case entry ip is on the page edge,
+ * but otherwise we need to avoid get_kernel_nofault()'s overhead.
+ */
+ if ((fentry_ip & ~PAGE_MASK) < ENDBR_INSN_SIZE) {
+ if (get_kernel_nofault(instr, (u32 *)(fentry_ip - ENDBR_INSN_SIZE)))
+ return fentry_ip;
+ } else {
+ instr = *(u32 *)(fentry_ip - ENDBR_INSN_SIZE);
+ }
+ if (is_endbr(instr))
+ fentry_ip -= ENDBR_INSN_SIZE;
+#endif
+ return fentry_ip;
+}
+#endif
+
#ifdef CONFIG_DYNAMIC_FTRACE
static int ftrace_poke_late = 0;
next reply other threads:[~2025-02-06 3:12 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-06 3:12 Masami Hiramatsu (Google) [this message]
2025-02-06 8:12 ` [PATCH] ftrace: x86: Fix a compile error about get_kernel_nofault() Peter Zijlstra
2025-02-06 11:54 ` Masami Hiramatsu
2025-02-06 12:13 ` Peter Zijlstra
2025-02-06 12:33 ` Peter Zijlstra
2025-02-06 13:25 ` Haiyue Wang
2025-02-07 10:09 ` Peter Zijlstra
2025-02-06 23:59 ` Masami Hiramatsu
2025-02-10 22:30 ` Steven Rostedt
2025-02-11 10:09 ` Peter Zijlstra
2025-02-11 15:50 ` Steven Rostedt
2025-02-12 16:52 ` Sami Tolvanen
2025-02-13 10:08 ` Peter Zijlstra
2025-02-13 10:25 ` Haiyue Wang
2025-02-13 10:40 ` Peter Zijlstra
2025-02-13 10:50 ` Haiyue Wang
2025-02-13 10:26 ` Peter Zijlstra
2025-02-13 13:35 ` Masami Hiramatsu
2025-02-13 0:03 ` Masami Hiramatsu
2025-02-06 18:19 ` Gabriel de Perthuis
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=173881156244.211648.1242168038709680511.stgit@devnote2 \
--to=mhiramat@kernel.org \
--cc=bp@alien8.de \
--cc=dave.hansen@linux.intel.com \
--cc=g2p.code@gmail.com \
--cc=haiyuewa@163.com \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-trace-kernel@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=mingo@redhat.com \
--cc=rostedt@goodmis.org \
--cc=samitolvanen@google.com \
--cc=tglx@linutronix.de \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox