lkml.org 
[lkml]   [2009]   [Sep]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 1/6] tracing/filters: refactor subsystem filter code
    Change:
    for_each_pred
    for_each_subsystem
    To:
    for_each_subsystem
    for_each_pred

    This change also prepares for the next patch.

    Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
    ---
    kernel/trace/trace.h | 1 -
    kernel/trace/trace_events_filter.c | 124 +++++++++++++-----------------------
    2 files changed, 45 insertions(+), 80 deletions(-)

    diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h
    index ea7e0bc..2b47eba 100644
    --- a/kernel/trace/trace.h
    +++ b/kernel/trace/trace.h
    @@ -790,7 +790,6 @@ struct event_filter {
    int n_preds;
    struct filter_pred **preds;
    char *filter_string;
    - bool no_reset;
    };

    struct event_subsystem {
    diff --git a/kernel/trace/trace_events_filter.c b/kernel/trace/trace_events_filter.c
    index 93660fb..f9afbdf 100644
    --- a/kernel/trace/trace_events_filter.c
    +++ b/kernel/trace/trace_events_filter.c
    @@ -458,14 +458,7 @@ static int init_subsystem_preds(struct event_subsystem *system)
    return 0;
    }

    -enum {
    - FILTER_DISABLE_ALL,
    - FILTER_INIT_NO_RESET,
    - FILTER_SKIP_NO_RESET,
    -};
    -
    -static void filter_free_subsystem_preds(struct event_subsystem *system,
    - int flag)
    +static void filter_free_subsystem_preds(struct event_subsystem *system)
    {
    struct ftrace_event_call *call;

    @@ -476,14 +469,6 @@ static void filter_free_subsystem_preds(struct event_subsystem *system,
    if (strcmp(call->system, system->name) != 0)
    continue;

    - if (flag == FILTER_INIT_NO_RESET) {
    - call->filter->no_reset = false;
    - continue;
    - }
    -
    - if (flag == FILTER_SKIP_NO_RESET && call->filter->no_reset)
    - continue;
    -
    filter_disable_preds(call);
    remove_filter_string(call->filter);
    }
    @@ -657,44 +642,6 @@ add_pred_fn:
    return 0;
    }

    -static int filter_add_subsystem_pred(struct filter_parse_state *ps,
    - struct event_subsystem *system,
    - struct filter_pred *pred,
    - char *filter_string,
    - bool dry_run)
    -{
    - struct ftrace_event_call *call;
    - int err = 0;
    - bool fail = true;
    -
    - list_for_each_entry(call, &ftrace_events, list) {
    -
    - if (!call->define_fields)
    - continue;
    -
    - if (strcmp(call->system, system->name))
    - continue;
    -
    - if (call->filter->no_reset)
    - continue;
    -
    - err = filter_add_pred(ps, call, pred, dry_run);
    - if (err)
    - call->filter->no_reset = true;
    - else
    - fail = false;
    -
    - if (!dry_run)
    - replace_filter_string(call->filter, filter_string);
    - }
    -
    - if (fail) {
    - parse_error(ps, FILT_ERR_BAD_SUBSYS_FILTER, 0);
    - return err;
    - }
    - return 0;
    -}
    -
    static void parse_init(struct filter_parse_state *ps,
    struct filter_op *ops,
    char *infix_string)
    @@ -1048,8 +995,7 @@ static int check_preds(struct filter_parse_state *ps)
    return 0;
    }

    -static int replace_preds(struct event_subsystem *system,
    - struct ftrace_event_call *call,
    +static int replace_preds(struct ftrace_event_call *call,
    struct filter_parse_state *ps,
    char *filter_string,
    bool dry_run)
    @@ -1096,11 +1042,7 @@ static int replace_preds(struct event_subsystem *system,
    add_pred:
    if (!pred)
    return -ENOMEM;
    - if (call)
    - err = filter_add_pred(ps, call, pred, false);
    - else
    - err = filter_add_subsystem_pred(ps, system, pred,
    - filter_string, dry_run);
    + err = filter_add_pred(ps, call, pred, dry_run);
    filter_free_pred(pred);
    if (err)
    return err;
    @@ -1111,6 +1053,44 @@ add_pred:
    return 0;
    }

    +static int replace_system_preds(struct event_subsystem *system,
    + struct filter_parse_state *ps,
    + char *filter_string)
    +{
    + struct ftrace_event_call *call;
    + int err;
    + bool fail = true;
    +
    + list_for_each_entry(call, &ftrace_events, list) {
    +
    + if (!call->define_fields)
    + continue;
    +
    + if (strcmp(call->system, system->name) != 0)
    + continue;
    +
    + /* try to see if the filter can be applied */
    + err = replace_preds(call, ps, filter_string, true);
    + if (err)
    + continue;
    +
    + /* really apply the filter */
    + filter_disable_preds(call);
    + err = replace_preds(call, ps, filter_string, false);
    + if (err)
    + filter_disable_preds(call);
    + else
    + replace_filter_string(call->filter, filter_string);
    + fail = false;
    + }
    +
    + if (fail) {
    + parse_error(ps, FILT_ERR_BAD_SUBSYS_FILTER, 0);
    + return err;
    + }
    + return 0;
    +}
    +
    int apply_event_filter(struct ftrace_event_call *call, char *filter_string)
    {
    int err;
    @@ -1145,7 +1125,7 @@ int apply_event_filter(struct ftrace_event_call *call, char *filter_string)
    goto out;
    }

    - err = replace_preds(NULL, call, ps, filter_string, false);
    + err = replace_preds(call, ps, filter_string, false);
    if (err)
    append_filter_err(ps, call->filter);

    @@ -1173,7 +1153,7 @@ int apply_subsystem_event_filter(struct event_subsystem *system,
    goto out_unlock;

    if (!strcmp(strstrip(filter_string), "0")) {
    - filter_free_subsystem_preds(system, FILTER_DISABLE_ALL);
    + filter_free_subsystem_preds(system);
    remove_filter_string(system->filter);
    mutex_unlock(&event_mutex);
    return 0;
    @@ -1193,23 +1173,9 @@ int apply_subsystem_event_filter(struct event_subsystem *system,
    goto out;
    }

    - filter_free_subsystem_preds(system, FILTER_INIT_NO_RESET);
    -
    - /* try to see the filter can be applied to which events */
    - err = replace_preds(system, NULL, ps, filter_string, true);
    - if (err) {
    - append_filter_err(ps, system->filter);
    - goto out;
    - }
    -
    - filter_free_subsystem_preds(system, FILTER_SKIP_NO_RESET);
    -
    - /* really apply the filter to the events */
    - err = replace_preds(system, NULL, ps, filter_string, false);
    - if (err) {
    + err = replace_system_preds(system, ps, filter_string);
    + if (err)
    append_filter_err(ps, system->filter);
    - filter_free_subsystem_preds(system, 2);
    - }

    out:
    filter_opstack_clear(ps);
    --
    1.6.3


    \
     
     \ /
      Last update: 2009-09-07 10:17    [W:0.040 / U:91.920 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site