aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/trace/trace.c
diff options
context:
space:
mode:
authorSteven Rostedt <rostedt@goodmis.org>2008-07-10 20:58:16 -0400
committerIngo Molnar <mingo@elte.hu>2008-07-11 09:49:22 -0400
commit60bc080090e3bf6afa29c62cb25f913706551010 (patch)
tree42fa03bbae28072c0302f6c8f4efead22307828f /kernel/trace/trace.c
parenta2bb6a3d85ef3124cd336403a95abc0540d3fbe2 (diff)
ftrace: separate out the function enabled variable
Currently the function tracer uses the global tracer_enabled variable that is used to keep track if the tracer is enabled or not. The function tracing startup needs to be separated out, otherwise the internal happenings of the tracer startup is also recorded. This patch creates a ftrace_function_enabled variable to all the starting of the function traces to happen after everything has been started. Signed-off-by: Steven Rostedt <srostedt@redhat.com> Cc: Steven Rostedt <srostedt@redhat.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'kernel/trace/trace.c')
-rw-r--r--kernel/trace/trace.c22
1 files changed, 19 insertions, 3 deletions
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index f8fdb9cedc24..2e37857f7dfe 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -96,6 +96,9 @@ static DEFINE_PER_CPU(struct trace_array_cpu, max_data);
96/* tracer_enabled is used to toggle activation of a tracer */ 96/* tracer_enabled is used to toggle activation of a tracer */
97static int tracer_enabled = 1; 97static int tracer_enabled = 1;
98 98
99/* function tracing enabled */
100int ftrace_function_enabled;
101
99/* 102/*
100 * trace_nr_entries is the number of entries that is allocated 103 * trace_nr_entries is the number of entries that is allocated
101 * for a buffer. Note, the number of entries is always rounded 104 * for a buffer. Note, the number of entries is always rounded
@@ -134,6 +137,7 @@ static notrace void no_trace_init(struct trace_array *tr)
134{ 137{
135 int cpu; 138 int cpu;
136 139
140 ftrace_function_enabled = 0;
137 if(tr->ctrl) 141 if(tr->ctrl)
138 for_each_online_cpu(cpu) 142 for_each_online_cpu(cpu)
139 tracing_reset(tr->data[cpu]); 143 tracing_reset(tr->data[cpu]);
@@ -985,7 +989,7 @@ function_trace_call(unsigned long ip, unsigned long parent_ip)
985 long disabled; 989 long disabled;
986 int cpu; 990 int cpu;
987 991
988 if (unlikely(!tracer_enabled)) 992 if (unlikely(!ftrace_function_enabled))
989 return; 993 return;
990 994
991 if (skip_trace(ip)) 995 if (skip_trace(ip))
@@ -1010,11 +1014,15 @@ static struct ftrace_ops trace_ops __read_mostly =
1010 1014
1011void tracing_start_function_trace(void) 1015void tracing_start_function_trace(void)
1012{ 1016{
1017 ftrace_function_enabled = 0;
1013 register_ftrace_function(&trace_ops); 1018 register_ftrace_function(&trace_ops);
1019 if (tracer_enabled)
1020 ftrace_function_enabled = 1;
1014} 1021}
1015 1022
1016void tracing_stop_function_trace(void) 1023void tracing_stop_function_trace(void)
1017{ 1024{
1025 ftrace_function_enabled = 0;
1018 unregister_ftrace_function(&trace_ops); 1026 unregister_ftrace_function(&trace_ops);
1019} 1027}
1020#endif 1028#endif
@@ -1850,8 +1858,10 @@ __tracing_open(struct inode *inode, struct file *file, int *ret)
1850 m->private = iter; 1858 m->private = iter;
1851 1859
1852 /* stop the trace while dumping */ 1860 /* stop the trace while dumping */
1853 if (iter->tr->ctrl) 1861 if (iter->tr->ctrl) {
1854 tracer_enabled = 0; 1862 tracer_enabled = 0;
1863 ftrace_function_enabled = 0;
1864 }
1855 1865
1856 if (iter->trace && iter->trace->open) 1866 if (iter->trace && iter->trace->open)
1857 iter->trace->open(iter); 1867 iter->trace->open(iter);
@@ -1884,8 +1894,14 @@ int tracing_release(struct inode *inode, struct file *file)
1884 iter->trace->close(iter); 1894 iter->trace->close(iter);
1885 1895
1886 /* reenable tracing if it was previously enabled */ 1896 /* reenable tracing if it was previously enabled */
1887 if (iter->tr->ctrl) 1897 if (iter->tr->ctrl) {
1888 tracer_enabled = 1; 1898 tracer_enabled = 1;
1899 /*
1900 * It is safe to enable function tracing even if it
1901 * isn't used
1902 */
1903 ftrace_function_enabled = 1;
1904 }
1889 mutex_unlock(&trace_types_lock); 1905 mutex_unlock(&trace_types_lock);
1890 1906
1891 seq_release(inode, file); 1907 seq_release(inode, file);