diff options
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/trace/trace_events.c | 6 | ||||
-rw-r--r-- | kernel/trace/trace_export.c | 12 | ||||
-rw-r--r-- | kernel/trace/trace_output.c | 21 |
3 files changed, 14 insertions, 25 deletions
diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c index b8f73b333a3c..2f7b8e31e3a4 100644 --- a/kernel/trace/trace_events.c +++ b/kernel/trace/trace_events.c | |||
@@ -27,6 +27,12 @@ | |||
27 | 27 | ||
28 | DEFINE_MUTEX(event_mutex); | 28 | DEFINE_MUTEX(event_mutex); |
29 | 29 | ||
30 | DEFINE_MUTEX(event_storage_mutex); | ||
31 | EXPORT_SYMBOL_GPL(event_storage_mutex); | ||
32 | |||
33 | char event_storage[EVENT_STORAGE_SIZE]; | ||
34 | EXPORT_SYMBOL_GPL(event_storage); | ||
35 | |||
30 | LIST_HEAD(ftrace_events); | 36 | LIST_HEAD(ftrace_events); |
31 | static LIST_HEAD(ftrace_common_fields); | 37 | static LIST_HEAD(ftrace_common_fields); |
32 | 38 | ||
diff --git a/kernel/trace/trace_export.c b/kernel/trace/trace_export.c index 39c746c5ae73..7c3e3e72e2b6 100644 --- a/kernel/trace/trace_export.c +++ b/kernel/trace/trace_export.c | |||
@@ -96,10 +96,14 @@ 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 | ret = ftrace_event_define_field(event_call, #type, len, \ | 99 | mutex_lock(&event_storage_mutex); \ |
100 | #item, offsetof(typeof(field), item), \ | 100 | snprintf(event_storage, sizeof(event_storage), \ |
101 | sizeof(field.item), \ | 101 | "%s[%d]", #type, len); \ |
102 | is_signed_type(type), filter_type); \ | 102 | ret = trace_define_field(event_call, event_storage, #item, \ |
103 | offsetof(typeof(field), item), \ | ||
104 | sizeof(field.item), \ | ||
105 | is_signed_type(type), filter_type); \ | ||
106 | mutex_unlock(&event_storage_mutex); \ | ||
103 | if (ret) \ | 107 | if (ret) \ |
104 | return ret; \ | 108 | return ret; \ |
105 | } while (0); | 109 | } while (0); |
diff --git a/kernel/trace/trace_output.c b/kernel/trace/trace_output.c index ee8d74840b88..ca0e79e2abaa 100644 --- a/kernel/trace/trace_output.c +++ b/kernel/trace/trace_output.c | |||
@@ -20,10 +20,6 @@ static struct hlist_head event_hash[EVENT_HASHSIZE] __read_mostly; | |||
20 | 20 | ||
21 | static int next_event_type = __TRACE_LAST_TYPE + 1; | 21 | static int next_event_type = __TRACE_LAST_TYPE + 1; |
22 | 22 | ||
23 | #define EVENT_STORAGE_SIZE 128 | ||
24 | static DEFINE_MUTEX(event_storage_mutex); | ||
25 | static char event_storage[EVENT_STORAGE_SIZE]; | ||
26 | |||
27 | int trace_print_seq(struct seq_file *m, struct trace_seq *s) | 23 | int trace_print_seq(struct seq_file *m, struct trace_seq *s) |
28 | { | 24 | { |
29 | int len = s->len >= PAGE_SIZE ? PAGE_SIZE - 1 : s->len; | 25 | int len = s->len >= PAGE_SIZE ? PAGE_SIZE - 1 : s->len; |
@@ -474,23 +470,6 @@ int ftrace_output_call(struct trace_iterator *iter, char *name, char *fmt, ...) | |||
474 | } | 470 | } |
475 | EXPORT_SYMBOL_GPL(ftrace_output_call); | 471 | EXPORT_SYMBOL_GPL(ftrace_output_call); |
476 | 472 | ||
477 | int 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 | } | ||
492 | EXPORT_SYMBOL_GPL(ftrace_event_define_field); | ||
493 | |||
494 | #ifdef CONFIG_KRETPROBES | 473 | #ifdef CONFIG_KRETPROBES |
495 | static inline const char *kretprobed(const char *name) | 474 | static inline const char *kretprobed(const char *name) |
496 | { | 475 | { |