On Tue, 21 Mar 2017 21:35:05 -0400 Steven Rostedt <rost...@goodmis.org> wrote:
> From: "Steven Rostedt (VMware)" <rost...@goodmis.org> > > The function hook ftrace_caller does not create its own stack frame, and > this causes the ftrace stack trace to miss the first function when doing > stack traces. > > # echo schedule:stacktrace > /sys/kernel/tracing/set_ftrace_filter > > Before: > <idle>-0 [002] .N.. 29.865807: <stack trace> > => cpu_startup_entry > => start_secondary > => startup_32_smp > <...>-7 [001] .... 29.866509: <stack trace> > => kthread > => ret_from_fork > <...>-1 [000] .... 29.865377: <stack trace> > => poll_schedule_timeout > => do_select > => core_sys_select > => SyS_select > => do_fast_syscall_32 > => entry_SYSENTER_32 > > After: > <idle>-0 [002] .N.. 31.234853: <stack trace> > => do_idle > => cpu_startup_entry > => start_secondary > => startup_32_smp > <...>-7 [003] .... 31.235140: <stack trace> > => rcu_gp_kthread > => kthread > => ret_from_fork > <...>-1819 [000] .... 31.264172: <stack trace> > => schedule_hrtimeout_range > => poll_schedule_timeout > => do_sys_poll > => SyS_ppoll > => do_fast_syscall_32 > => entry_SYSENTER_32 > Looks good to me. Reviewed-by: Masami Hiramatsu <mhira...@kernel.org> Thank you, > Reviewed-by: Josh Poimboeuf <jpoim...@redhat.com> > Signed-off-by: Steven Rostedt (VMware) <rost...@goodmis.org> > --- > arch/x86/kernel/ftrace_32.S | 12 ++++++++++-- > 1 file changed, 10 insertions(+), 2 deletions(-) > > diff --git a/arch/x86/kernel/ftrace_32.S b/arch/x86/kernel/ftrace_32.S > index 1889a74823ce..f991e723c3e4 100644 > --- a/arch/x86/kernel/ftrace_32.S > +++ b/arch/x86/kernel/ftrace_32.S > @@ -18,12 +18,19 @@ ENTRY(mcount) > END(mcount) > > ENTRY(ftrace_caller) > + > + pushl %ebp > + movl %esp, %ebp > + > pushl %eax > pushl %ecx > pushl %edx > pushl $0 /* Pass NULL as regs pointer */ > - movl 4*4(%esp), %eax > - movl 0x4(%ebp), %edx > + movl 5*4(%esp), %eax > + /* Copy original ebp into %edx */ > + movl 4*4(%esp), %edx > + /* Get the parent ip */ > + movl 0x4(%edx), %edx > movl function_trace_op, %ecx > subl $MCOUNT_INSN_SIZE, %eax > > @@ -35,6 +42,7 @@ ftrace_call: > popl %edx > popl %ecx > popl %eax > + popl %ebp > .Lftrace_ret: > #ifdef CONFIG_FUNCTION_GRAPH_TRACER > .globl ftrace_graph_call > -- > 2.10.2 > > -- Masami Hiramatsu <mhira...@kernel.org>