lkml.org 
[lkml]   [2009]   [Apr]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH] tracing/filters: allow event filters to be set only when not tracing

On Sat, 4 Apr 2009, Tom Zanussi wrote:
>
> Hmm, after reading Paul's replies, it sounds like this approach might be
> more trouble than it's worth. Maybe going back to the idea of
> temporarily stopping/starting tracing would be a better idea, but with a
> little more heavyweight version of the current 'quick' tracing
> start/stop (that would prevent entering the tracing functions (and ththe
> filter_check_discard()).


Actually, I forgot what the general problem we are avoiding here with the
RCU locks. Could you explain that again. Just so that I can get a better
idea without having to read between the lines of the previous messages in
this thread.


>
> I was thinking it would be something like:
>
> stop_tracing();
> current_tracer->stop(); /* unregister tracepoints, etc */
>
> remove filter
>
> current_tracer->start(); /* reregister tracepoints, etc */
> start_tracing();

This use to be the way start and stop worked, but I'm trying to
make them more light weight. I've been wanting start/stop to be called
by start_tracing() and stop_tracing() and those should be able to be
called in any context. But registering and unregistering tracepoints calls
mutexes, which can not be done in atomic context.

There are still some tracers that have start/stop using sleeping code, but
in the long run I want the tracers start/stop functions to be light.


>
> The struct tracer comments suggest that the stop()/start()
> ops are meant for pausing, I'd guess for things like this, but some of
> the tracers don't implement them.

Yeah, They should, but leaving out the start/stop functions, is just
the tracers way of saying, I don't need to pause. :-/

>
> For the events in the event tracer, it would be something like:
>
> stop_tracing();
> call->unregfunc(); /* unregister tracepoint */
>
> remove filter
>
> call->regfunc(); /* reregister tracepoint */
> start_tracing();
>
> If that makes sense, I can try it that way instead.
>

I'll comment about this if I get that explanation of the problem again ;-)

-- Steve



\
 
 \ /
  Last update: 2009-04-04 17:53    [from the cache]
©2003-2014 Jasper Spaans. Advertise on this site