Add new kernel probes instrumentation
[lttng-modules.git] / instrumentation / events / lttng-module / printk.h
1 #undef TRACE_SYSTEM
2 #define TRACE_SYSTEM printk
3
4 #if !defined(_TRACE_PRINTK_H) || defined(TRACE_HEADER_MULTI_READ)
5 #define _TRACE_PRINTK_H
6
7 #include <linux/tracepoint.h>
8 #include <linux/version.h>
9
10 #define MSG_TRACE_MAX_LEN 2048
11
12 TRACE_EVENT_CONDITION(console,
13 TP_PROTO(const char *log_buf, unsigned start, unsigned end,
14 unsigned log_buf_len),
15
16 TP_ARGS(log_buf, start, end, log_buf_len),
17
18 TP_CONDITION(start != end),
19
20 TP_STRUCT__entry(
21 __dynamic_array_text(char, msg,
22 min_t(unsigned, end - start, MSG_TRACE_MAX_LEN) + 1)
23 ),
24
25 TP_fast_assign(
26 tp_memcpy_dyn(msg,
27 ({
28 char lmsg[MSG_TRACE_MAX_LEN + 1];
29
30 if ((end - start) > MSG_TRACE_MAX_LEN)
31 start = end - MSG_TRACE_MAX_LEN;
32
33 #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0))
34 if ((start & (log_buf_len - 1)) >
35 (end & (log_buf_len - 1))) {
36 memcpy(lmsg,
37 log_buf +
38 (start & (log_buf_len - 1)),
39 log_buf_len -
40 (start & (log_buf_len - 1)));
41 memcpy(lmsg + log_buf_len -
42 (start & (log_buf_len - 1)),
43 log_buf,
44 end & (log_buf_len - 1));
45 } else
46 memcpy(lmsg,
47 log_buf +
48 (start & (log_buf_len - 1)),
49 end - start);
50 #else
51 memcpy(lmsg, log_buf + start, end - start);
52 #endif
53 lmsg[end - start] = 0;
54 lmsg;
55 })
56 )
57 ),
58
59 TP_printk("%s", __get_str(msg))
60 )
61 #endif /* _TRACE_PRINTK_H */
62
63 /* This part must be outside protection */
64 #include "../../../probes/define_trace.h"
This page took 0.030062 seconds and 4 git commands to generate.