]> git.openfabrics.org - ~shefty/rdma-dev.git/blobdiff - kernel/trace/trace_events_filter.c
Merge branch 'perf/urgent' into perf/core
[~shefty/rdma-dev.git] / kernel / trace / trace_events_filter.c
index 95dc31efd6dd503dbd169a159dac4c5048f5a568..f04cc3136bd370b6fbf9007cb7067ec1476892d4 100644 (file)
 #include "trace.h"
 #include "trace_output.h"
 
+#define DEFAULT_SYS_FILTER_MESSAGE                                     \
+       "### global filter ###\n"                                       \
+       "# Use this to set filters for multiple events.\n"              \
+       "# Only events with the given fields will be affected.\n"       \
+       "# If no events are modified, an error message will be displayed here"
+
 enum filter_op_ids
 {
        OP_OR,
@@ -646,7 +652,7 @@ void print_subsystem_event_filter(struct event_subsystem *system,
        if (filter && filter->filter_string)
                trace_seq_printf(s, "%s\n", filter->filter_string);
        else
-               trace_seq_printf(s, "none\n");
+               trace_seq_printf(s, DEFAULT_SYS_FILTER_MESSAGE "\n");
        mutex_unlock(&event_mutex);
 }
 
@@ -1838,7 +1844,10 @@ int apply_subsystem_event_filter(struct event_subsystem *system,
        if (!filter)
                goto out;
 
-       replace_filter_string(filter, filter_string);
+       /* System filters just show a default message */
+       kfree(filter->filter_string);
+       filter->filter_string = NULL;
+
        /*
         * No event actually uses the system filter
         * we can free it without synchronize_sched().
@@ -1848,14 +1857,12 @@ int apply_subsystem_event_filter(struct event_subsystem *system,
 
        parse_init(ps, filter_ops, filter_string);
        err = filter_parse(ps);
-       if (err) {
-               append_filter_err(ps, system->filter);
-               goto out;
-       }
+       if (err)
+               goto err_filter;
 
        err = replace_system_preds(system, ps, filter_string);
        if (err)
-               append_filter_err(ps, system->filter);
+               goto err_filter;
 
 out:
        filter_opstack_clear(ps);
@@ -1865,6 +1872,11 @@ out_unlock:
        mutex_unlock(&event_mutex);
 
        return err;
+
+err_filter:
+       replace_filter_string(filter, filter_string);
+       append_filter_err(ps, system->filter);
+       goto out;
 }
 
 #ifdef CONFIG_PERF_EVENTS