aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
authorSteven Rostedt <srostedt@redhat.com>2012-08-09 22:26:46 -0400
committerSteven Rostedt <rostedt@goodmis.org>2014-03-07 10:06:06 -0500
commit35bb4399bd0ef16b8a57fccea0047d98b6b0e7fb (patch)
tree16b340bd7b6d1e17e9d78d7d3ea88141cf2e3905 /kernel
parent1d6bae966e90134bcfd7807b8f9488d55198de91 (diff)
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>
Diffstat (limited to 'kernel')
-rw-r--r--kernel/trace/trace_events.c6
-rw-r--r--kernel/trace/trace_export.c12
-rw-r--r--kernel/trace/trace_output.c21
3 files changed, 25 insertions, 14 deletions
diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c
index e71ffd4eccb5..22826c73a9da 100644
--- a/kernel/trace/trace_events.c
+++ b/kernel/trace/trace_events.c
@@ -27,12 +27,6 @@
27 27
28DEFINE_MUTEX(event_mutex); 28DEFINE_MUTEX(event_mutex);
29 29
30DEFINE_MUTEX(event_storage_mutex);
31EXPORT_SYMBOL_GPL(event_storage_mutex);
32
33char event_storage[EVENT_STORAGE_SIZE];
34EXPORT_SYMBOL_GPL(event_storage);
35
36LIST_HEAD(ftrace_events); 30LIST_HEAD(ftrace_events);
37static LIST_HEAD(ftrace_common_fields); 31static LIST_HEAD(ftrace_common_fields);
38 32
diff --git a/kernel/trace/trace_export.c b/kernel/trace/trace_export.c
index 7c3e3e72e2b6..39c746c5ae73 100644
--- a/kernel/trace/trace_export.c
+++ b/kernel/trace/trace_export.c
@@ -96,14 +96,10 @@ static void __always_unused ____ftrace_check_##name(void) \
96#define __array(type, item, len) \ 96#define __array(type, item, len) \
97 do { \ 97 do { \
98 BUILD_BUG_ON(len > MAX_FILTER_STR_VAL); \ 98 BUILD_BUG_ON(len > MAX_FILTER_STR_VAL); \
99 mutex_lock(&event_storage_mutex); \ 99 ret = ftrace_event_define_field(event_call, #type, len, \
100 snprintf(event_storage, sizeof(event_storage), \ 100 #item, offsetof(typeof(field), item), \
101 "%s[%d]", #type, len); \ 101 sizeof(field.item), \
102 ret = trace_define_field(event_call, event_storage, #item, \ 102 is_signed_type(type), filter_type); \
103 offsetof(typeof(field), item), \
104 sizeof(field.item), \
105 is_signed_type(type), filter_type); \
106 mutex_unlock(&event_storage_mutex); \
107 if (ret) \ 103 if (ret) \
108 return ret; \ 104 return ret; \
109 } while (0); 105 } while (0);
diff --git a/kernel/trace/trace_output.c b/kernel/trace/trace_output.c
index ca0e79e2abaa..ee8d74840b88 100644
--- a/kernel/trace/trace_output.c
+++ b/kernel/trace/trace_output.c
@@ -20,6 +20,10 @@ static struct hlist_head event_hash[EVENT_HASHSIZE] __read_mostly;
20 20
21static int next_event_type = __TRACE_LAST_TYPE + 1; 21static int next_event_type = __TRACE_LAST_TYPE + 1;
22 22
23#define EVENT_STORAGE_SIZE 128
24static DEFINE_MUTEX(event_storage_mutex);
25static char event_storage[EVENT_STORAGE_SIZE];
26
23int trace_print_seq(struct seq_file *m, struct trace_seq *s) 27int trace_print_seq(struct seq_file *m, struct trace_seq *s)
24{ 28{
25 int len = s->len >= PAGE_SIZE ? PAGE_SIZE - 1 : s->len; 29 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, ...)
470} 474}
471EXPORT_SYMBOL_GPL(ftrace_output_call); 475EXPORT_SYMBOL_GPL(ftrace_output_call);
472 476
477int ftrace_event_define_field(struct ftrace_event_call *call,
478 char *type, int len, char *item, int offset,
479 int field_size, int sign, int filter)
480{
481 int ret;
482
483 mutex_lock(&event_storage_mutex);
484 snprintf(event_storage, sizeof(event_storage),
485 "%s[%d]", type, len);
486 ret = trace_define_field(call, event_storage, item, offset,
487 field_size, sign, filter);
488 mutex_unlock(&event_storage_mutex);
489
490 return ret;
491}
492EXPORT_SYMBOL_GPL(ftrace_event_define_field);
493
473#ifdef CONFIG_KRETPROBES 494#ifdef CONFIG_KRETPROBES
474static inline const char *kretprobed(const char *name) 495static inline const char *kretprobed(const char *name)
475{ 496{