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