Commit | Line | Data |
---|---|---|
b87700e3 AG |
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" |