A extra entry is shown on stack trace(CONFIG_UNWINDER_ORC=y). [003] ..... 110.171589: vfs_write <-__x64_sys_write [003] ..... 110.171600: <stack trace> => XXXXXXXXX (Wrong function name) => vfs_write => ksys_write => do_syscall_64 => entry_SYSCALL_64_after_hwframe
To resolve this, increment skip for __ftrace_trace_stack() in function_stack_trace_call(). The reason why skip is incremented for __ftrace_trace_stack() is because __ftrace_trace_stack() in stack trace is the only function that wasn't skipped from anywhere. Signed-off-by: Tatsuya S <[email protected]> --- V2 -> V3: Changed the place to increment skip number V1 -> V2: Fixed redundant code kernel/trace/trace_functions.c | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/kernel/trace/trace_functions.c b/kernel/trace/trace_functions.c index 3b0cea37e029..27089d8e65d4 100644 --- a/kernel/trace/trace_functions.c +++ b/kernel/trace/trace_functions.c @@ -203,23 +203,21 @@ function_trace_call(unsigned long ip, unsigned long parent_ip, ftrace_test_recursion_unlock(bit); } -#ifdef CONFIG_UNWINDER_ORC -/* - * Skip 2: - * - * function_stack_trace_call() - * ftrace_call() - */ -#define STACK_SKIP 2 -#else /* * Skip 3: - * __trace_stack() - * function_stack_trace_call() - * ftrace_call() + * Skipped functions if CONFIG_UNWINDER_ORC is defined + * + * __ftrace_trace_stack() + * function_stack_trace_call() + * ftrace_call() + * + * Otherwise + * + * __trace_stack() + * function_stack_trace_call() + * ftrace_call() */ #define STACK_SKIP 3 -#endif static void function_stack_trace_call(unsigned long ip, unsigned long parent_ip, -- 2.46.2
