tracing: Move event storage for array from macro to standalone function

The code that shows array fields for events is defined for all events.
This can add up quite a bit when you have over 500 events.

By making helper functions in the core kernel to do the work
instead, we can shrink the size of the kernel down a bit.

With a kernel configured with 502 events, the change in size was:

   text    data     bss     dec     hex filename
12990946        1913568 9785344 24689858        178bcc2 /tmp/vmlinux
12987390        1913504 9785344 24686238        178ae9e /tmp/vmlinux.patched

That's a total of 3556 bytes, which comes down to 7 bytes per event.
Although it's not much, this code is just called at initialization of
the events.

Link: http://lkml.kernel.org/r/20120810034708.084036335@goodmis.org

Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
This commit is contained in:
Steven Rostedt 2012-08-09 22:26:46 -04:00 committed by Steven Rostedt
parent 1d6bae966e
commit 35bb4399bd
5 changed files with 33 additions and 26 deletions

View file

@ -20,6 +20,10 @@ static struct hlist_head event_hash[EVENT_HASHSIZE] __read_mostly;
static int next_event_type = __TRACE_LAST_TYPE + 1;
#define EVENT_STORAGE_SIZE 128
static DEFINE_MUTEX(event_storage_mutex);
static char event_storage[EVENT_STORAGE_SIZE];
int trace_print_seq(struct seq_file *m, struct trace_seq *s)
{
int len = s->len >= PAGE_SIZE ? PAGE_SIZE - 1 : s->len;
@ -470,6 +474,23 @@ int ftrace_output_call(struct trace_iterator *iter, char *name, char *fmt, ...)
}
EXPORT_SYMBOL_GPL(ftrace_output_call);
int ftrace_event_define_field(struct ftrace_event_call *call,
char *type, int len, char *item, int offset,
int field_size, int sign, int filter)
{
int ret;
mutex_lock(&event_storage_mutex);
snprintf(event_storage, sizeof(event_storage),
"%s[%d]", type, len);
ret = trace_define_field(call, event_storage, item, offset,
field_size, sign, filter);
mutex_unlock(&event_storage_mutex);
return ret;
}
EXPORT_SYMBOL_GPL(ftrace_event_define_field);
#ifdef CONFIG_KRETPROBES
static inline const char *kretprobed(const char *name)
{