Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1601702 > unrolled thread
| Started by | Steven Rostedt <rostedt@goodmis.org> |
|---|---|
| First post | 2017-03-15 21:20 +0100 |
| Last post | 2017-03-15 22:30 +0100 |
| Articles | 2 — 2 participants |
Back to article view | Back to linux.kernel
This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by
below is the oldest one visible, not the original post.
[RFC][PATCH 3/5] ftrace/x86_32: Add stack frame pointer to ftrace_caller Steven Rostedt <rostedt@goodmis.org> - 2017-03-15 21:20 +0100
Re: [RFC][PATCH 3/5] ftrace/x86_32: Add stack frame pointer to ftrace_caller Josh Poimboeuf <jpoimboe@redhat.com> - 2017-03-15 22:30 +0100
| From | Steven Rostedt <rostedt@goodmis.org> |
|---|---|
| Date | 2017-03-15 21:20 +0100 |
| Subject | [RFC][PATCH 3/5] ftrace/x86_32: Add stack frame pointer to ftrace_caller |
| Message-ID | <tlnyN-4i6-1@gated-at.bofh.it> |
From: "Steven Rostedt (VMware)" <rostedt@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
Signed-off-by: Steven Rostedt (VMware) <rostedt@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 4ff30f31f0a5..73d61a62649d 100644
--- a/arch/x86/kernel/ftrace_32.S
+++ b/arch/x86/kernel/ftrace_32.S
@@ -17,12 +17,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
@@ -34,6 +41,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
[toc] | [next] | [standalone]
| From | Josh Poimboeuf <jpoimboe@redhat.com> |
|---|---|
| Date | 2017-03-15 22:30 +0100 |
| Subject | Re: [RFC][PATCH 3/5] ftrace/x86_32: Add stack frame pointer to ftrace_caller |
| Message-ID | <tloEy-50F-21@gated-at.bofh.it> |
| In reply to | #1601702 |
On Wed, Mar 15, 2017 at 03:55:30PM -0400, Steven Rostedt wrote: > From: "Steven Rostedt (VMware)" <rostedt@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 > > Signed-off-by: Steven Rostedt (VMware) <rostedt@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 4ff30f31f0a5..73d61a62649d 100644 > --- a/arch/x86/kernel/ftrace_32.S > +++ b/arch/x86/kernel/ftrace_32.S > @@ -17,12 +17,19 @@ ENTRY(mcount) > END(mcount) > > ENTRY(ftrace_caller) > + > + pushl %ebp > + movl %esp, %ebp > + The operands for the above two instructions should be vertically aligned like the rest of the code. Otherwise: Reviewed-by: Josh Poimboeuf <jpoimboe@redhat.com> -- Josh
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web