Re: [PATCH V3] tracing: Make latency tracers fully support the set_graph_notrace

From: Steven Rostedt
Date: Tue Jun 28 2016 - 16:04:16 EST


On Tue, 28 Jun 2016 04:03:12 -0400 (EDT)
Chunyu Hu <chuhu@xxxxxxxxxx> wrote:

> Hello,
>
>
> Thanks for attention. It needs about three trace entries after the graph_entry
> of the filtered function, and the entries are all the sub call of the filtered
> function. As tracing_max_latency will be set to the last
> latency value, and only entries with larger latency can be submitted. So
> looks like i missed the reset of the tracing_max_latency. After experiments,
> I wrote a small script, hope it can show something on your machine.
>
> set -x
> debugfs=/sys/kernel/debug
> tracing=/sys/kernel/debug/tracing/
>
> grep debugfs /proc/mounts || mount -t debugfs d $debugfs
>
> echo nop > $tracing/current_tracer
> echo 1 > $tracing/options/display-graph
> echo schedule > $tracing/set_graph_notrace
> echo wakeup > $tracing/current_tracer
>
> for i in $(seq 1 100); do
> for i in $(seq 1 20); do
> echo 1 > $tracing/tracing_max_latency
> cat $tracing/trace > /dev/null
> done
> done
>

Can you post the actually oops you are seeing, because I'm still unable
to trigger this.

-- Steve

>
> > Anyway, the patch looks good to me.
> >
> > Acked-by: Namhyung Kim <namhyung@xxxxxxxxxx>
> >
> > Thanks,
> > Namhyung
> >
> >
> > >
> > > Signed-off-by: Chunyu Hu <chuhu@xxxxxxxxxx>
> > > ---
> > > kernel/trace/trace_irqsoff.c | 6 ++++++
> > > kernel/trace/trace_sched_wakeup.c | 6 ++++++
> > > 2 files changed, 12 insertions(+)
> > >
> > > diff --git a/kernel/trace/trace_irqsoff.c b/kernel/trace/trace_irqsoff.c
> > > index 03cdff8..a4ed46a 100644
> > > --- a/kernel/trace/trace_irqsoff.c
> > > +++ b/kernel/trace/trace_irqsoff.c
> > > @@ -175,6 +175,12 @@ static int irqsoff_graph_entry(struct ftrace_graph_ent
> > > *trace)
> > > int ret;
> > > int pc;
> > >
> > > + if (trace->depth < 0)
> > > + return 0;
> > > +
> > > + if (ftrace_graph_notrace_addr(trace->func))
> > > + return 1;
> > > +
> > > if (!func_prolog_dec(tr, &data, &flags))
> > > return 0;
> > >
> > > diff --git a/kernel/trace/trace_sched_wakeup.c
> > > b/kernel/trace/trace_sched_wakeup.c
> > > index 9d4399b..e54fff7 100644
> > > --- a/kernel/trace/trace_sched_wakeup.c
> > > +++ b/kernel/trace/trace_sched_wakeup.c
> > > @@ -239,6 +239,12 @@ static int wakeup_graph_entry(struct ftrace_graph_ent
> > > *trace)
> > > unsigned long flags;
> > > int pc, ret = 0;
> > >
> > > + if (trace->depth < 0)
> > > + return 0;
> > > +
> > > + if (ftrace_graph_notrace_addr(trace->func))
> > > + return 1;
> > > +
> > > if (!func_prolog_preempt_disable(tr, &data, &pc))
> > > return 0;
> > >
> > > --
> > > 1.8.3.1
> > >
> >
>