Messages in this thread | | | Date | Tue, 2 Jun 2009 15:30:14 -0400 (EDT) | From | Steven Rostedt <> | Subject | Re: [PATCH 2/3] function-graph: enable the stack after initialization of other variables |
| |
On Tue, 2 Jun 2009, Frederic Weisbecker wrote: > > diff --git a/kernel/trace/trace_functions_graph.c b/kernel/trace/trace_functions_graph.c > > index d28687e..baeb5fe 100644 > > --- a/kernel/trace/trace_functions_graph.c > > +++ b/kernel/trace/trace_functions_graph.c > > @@ -65,6 +65,12 @@ ftrace_push_return_trace(unsigned long ret, unsigned long func, int *depth) > > if (!current->ret_stack) > > return -EBUSY; > > > > + /* > > + * We must make sure the ret_stack is tested before we read > > + * anything else. > > + */ > > + smp_rmb(); > > > Isn't this part a too much costly for very traced function?
I was thinking that, but otherwise we still have the problem. It is a read barrier which I don't think is as costly as a write or full barrier. But because we have the if statement, perhaps a "read_barrier_depends" can do?
[ added Paul McKenney because he's good with barriers ]
-- Steve
> > > > + > > /* The return trace stack is full */ > > if (current->curr_ret_stack == FTRACE_RETFUNC_DEPTH - 1) { > > atomic_inc(¤t->trace_overrun); > > -- > > 1.6.3.1 > > > > -- > >
| |