aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteven Rostedt (Red Hat) <rostedt@goodmis.org>2014-03-21 08:23:38 -0400
committerSteven Rostedt <rostedt@goodmis.org>2014-03-21 13:11:41 -0400
commitbc4c426ee2431d1f717004d3bbaacbd819b544fd (patch)
treef3b13ad5bf6b0977263bc690e44996e2ef22f0fe
parentd88471cb8b17a72b1edf5ab62e1704d78373c066 (diff)
Revert "tracing: Move event storage for array from macro to standalone function"
I originally wrote commit 35bb4399bd0e to shrink the size of the overhead of tracepoints by several kilobytes. Later, I received a patch from Vaibhav Nagarnaik that fixed a bug in the same code that this commit touches. Not only did it fix a bug, it also removed code and shrunk the size of the overhead of trace events even more than this commit did. Since this commit is scheduled for 3.15 and Vaibhav's patch is already in mainline, I need to revert this patch in order to keep it from conflicting with Vaibhav's patch. Not to mention, Vaibhav's patch makes this patch obsolete. Link: http://lkml.kernel.org/r/20140320225637.0226041b@gandalf.local.home Cc: Vaibhav Nagarnaik <vnagarnaik@google.com> Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
-rw-r--r--include/linux/ftrace_event.h8
-rw-r--r--include/trace/ftrace.h12
-rw-r--r--kernel/trace/trace_events.c6
-rw-r--r--kernel/trace/trace_export.c12
-rw-r--r--kernel/trace/trace_output.c21
5 files changed, 30 insertions, 29 deletions
diff --git a/include/linux/ftrace_event.h b/include/linux/ftrace_event.h
index 9d3fe0658398..cdc975929d15 100644
--- a/include/linux/ftrace_event.h
+++ b/include/linux/ftrace_event.h
@@ -221,6 +221,10 @@ void *ftrace_event_buffer_reserve(struct ftrace_event_buffer *fbuffer,
221 221
222void ftrace_event_buffer_commit(struct ftrace_event_buffer *fbuffer); 222void ftrace_event_buffer_commit(struct ftrace_event_buffer *fbuffer);
223 223
224int ftrace_event_define_field(struct ftrace_event_call *call,
225 char *type, int len, char *item, int offset,
226 int field_size, int sign, int filter);
227
224enum { 228enum {
225 TRACE_EVENT_FL_FILTERED_BIT, 229 TRACE_EVENT_FL_FILTERED_BIT,
226 TRACE_EVENT_FL_CAP_ANY_BIT, 230 TRACE_EVENT_FL_CAP_ANY_BIT,
@@ -519,6 +523,10 @@ enum {
519 FILTER_TRACE_FN, 523 FILTER_TRACE_FN,
520}; 524};
521 525
526#define EVENT_STORAGE_SIZE 128
527extern struct mutex event_storage_mutex;
528extern char event_storage[EVENT_STORAGE_SIZE];
529
522extern int trace_event_raw_init(struct ftrace_event_call *call); 530extern int trace_event_raw_init(struct ftrace_event_call *call);
523extern int trace_define_field(struct ftrace_event_call *call, const char *type, 531extern int trace_define_field(struct ftrace_event_call *call, const char *type,
524 const char *name, int offset, int size, 532 const char *name, int offset, int size,
diff --git a/include/trace/ftrace.h b/include/trace/ftrace.h
index e15ae4010d51..d1d91875faa5 100644
--- a/include/trace/ftrace.h
+++ b/include/trace/ftrace.h
@@ -302,11 +302,15 @@ static struct trace_event_functions ftrace_event_type_funcs_##call = { \
302#undef __array 302#undef __array
303#define __array(type, item, len) \ 303#define __array(type, item, len) \
304 do { \ 304 do { \
305 mutex_lock(&event_storage_mutex); \
305 BUILD_BUG_ON(len > MAX_FILTER_STR_VAL); \ 306 BUILD_BUG_ON(len > MAX_FILTER_STR_VAL); \
306 ret = ftrace_event_define_field(event_call, #type, len, \ 307 snprintf(event_storage, sizeof(event_storage), \
307 #item, offsetof(typeof(field), item), \ 308 "%s[%d]", #type, len); \
308 sizeof(field.item), \ 309 ret = trace_define_field(event_call, event_storage, #item, \
309 is_signed_type(type), FILTER_OTHER); \ 310 offsetof(typeof(field), item), \
311 sizeof(field.item), \
312 is_signed_type(type), FILTER_OTHER); \
313 mutex_unlock(&event_storage_mutex); \
310 if (ret) \ 314 if (ret) \
311 return ret; \ 315 return ret; \
312 } while (0); 316 } while (0);
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
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
30LIST_HEAD(ftrace_events); 36LIST_HEAD(ftrace_events);
31static LIST_HEAD(ftrace_common_fields); 37static 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
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
27int trace_print_seq(struct seq_file *m, struct trace_seq *s) 23int 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}
475EXPORT_SYMBOL_GPL(ftrace_output_call); 471EXPORT_SYMBOL_GPL(ftrace_output_call);
476 472
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
494#ifdef CONFIG_KRETPROBES 473#ifdef CONFIG_KRETPROBES
495static inline const char *kretprobed(const char *name) 474static inline const char *kretprobed(const char *name)
496{ 475{