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    [W:0.023 / U:0.020 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site