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>
This commit is contained in:

committed by
Steven Rostedt

parent
a798c10faf
commit
4104d326b6
@@ -161,11 +161,6 @@ static struct ftrace_ops test_probe3 = {
|
||||
.flags = FTRACE_OPS_FL_RECURSION_SAFE,
|
||||
};
|
||||
|
||||
static struct ftrace_ops test_global = {
|
||||
.func = trace_selftest_test_global_func,
|
||||
.flags = FTRACE_OPS_FL_GLOBAL | FTRACE_OPS_FL_RECURSION_SAFE,
|
||||
};
|
||||
|
||||
static void print_counts(void)
|
||||
{
|
||||
printk("(%d %d %d %d %d) ",
|
||||
@@ -185,7 +180,7 @@ static void reset_counts(void)
|
||||
trace_selftest_test_dyn_cnt = 0;
|
||||
}
|
||||
|
||||
static int trace_selftest_ops(int cnt)
|
||||
static int trace_selftest_ops(struct trace_array *tr, int cnt)
|
||||
{
|
||||
int save_ftrace_enabled = ftrace_enabled;
|
||||
struct ftrace_ops *dyn_ops;
|
||||
@@ -220,7 +215,11 @@ static int trace_selftest_ops(int cnt)
|
||||
register_ftrace_function(&test_probe1);
|
||||
register_ftrace_function(&test_probe2);
|
||||
register_ftrace_function(&test_probe3);
|
||||
register_ftrace_function(&test_global);
|
||||
/* First time we are running with main function */
|
||||
if (cnt > 1) {
|
||||
ftrace_init_array_ops(tr, trace_selftest_test_global_func);
|
||||
register_ftrace_function(tr->ops);
|
||||
}
|
||||
|
||||
DYN_FTRACE_TEST_NAME();
|
||||
|
||||
@@ -232,8 +231,10 @@ static int trace_selftest_ops(int cnt)
|
||||
goto out;
|
||||
if (trace_selftest_test_probe3_cnt != 1)
|
||||
goto out;
|
||||
if (trace_selftest_test_global_cnt == 0)
|
||||
goto out;
|
||||
if (cnt > 1) {
|
||||
if (trace_selftest_test_global_cnt == 0)
|
||||
goto out;
|
||||
}
|
||||
|
||||
DYN_FTRACE_TEST_NAME2();
|
||||
|
||||
@@ -269,8 +270,10 @@ static int trace_selftest_ops(int cnt)
|
||||
goto out_free;
|
||||
if (trace_selftest_test_probe3_cnt != 3)
|
||||
goto out_free;
|
||||
if (trace_selftest_test_global_cnt == 0)
|
||||
goto out;
|
||||
if (cnt > 1) {
|
||||
if (trace_selftest_test_global_cnt == 0)
|
||||
goto out;
|
||||
}
|
||||
if (trace_selftest_test_dyn_cnt == 0)
|
||||
goto out_free;
|
||||
|
||||
@@ -295,7 +298,9 @@ static int trace_selftest_ops(int cnt)
|
||||
unregister_ftrace_function(&test_probe1);
|
||||
unregister_ftrace_function(&test_probe2);
|
||||
unregister_ftrace_function(&test_probe3);
|
||||
unregister_ftrace_function(&test_global);
|
||||
if (cnt > 1)
|
||||
unregister_ftrace_function(tr->ops);
|
||||
ftrace_reset_array_ops(tr);
|
||||
|
||||
/* Make sure everything is off */
|
||||
reset_counts();
|
||||
@@ -388,7 +393,7 @@ int trace_selftest_startup_dynamic_tracing(struct tracer *trace,
|
||||
}
|
||||
|
||||
/* Test the ops with global tracing running */
|
||||
ret = trace_selftest_ops(1);
|
||||
ret = trace_selftest_ops(tr, 1);
|
||||
trace->reset(tr);
|
||||
|
||||
out:
|
||||
@@ -399,7 +404,7 @@ int trace_selftest_startup_dynamic_tracing(struct tracer *trace,
|
||||
|
||||
/* Test the ops with global tracing off */
|
||||
if (!ret)
|
||||
ret = trace_selftest_ops(2);
|
||||
ret = trace_selftest_ops(tr, 2);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
Reference in New Issue
Block a user