History

ftrace: Allow for function tracing instance to filter functions

Create a "set_ftrace_filter" and "set_ftrace_notrace" files in the instance directories to let users filter of functions to trace for the given instance.

Steven Rostedt (Red Hat) committed 12 years ago

Commit 591dffd1 parent e3b3e2e5 files · +96 −14Browse files

Showing the changes to kernel/trace/trace_functions.c (1 of 5 files). Show all

Unified · Split

kernel/trace/trace_functions.c+32−8
@@ -52,10 +52,34 @@ static int allocate_ftrace_ops(struct trace_array *tr) · 51 unmodified lines
52 return 0;52 return 0;
53}53}
54 54
55
56int ftrace_create_function_files(struct trace_array *tr,
57 struct dentry *parent)
58{
59 int ret;
60
61 /* The top level array uses the "global_ops". */
62 if (!(tr->flags & TRACE_ARRAY_FL_GLOBAL)) {
63 ret = allocate_ftrace_ops(tr);
64 if (ret)
65 return ret;
66 }
67
68 ftrace_create_filter_files(tr->ops, parent);
69
70 return 0;
71}
72
73void ftrace_destroy_function_files(struct trace_array *tr)
74{
75 ftrace_destroy_filter_files(tr->ops);
76 kfree(tr->ops);
77 tr->ops = NULL;
78}
79
55static int function_trace_init(struct trace_array *tr)80static int function_trace_init(struct trace_array *tr)
56{81{
57 struct ftrace_ops *ops;82 struct ftrace_ops *ops;
58 int ret;
59 83
60 if (tr->flags & TRACE_ARRAY_FL_GLOBAL) {84 if (tr->flags & TRACE_ARRAY_FL_GLOBAL) {
61 /* There's only one global tr */85 /* There's only one global tr */
@@ -69,10 +93,13 @@ static int function_trace_init(struct trace_array *tr) · 7 unmodified lines
69 else93 else
70 ops = &trace_ops;94 ops = &trace_ops;
71 tr->ops = ops;95 tr->ops = ops;
72 } else {96 } else if (!tr->ops) {
73 ret = allocate_ftrace_ops(tr);97 /*
74 if (ret)98 * Instance trace_arrays get their ops allocated
75 return ret;99 * at instance creation. Unless it failed
100 * the allocation.
101 */
102 return -ENOMEM;
76 }103 }
77 104
78 tr->trace_buffer.cpu = get_cpu();105 tr->trace_buffer.cpu = get_cpu();
@@ -87,9 +114,6 @@ static void function_trace_reset(struct trace_array *tr) · 8 unmodified lines
87{114{
88 tracing_stop_function_trace(tr);115 tracing_stop_function_trace(tr);
89 tracing_stop_cmdline_record();116 tracing_stop_cmdline_record();
90 if (!(tr->flags & TRACE_ARRAY_FL_GLOBAL))
91 kfree(tr->ops);
92 tr->ops = NULL;
93}117}
94 118
95static void function_trace_start(struct trace_array *tr)119static void function_trace_start(struct trace_array *tr)