1 /* 2 * ring buffer based function tracer 3 * 4 * Copyright (C) 2007-2008 Steven Rostedt <srostedt@redhat.com> 5 * Copyright (C) 2008 Ingo Molnar <mingo@redhat.com> 6 * 7 * Based on code from the latency_tracer, that is: 8 * 9 * Copyright (C) 2004-2006 Ingo Molnar 10 * Copyright (C) 2004 William Lee Irwin III 11 */ 12 #include <linux/debugfs.h> 13 #include <linux/uaccess.h> 14 #include <linux/ftrace.h> 15 #include <linux/fs.h> 16 17 #include "trace.h" 18 start_function_trace(struct trace_array * tr)19static void start_function_trace(struct trace_array *tr) 20 { 21 tr->cpu = get_cpu(); 22 tracing_reset_online_cpus(tr); 23 put_cpu(); 24 25 tracing_start_cmdline_record(); 26 tracing_start_function_trace(); 27 } 28 stop_function_trace(struct trace_array * tr)29static void stop_function_trace(struct trace_array *tr) 30 { 31 tracing_stop_function_trace(); 32 tracing_stop_cmdline_record(); 33 } 34 function_trace_init(struct trace_array * tr)35static int function_trace_init(struct trace_array *tr) 36 { 37 start_function_trace(tr); 38 return 0; 39 } 40 function_trace_reset(struct trace_array * tr)41static void function_trace_reset(struct trace_array *tr) 42 { 43 stop_function_trace(tr); 44 } 45 function_trace_start(struct trace_array * tr)46static void function_trace_start(struct trace_array *tr) 47 { 48 tracing_reset_online_cpus(tr); 49 } 50 51 static struct tracer function_trace __read_mostly = 52 { 53 .name = "function", 54 .init = function_trace_init, 55 .reset = function_trace_reset, 56 .start = function_trace_start, 57 #ifdef CONFIG_FTRACE_SELFTEST 58 .selftest = trace_selftest_startup_function, 59 #endif 60 }; 61 init_function_trace(void)62static __init int init_function_trace(void) 63 { 64 return register_tracer(&function_trace); 65 } 66 67 device_initcall(init_function_trace); 68