Thread (2 messages) 2 messages, 2 authors, 2025-09-30

[RFC] Revert "perf/x86: Always store regs->ip in perf_callchain_kernel()"

From: Jiri Olsa <jolsa@kernel.org>
Date: 2025-09-29 12:52:10
Also in: bpf, linux-perf-users
Subsystem: performance events subsystem, the rest, x86 architecture (32-bit and 64-bit) · Maintainers: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo, Namhyung Kim, Linus Torvalds, Thomas Gleixner, Borislav Petkov, Dave Hansen

This reverts commit 83f44ae0f8afcc9da659799db8693f74847e66b3.

hi,
non hw events store first stack trace entry twice:

        bpf_prog_2beb79c650d605dd_rawtracepoint_sched_process_exec_1+324
        bpf_prog_2beb79c650d605dd_rawtracepoint_sched_process_exec_1+324
        bpf_trace_run3+138
        bprm_execve+1191
        do_execveat_common.isra.0+404
        __x64_sys_execve+56
        do_syscall_64+130
        entry_SYSCALL_64_after_hwframe+118

I traced it to [1] from 2019, which stores regs->ip implicitly to fix
raw tracepoints stacktrace. Revert does not seem to break raw tp
stacktrace for me. Song, any idea? I know it's long time ;-)

thanks,
jirka


[1] 83f44ae0f8af ("perf/x86: Always store regs->ip in perf_callchain_kernel()")
---
 arch/x86/events/core.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/arch/x86/events/core.c b/arch/x86/events/core.c
index 7610f26dfbd9..38f7102e2dac 100644
--- a/arch/x86/events/core.c
+++ b/arch/x86/events/core.c
@@ -2787,13 +2787,13 @@ perf_callchain_kernel(struct perf_callchain_entry_ctx *entry, struct pt_regs *re
 		return;
 	}
 
-	if (perf_callchain_store(entry, regs->ip))
-		return;
-
-	if (perf_hw_regs(regs))
+	if (perf_hw_regs(regs)) {
+		if (perf_callchain_store(entry, regs->ip))
+			return;
 		unwind_start(&state, current, regs, NULL);
-	else
+	} else {
 		unwind_start(&state, current, NULL, (void *)regs->sp);
+	}
 
 	for (; !unwind_done(&state); unwind_next_frame(&state)) {
 		addr = unwind_get_return_address(&state);
-- 
2.51.0
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help