tracing: Don't allocate common fields for every trace events
[firefly-linux-kernel-4.4.55.git] / kernel / trace / trace_events_filter.c
index 57bb1bb329997f62bc5805e6a3af8d5ecf64479a..330fefd1de1cade21986d97c37df14fb9189262d 100644 (file)
@@ -497,12 +497,10 @@ void print_subsystem_event_filter(struct event_subsystem *system,
 }
 
 static struct ftrace_event_field *
-find_event_field(struct ftrace_event_call *call, char *name)
+__find_event_field(struct list_head *head, char *name)
 {
        struct ftrace_event_field *field;
-       struct list_head *head;
 
-       head = trace_get_fields(call);
        list_for_each_entry(field, head, link) {
                if (!strcmp(field->name, name))
                        return field;
@@ -511,6 +509,20 @@ find_event_field(struct ftrace_event_call *call, char *name)
        return NULL;
 }
 
+static struct ftrace_event_field *
+find_event_field(struct ftrace_event_call *call, char *name)
+{
+       struct ftrace_event_field *field;
+       struct list_head *head;
+
+       field = __find_event_field(&ftrace_common_fields, name);
+       if (field)
+               return field;
+
+       head = trace_get_fields(call);
+       return __find_event_field(head, name);
+}
+
 static void filter_free_pred(struct filter_pred *pred)
 {
        if (!pred)