summaryrefslogtreecommitdiffstats
path: root/kernel/trace/trace_unlikely.c
diff options
context:
space:
mode:
authorSteven Rostedt2008-11-12 21:24:24 +0100
committerIngo Molnar2008-11-12 22:28:25 +0100
commit80e5ea4506791af206266c5921c97f11d3b17866 (patch)
tree847eb231f1c98377bdd600a801657a338cd1baa1 /kernel/trace/trace_unlikely.c
parentftrace: rename unlikely iter_ctrl to branch (diff)
downloadkernel-qcow2-linux-80e5ea4506791af206266c5921c97f11d3b17866.tar.gz
kernel-qcow2-linux-80e5ea4506791af206266c5921c97f11d3b17866.tar.xz
kernel-qcow2-linux-80e5ea4506791af206266c5921c97f11d3b17866.zip
ftrace: add tracer called branch
Impact: added new branch tracer Currently the tracing of branch profiling (unlikelys and likelys hit) is only activated by the iter_ctrl. This patch adds a tracer called "branch" that will just trace the branch profiling. The advantage of adding this tracer is that it can be added to the ftrace selftests on startup. Signed-off-by: Steven Rostedt <srostedt@redhat.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'kernel/trace/trace_unlikely.c')
-rw-r--r--kernel/trace/trace_unlikely.c42
1 files changed, 42 insertions, 0 deletions
diff --git a/kernel/trace/trace_unlikely.c b/kernel/trace/trace_unlikely.c
index e5d5969853a3..85265553918f 100644
--- a/kernel/trace/trace_unlikely.c
+++ b/kernel/trace/trace_unlikely.c
@@ -114,6 +114,48 @@ void disable_branch_tracing(void)
out_unlock:
mutex_unlock(&branch_tracing_mutex);
}
+
+static void start_branch_trace(struct trace_array *tr)
+{
+ enable_branch_tracing(tr);
+}
+
+static void stop_branch_trace(struct trace_array *tr)
+{
+ disable_branch_tracing();
+}
+
+static void branch_trace_init(struct trace_array *tr)
+{
+ int cpu;
+
+ for_each_online_cpu(cpu)
+ tracing_reset(tr, cpu);
+
+ start_branch_trace(tr);
+}
+
+static void branch_trace_reset(struct trace_array *tr)
+{
+ stop_branch_trace(tr);
+}
+
+struct tracer branch_trace __read_mostly =
+{
+ .name = "branch",
+ .init = branch_trace_init,
+ .reset = branch_trace_reset,
+#ifdef CONFIG_FTRACE_SELFTEST
+ .selftest = trace_selftest_startup_branch,
+#endif
+};
+
+__init static int init_branch_trace(void)
+{
+ return register_tracer(&branch_trace);
+}
+
+device_initcall(init_branch_trace);
#else
static inline
void trace_likely_condition(struct ftrace_branch_data *f, int val, int expect)