From: Frederic Weisbecker <fweisbec@gmail.com>
To: Steven Rostedt <rostedt@goodmis.org>
Cc: LKML <linux-kernel@vger.kernel.org>, Ingo Molnar <mingo@elte.hu>,
Andrew Morton <akpm@linux-foundation.org>
Subject: Re: [PATCH][GIT PULL] tracing: add trace_stack interface
Date: Wed, 20 May 2009 03:55:02 +0200 [thread overview]
Message-ID: <20090520015501.GI6066@nowhere> (raw)
In-Reply-To: <alpine.DEB.2.00.0905192112090.7816@gandalf.stny.rr.com>
On Tue, May 19, 2009 at 09:14:13PM -0400, Steven Rostedt wrote:
>
> On Wed, 20 May 2009, Frederic Weisbecker wrote:
>
> > On Tue, May 19, 2009 at 08:44:50PM -0400, Steven Rostedt wrote:
> > >
> > > Ingo,
> > >
> > > Please pull the latest tip/tracing/ftrace tree, which can be found at:
> > >
> > > git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-2.6-trace.git
> > > tip/tracing/ftrace
> > >
> > >
> > > Steven Rostedt (1):
> > > tracing: add trace_stack interface
> > >
> > > ----
> > > include/linux/kernel.h | 2 ++
> > > kernel/trace/trace.c | 15 +++++++++++++++
> > > 2 files changed, 17 insertions(+), 0 deletions(-)
> > > ---------------------------
> > > commit b85d1029ba534376d203c3ac83a2e5a4d6876cb6
> > > Author: Steven Rostedt <srostedt@redhat.com>
> > > Date: Tue May 19 18:54:16 2009 -0400
> > >
> > > tracing: add trace_stack interface
> > >
> > > This patch adds the global function
> > >
> > > void trace_stack(void)
> > >
> > > This allows a developer to find where a function is called. For example,
> > > if you want to know who calls __netif_reschedule, you can add
> > >
> > > static inline void __netif_reschedule(struct Qdisc *q)
> > > {
> > > struct softnet_data *sd;
> > > unsigned long flags;
> > >
> > > + trace_stack();
> > > local_irq_save(flags);
> > > sd = &__get_cpu_var(softnet_data);
> > > q->next_sched = sd->output_queue;
> > >
> > > And see the following in the trace output:
> > >
> > > <= __ftrace_trace_stack
> > > <= trace_stack
> >
> >
> >
> > I guess the depth should begin here :-)
>
> Yeah, I thought about that but since it only prints out the stack trace,
> this is sorta the "this is a stack trace" header.
Indeed :)
> >
> >
> >
> > > <= __netif_schedule
> > > <= dev_watchdog
> > > <= run_timer_softirq
> > > <= __do_softirq
> > > <= call_softirq
> > > <= do_softirq
> > > <= irq_exit
> > >
> > > Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
> > >
> > > diff --git a/include/linux/kernel.h b/include/linux/kernel.h
> > > index 883cd44..347a0f1 100644
> > > --- a/include/linux/kernel.h
> > > +++ b/include/linux/kernel.h
> > > @@ -511,6 +511,7 @@ extern int
> > > __ftrace_vprintk(unsigned long ip, const char *fmt, va_list ap);
> > >
> > > extern void ftrace_dump(void);
> > > +extern void trace_stack(void);
> > > #else
> > > static inline void
> > > ftrace_special(unsigned long arg1, unsigned long arg2, unsigned long arg3) { }
> > > @@ -531,6 +532,7 @@ ftrace_vprintk(const char *fmt, va_list ap)
> > > return 0;
> > > }
> > > static inline void ftrace_dump(void) { }
> > > +static inline void trace_stack(void) { }
> > > #endif /* CONFIG_TRACING */
> > >
> > > /*
> > > diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
> > > index dd40d23..33ab502 100644
> > > --- a/kernel/trace/trace.c
> > > +++ b/kernel/trace/trace.c
> > > @@ -1046,6 +1046,21 @@ void __trace_stack(struct trace_array *tr,
> > > __ftrace_trace_stack(tr, flags, skip, pc);
> > > }
> > >
> > > +/**
> > > + * trace_stack - dump the stack into the trace buffer
> > > + *
> > > + * Use this to record the stack trace into the ring buffer. If you
> > > + * want to know a caller of a function, place a call to trace_stack
> > > + * and the ftrace trace file will display who the callers were.
> > > + */
> > > +void trace_stack(void)
> > > +{
> > > + unsigned long flags;
> > > +
> > > + local_save_flags(flags);
> > > + __trace_stack(&global_trace, flags, 0, preempt_count());
> > > +}
> >
> >
> >
> > Stupidly I use a very similar patch while working on reiserfs
> > but I forgot to post it.
> >
> > Another trick is to use trace_printk() combined with:
> >
> > echo stacktrace > trace_option
>
> Yeah, but when you are debugging development work, doing that at every
> boot up becomes a pain. You can add it to a rc script but still.
Right!
> I wrote this because of the development I'm doing in the interrupt
> threads. I was using this a lot to find what is calling what.
>
> -- Steve
>
next prev parent reply other threads:[~2009-05-20 1:55 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-05-20 0:44 [PATCH][GIT PULL] tracing: add trace_stack interface Steven Rostedt
2009-05-20 1:07 ` Frederic Weisbecker
2009-05-20 1:14 ` Steven Rostedt
2009-05-20 1:55 ` Frederic Weisbecker [this message]
2009-05-20 1:09 ` [PATCH v2][GIT " Steven Rostedt
2009-06-03 21:48 ` Frederic Weisbecker
2009-06-03 22:18 ` Steven Rostedt
2009-06-04 11:53 ` Ingo Molnar
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=20090520015501.GI6066@nowhere \
--to=fweisbec@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=rostedt@goodmis.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.