All of lore.kernel.org
 help / color / mirror / Atom feed
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:07:15 +0200	[thread overview]
Message-ID: <20090520010714.GG6066@nowhere> (raw)
In-Reply-To: <alpine.DEB.2.00.0905192043090.7816@gandalf.stny.rr.com>

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 :-)



>      <= __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


Frederic.


>  static void ftrace_trace_userstack(struct trace_array *tr,
>  				   unsigned long flags, int pc)
>  {
> 


  reply	other threads:[~2009-05-20  1:07 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 [this message]
2009-05-20  1:14   ` Steven Rostedt
2009-05-20  1:55     ` Frederic Weisbecker
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=20090520010714.GG6066@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.