]> Pileus Git - ~andy/linux/commitdiff
tracing: Use direct field, type and system names
authorSteven Rostedt <srostedt@redhat.com>
Thu, 28 Feb 2013 01:41:37 +0000 (20:41 -0500)
committerSteven Rostedt <rostedt@goodmis.org>
Fri, 15 Mar 2013 04:34:47 +0000 (00:34 -0400)
The names used to display the field and type in the event format
files are copied, as well as the system name that is displayed.

All these names are created by constant values passed in.
If one of theses values were to be removed by a module, the module
would also be required to remove any event it created.

By using the strings directly, we can save over 100K of memory.

Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
kernel/trace/trace.h
kernel/trace/trace_events.c

index b825ea2d8c647cda7ec34c54c5e3bcf74089a659..e420f2a230de323dae5732401a68699bb13129f0 100644 (file)
@@ -887,8 +887,8 @@ enum {
 
 struct ftrace_event_field {
        struct list_head        link;
-       char                    *name;
-       char                    *type;
+       const char              *name;
+       const char              *type;
        int                     filter_type;
        int                     offset;
        int                     size;
index 5d8845d36fa87f99f0de6bf7f47fdadc32bb9735..63b4bdf8459383b5f5617cc2f0a71c4164922163 100644 (file)
@@ -72,13 +72,8 @@ static int __trace_define_field(struct list_head *head, const char *type,
        if (!field)
                goto err;
 
-       field->name = kstrdup(name, GFP_KERNEL);
-       if (!field->name)
-               goto err;
-
-       field->type = kstrdup(type, GFP_KERNEL);
-       if (!field->type)
-               goto err;
+       field->name = name;
+       field->type = type;
 
        if (filter_type == FILTER_OTHER)
                field->filter_type = filter_assign_type(type);
@@ -94,8 +89,6 @@ static int __trace_define_field(struct list_head *head, const char *type,
        return 0;
 
 err:
-       if (field)
-               kfree(field->name);
        kmem_cache_free(field_cachep, field);
 
        return -ENOMEM;
@@ -146,8 +139,6 @@ void trace_destroy_fields(struct ftrace_event_call *call)
        head = trace_get_fields(call);
        list_for_each_entry_safe(field, next, head, link) {
                list_del(&field->link);
-               kfree(field->type);
-               kfree(field->name);
                kmem_cache_free(field_cachep, field);
        }
 }
@@ -286,7 +277,6 @@ static void __put_system(struct event_subsystem *system)
                kfree(filter->filter_string);
                kfree(filter);
        }
-       kfree(system->name);
        kfree(system);
 }
 
@@ -1202,10 +1192,7 @@ create_new_subsystem(const char *name)
                return NULL;
 
        system->ref_count = 1;
-       system->name = kstrdup(name, GFP_KERNEL);
-
-       if (!system->name)
-               goto out_free;
+       system->name = name;
 
        system->filter = NULL;
 
@@ -1218,7 +1205,6 @@ create_new_subsystem(const char *name)
        return system;
 
  out_free:
-       kfree(system->name);
        kfree(system);
        return NULL;
 }