4 * Copyright (C) 2008 Lai Jiangshan <laijs@cn.fujitsu.com>
7 #include <linux/kernel.h>
8 #include <linux/ftrace.h>
9 #include <linux/string.h>
10 #include <linux/ctype.h>
11 #include <linux/list.h>
12 #include <linux/mutex.h>
13 #include <linux/slab.h>
14 #include <linux/module.h>
15 #include <linux/seq_file.h>
17 #include <linux/marker.h>
18 #include <linux/uaccess.h>
22 /* binary printk basic */
23 static DEFINE_MUTEX(btrace_mutex);
24 static int btrace_metadata_count;
26 static inline void lock_btrace(void)
28 mutex_lock(&btrace_mutex);
31 static inline void unlock_btrace(void)
33 mutex_unlock(&btrace_mutex);
36 static void get_btrace_metadata(void)
39 btrace_metadata_count++;
43 static void put_btrace_metadata(void)
46 btrace_metadata_count--;
51 int trace_bprintk_enable;
53 static void start_bprintk_trace(struct trace_array *tr)
55 get_btrace_metadata();
56 tracing_reset_online_cpus(tr);
57 trace_bprintk_enable = 1;
60 static void stop_bprintk_trace(struct trace_array *tr)
62 trace_bprintk_enable = 0;
63 tracing_reset_online_cpus(tr);
64 put_btrace_metadata();
67 static int init_bprintk_trace(struct trace_array *tr)
69 start_bprintk_trace(tr);
73 static struct tracer bprintk_trace __read_mostly =
76 .init = init_bprintk_trace,
77 .reset = stop_bprintk_trace,
78 .start = start_bprintk_trace,
79 .stop = stop_bprintk_trace,
82 static __init int init_bprintk(void)
84 return register_tracer(&bprintk_trace);
87 device_initcall(init_bprintk);