aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/trace/trace_bprintk.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/trace/trace_bprintk.c')
-rw-r--r--kernel/trace/trace_bprintk.c87
1 files changed, 87 insertions, 0 deletions
diff --git a/kernel/trace/trace_bprintk.c b/kernel/trace/trace_bprintk.c
new file mode 100644
index 000000000000..1f8e532c3fb9
--- /dev/null
+++ b/kernel/trace/trace_bprintk.c
@@ -0,0 +1,87 @@
1/*
2 * trace binary printk
3 *
4 * Copyright (C) 2008 Lai Jiangshan <laijs@cn.fujitsu.com>
5 *
6 */
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>
16#include <linux/fs.h>
17#include <linux/marker.h>
18#include <linux/uaccess.h>
19
20#include "trace.h"
21
22/* binary printk basic */
23static DEFINE_MUTEX(btrace_mutex);
24static int btrace_metadata_count;
25
26static inline void lock_btrace(void)
27{
28 mutex_lock(&btrace_mutex);
29}
30
31static inline void unlock_btrace(void)
32{
33 mutex_unlock(&btrace_mutex);
34}
35
36static void get_btrace_metadata(void)
37{
38 lock_btrace();
39 btrace_metadata_count++;
40 unlock_btrace();
41}
42
43static void put_btrace_metadata(void)
44{
45 lock_btrace();
46 btrace_metadata_count--;
47 unlock_btrace();
48}
49
50/* events tracer */
51int trace_bprintk_enable;
52
53static void start_bprintk_trace(struct trace_array *tr)
54{
55 get_btrace_metadata();
56 tracing_reset_online_cpus(tr);
57 trace_bprintk_enable = 1;
58}
59
60static void stop_bprintk_trace(struct trace_array *tr)
61{
62 trace_bprintk_enable = 0;
63 tracing_reset_online_cpus(tr);
64 put_btrace_metadata();
65}
66
67static int init_bprintk_trace(struct trace_array *tr)
68{
69 start_bprintk_trace(tr);
70 return 0;
71}
72
73static struct tracer bprintk_trace __read_mostly =
74{
75 .name = "events",
76 .init = init_bprintk_trace,
77 .reset = stop_bprintk_trace,
78 .start = start_bprintk_trace,
79 .stop = stop_bprintk_trace,
80};
81
82static __init int init_bprintk(void)
83{
84 return register_tracer(&bprintk_trace);
85}
86
87device_initcall(init_bprintk);