diff options
author | Steven Rostedt (Red Hat) <rostedt@goodmis.org> | 2014-01-10 17:01:58 -0500 |
---|---|---|
committer | Steven Rostedt <rostedt@goodmis.org> | 2014-04-21 13:59:25 -0400 |
commit | 4104d326b670c2b66f575d2004daa28b2d1b4c8d (patch) | |
tree | 9eb7a3084d9bc9d7d5b6eccb0d17d37481020c61 /kernel/trace/trace_selftest.c | |
parent | a798c10faf62a505d24e5f6213fbaf904a39623f (diff) |
ftrace: Remove global function list and call function directly
Instead of having a list of global functions that are called,
as only one global function is allow to be enabled at a time, there's
no reason to have a list.
Instead, simply have all the users of the global ops, use the global ops
directly, instead of registering their own ftrace_ops. Just switch what
function is used before enabling the function tracer.
This removes a lot of code as well as the complexity involved with it.
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Diffstat (limited to 'kernel/trace/trace_selftest.c')
-rw-r--r-- | kernel/trace/trace_selftest.c | 33 |
1 files changed, 19 insertions, 14 deletions
diff --git a/kernel/trace/trace_selftest.c b/kernel/trace/trace_selftest.c index e98fca60974f..519d04affe38 100644 --- a/kernel/trace/trace_selftest.c +++ b/kernel/trace/trace_selftest.c | |||
@@ -161,11 +161,6 @@ static struct ftrace_ops test_probe3 = { | |||
161 | .flags = FTRACE_OPS_FL_RECURSION_SAFE, | 161 | .flags = FTRACE_OPS_FL_RECURSION_SAFE, |
162 | }; | 162 | }; |
163 | 163 | ||
164 | static struct ftrace_ops test_global = { | ||
165 | .func = trace_selftest_test_global_func, | ||
166 | .flags = FTRACE_OPS_FL_GLOBAL | FTRACE_OPS_FL_RECURSION_SAFE, | ||
167 | }; | ||
168 | |||
169 | static void print_counts(void) | 164 | static void print_counts(void) |
170 | { | 165 | { |
171 | printk("(%d %d %d %d %d) ", | 166 | printk("(%d %d %d %d %d) ", |
@@ -185,7 +180,7 @@ static void reset_counts(void) | |||
185 | trace_selftest_test_dyn_cnt = 0; | 180 | trace_selftest_test_dyn_cnt = 0; |
186 | } | 181 | } |
187 | 182 | ||
188 | static int trace_selftest_ops(int cnt) | 183 | static int trace_selftest_ops(struct trace_array *tr, int cnt) |
189 | { | 184 | { |
190 | int save_ftrace_enabled = ftrace_enabled; | 185 | int save_ftrace_enabled = ftrace_enabled; |
191 | struct ftrace_ops *dyn_ops; | 186 | struct ftrace_ops *dyn_ops; |
@@ -220,7 +215,11 @@ static int trace_selftest_ops(int cnt) | |||
220 | register_ftrace_function(&test_probe1); | 215 | register_ftrace_function(&test_probe1); |
221 | register_ftrace_function(&test_probe2); | 216 | register_ftrace_function(&test_probe2); |
222 | register_ftrace_function(&test_probe3); | 217 | register_ftrace_function(&test_probe3); |
223 | register_ftrace_function(&test_global); | 218 | /* First time we are running with main function */ |
219 | if (cnt > 1) { | ||
220 | ftrace_init_array_ops(tr, trace_selftest_test_global_func); | ||
221 | register_ftrace_function(tr->ops); | ||
222 | } | ||
224 | 223 | ||
225 | DYN_FTRACE_TEST_NAME(); | 224 | DYN_FTRACE_TEST_NAME(); |
226 | 225 | ||
@@ -232,8 +231,10 @@ static int trace_selftest_ops(int cnt) | |||
232 | goto out; | 231 | goto out; |
233 | if (trace_selftest_test_probe3_cnt != 1) | 232 | if (trace_selftest_test_probe3_cnt != 1) |
234 | goto out; | 233 | goto out; |
235 | if (trace_selftest_test_global_cnt == 0) | 234 | if (cnt > 1) { |
236 | goto out; | 235 | if (trace_selftest_test_global_cnt == 0) |
236 | goto out; | ||
237 | } | ||
237 | 238 | ||
238 | DYN_FTRACE_TEST_NAME2(); | 239 | DYN_FTRACE_TEST_NAME2(); |
239 | 240 | ||
@@ -269,8 +270,10 @@ static int trace_selftest_ops(int cnt) | |||
269 | goto out_free; | 270 | goto out_free; |
270 | if (trace_selftest_test_probe3_cnt != 3) | 271 | if (trace_selftest_test_probe3_cnt != 3) |
271 | goto out_free; | 272 | goto out_free; |
272 | if (trace_selftest_test_global_cnt == 0) | 273 | if (cnt > 1) { |
273 | goto out; | 274 | if (trace_selftest_test_global_cnt == 0) |
275 | goto out; | ||
276 | } | ||
274 | if (trace_selftest_test_dyn_cnt == 0) | 277 | if (trace_selftest_test_dyn_cnt == 0) |
275 | goto out_free; | 278 | goto out_free; |
276 | 279 | ||
@@ -295,7 +298,9 @@ static int trace_selftest_ops(int cnt) | |||
295 | unregister_ftrace_function(&test_probe1); | 298 | unregister_ftrace_function(&test_probe1); |
296 | unregister_ftrace_function(&test_probe2); | 299 | unregister_ftrace_function(&test_probe2); |
297 | unregister_ftrace_function(&test_probe3); | 300 | unregister_ftrace_function(&test_probe3); |
298 | unregister_ftrace_function(&test_global); | 301 | if (cnt > 1) |
302 | unregister_ftrace_function(tr->ops); | ||
303 | ftrace_reset_array_ops(tr); | ||
299 | 304 | ||
300 | /* Make sure everything is off */ | 305 | /* Make sure everything is off */ |
301 | reset_counts(); | 306 | reset_counts(); |
@@ -388,7 +393,7 @@ int trace_selftest_startup_dynamic_tracing(struct tracer *trace, | |||
388 | } | 393 | } |
389 | 394 | ||
390 | /* Test the ops with global tracing running */ | 395 | /* Test the ops with global tracing running */ |
391 | ret = trace_selftest_ops(1); | 396 | ret = trace_selftest_ops(tr, 1); |
392 | trace->reset(tr); | 397 | trace->reset(tr); |
393 | 398 | ||
394 | out: | 399 | out: |
@@ -399,7 +404,7 @@ int trace_selftest_startup_dynamic_tracing(struct tracer *trace, | |||
399 | 404 | ||
400 | /* Test the ops with global tracing off */ | 405 | /* Test the ops with global tracing off */ |
401 | if (!ret) | 406 | if (!ret) |
402 | ret = trace_selftest_ops(2); | 407 | ret = trace_selftest_ops(tr, 2); |
403 | 408 | ||
404 | return ret; | 409 | return ret; |
405 | } | 410 | } |