All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jiri Olsa <jolsa@redhat.com>
To: Steven Rostedt <rostedt@goodmis.org>
Cc: fweisbec@gmail.com, linux-kernel@vger.kernel.org
Subject: Re: [PATCHv2 1/3] tracing: proper check for irq_depth routines
Date: Fri, 24 Sep 2010 17:41:02 +0200	[thread overview]
Message-ID: <20100924154102.GB1818@jolsa.brq.redhat.com> (raw)
In-Reply-To: <1285271293.26872.1613.camel@gandalf.stny.rr.com>

On Thu, Sep 23, 2010 at 03:48:13PM -0400, Steven Rostedt wrote:
> On Thu, 2010-09-23 at 14:00 +0200, Jiri Olsa wrote:
> > The check_irq_entry and check_irq_return could be called
> > from graph event context. In such case there's no graph
> > private data allocated. Adding checks to handle this case.
> > 
> > wbr,
> > jirka
> > 
> > 
> > Signed-off-by: Jiri Olsa <jolsa@redhat.com>
> > ---
> >  kernel/trace/trace_functions_graph.c |   24 ++++++++++++++++++++----
> >  1 files changed, 20 insertions(+), 4 deletions(-)
> > 
> > diff --git a/kernel/trace/trace_functions_graph.c b/kernel/trace/trace_functions_graph.c
> > index 02c708a..1390159 100644
> > --- a/kernel/trace/trace_functions_graph.c
> > +++ b/kernel/trace/trace_functions_graph.c
> > @@ -887,12 +887,20 @@ check_irq_entry(struct trace_iterator *iter, u32 flags,
> >  		unsigned long addr, int depth)
> >  {
> >  	int cpu = iter->cpu;
> > +	int *depth_irq;
> >  	struct fgraph_data *data = iter->private;
> > -	int *depth_irq = &(per_cpu_ptr(data->cpu_data, cpu)->depth_irq);
> >  
> > -	if (flags & TRACE_GRAPH_PRINT_IRQS)
> > +	/*
> > +	 * We either display irqs, or we got called as
> > +	 * graph event, and out private data do no exist.
> 
> "out private data do no exist" makes no sense.
> 
> > +	 * In both cases we bypass the irq check.
> > +	 */
> > +	if ((flags & TRACE_GRAPH_PRINT_IRQS) ||
> > +	    (!data))
> >  		return 0;
> >  
> > +	depth_irq = &(per_cpu_ptr(data->cpu_data, cpu)->depth_irq);
> > +
> >  	/*
> >  	 * We are inside the irq code
> >  	 */
> > @@ -925,12 +933,20 @@ static int
> >  check_irq_return(struct trace_iterator *iter, u32 flags, int depth)
> >  {
> >  	int cpu = iter->cpu;
> > +	int *depth_irq;
> >  	struct fgraph_data *data = iter->private;
> > -	int *depth_irq = &(per_cpu_ptr(data->cpu_data, cpu)->depth_irq);
> >  
> > -	if (flags & TRACE_GRAPH_PRINT_IRQS)
> > +	/*
> > +	 * We either display irqs, or we got called as
> > +	 * graph event, and out private data do no exist.
> 
> ditto.
> 
> -- Steve
> 
> > +	 * In both cases we bypass the irq check.
> > +	 */
> > +	if ((flags & TRACE_GRAPH_PRINT_IRQS) ||
> > +	    (!data))
> >  		return 0;
> >  
> > +	depth_irq = &(per_cpu_ptr(data->cpu_data, cpu)->depth_irq);
> > +
> >  	/*
> >  	 * We are not inside the irq code.
> >  	 */
> 
> 

hi,
attaching changed patch

thanks,
jirka

---
The check_irq_entry and check_irq_return could be called
from graph event context. In such case there's no graph
private data allocated. Adding checks to handle this case.

wbr,
jirka


Signed-off-by: Jiri Olsa <jolsa@redhat.com>
---
 kernel/trace/trace_functions_graph.c |   24 ++++++++++++++++++++----
 1 files changed, 20 insertions(+), 4 deletions(-)

diff --git a/kernel/trace/trace_functions_graph.c b/kernel/trace/trace_functions_graph.c
index 02c708a..1390159 100644
--- a/kernel/trace/trace_functions_graph.c
+++ b/kernel/trace/trace_functions_graph.c
@@ -887,12 +887,20 @@ check_irq_entry(struct trace_iterator *iter, u32 flags,
 		unsigned long addr, int depth)
 {
 	int cpu = iter->cpu;
+	int *depth_irq;
 	struct fgraph_data *data = iter->private;
-	int *depth_irq = &(per_cpu_ptr(data->cpu_data, cpu)->depth_irq);
 
-	if (flags & TRACE_GRAPH_PRINT_IRQS)
+	/*
+	 * We either display irqs, or we got called as
+	 * graph event, and private data do no exist.
+	 * In both cases we bypass the irq check.
+	 */
+	if ((flags & TRACE_GRAPH_PRINT_IRQS) ||
+	    (!data))
 		return 0;
 
+	depth_irq = &(per_cpu_ptr(data->cpu_data, cpu)->depth_irq);
+
 	/*
 	 * We are inside the irq code
 	 */
@@ -925,12 +933,20 @@ static int
 check_irq_return(struct trace_iterator *iter, u32 flags, int depth)
 {
 	int cpu = iter->cpu;
+	int *depth_irq;
 	struct fgraph_data *data = iter->private;
-	int *depth_irq = &(per_cpu_ptr(data->cpu_data, cpu)->depth_irq);
 
-	if (flags & TRACE_GRAPH_PRINT_IRQS)
+	/*
+	 * We either display irqs, or we got called as
+	 * graph event, and private data do no exist.
+	 * In both cases we bypass the irq check.
+	 */
+	if ((flags & TRACE_GRAPH_PRINT_IRQS) ||
+	    (!data))
 		return 0;
 
+	depth_irq = &(per_cpu_ptr(data->cpu_data, cpu)->depth_irq);
+
 	/*
 	 * We are not inside the irq code.
 	 */
-- 
1.7.1


  reply	other threads:[~2010-09-24 15:41 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-09-23 12:00 [PATCHv2 0/3] tracing: function graph output for wakeup tracer Jiri Olsa
2010-09-23 12:00 ` [PATCHv2 1/3] tracing: proper check for irq_depth routines Jiri Olsa
2010-09-23 19:48   ` Steven Rostedt
2010-09-24 15:41     ` Jiri Olsa [this message]
2010-10-20  4:58       ` [tip:perf/core] tracing: Add " tip-bot for Jiri Olsa
2010-09-23 12:00 ` [PATCHv2 2/3] tracing: librarize graph related irqs/preemptsoff calls Jiri Olsa
2010-10-20  4:59   ` [tip:perf/core] tracing: Make graph related irqs/preemptsoff functions global tip-bot for Jiri Olsa
2010-09-23 12:00 ` [PATCHv2 3/3] tracing: graph support for wakeup tracer Jiri Olsa
2010-10-20  4:59   ` [tip:perf/core] tracing: Graph " tip-bot for Jiri Olsa

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=20100924154102.GB1818@jolsa.brq.redhat.com \
    --to=jolsa@redhat.com \
    --cc=fweisbec@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --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.