Skip to content

Commit af6b966

Browse files
committed
tracing: Move the defines to create TRACE_EVENTS into their own files
In an effort to add custom event macros that can be used to create your own custom events based on existing tracepoints, move the defines of the special macros used in TRACE_EVENT() into their own files such that they can be reused for TRACE_CUSTOM_EVENT(). Link: https://lkml.kernel.org/r/20220303220625.553406495@goodmis.org Cc: Ingo Molnar <mingo@kernel.org> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Joel Fernandes <joel@joelfernandes.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Masami Hiramatsu <mhiramat@kernel.org> Cc: Tom Zanussi <zanussi@kernel.org> Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
1 parent 953c2f0 commit af6b966

9 files changed

Lines changed: 527 additions & 491 deletions

File tree

include/trace/stages/init.h

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
2+
#define __app__(x, y) str__##x##y
3+
#define __app(x, y) __app__(x, y)
4+
5+
#define TRACE_SYSTEM_STRING __app(TRACE_SYSTEM_VAR,__trace_system_name)
6+
7+
#define TRACE_MAKE_SYSTEM_STR() \
8+
static const char TRACE_SYSTEM_STRING[] = \
9+
__stringify(TRACE_SYSTEM)
10+
11+
TRACE_MAKE_SYSTEM_STR();
12+
13+
#undef TRACE_DEFINE_ENUM
14+
#define TRACE_DEFINE_ENUM(a) \
15+
static struct trace_eval_map __used __initdata \
16+
__##TRACE_SYSTEM##_##a = \
17+
{ \
18+
.system = TRACE_SYSTEM_STRING, \
19+
.eval_string = #a, \
20+
.eval_value = a \
21+
}; \
22+
static struct trace_eval_map __used \
23+
__section("_ftrace_eval_map") \
24+
*TRACE_SYSTEM##_##a = &__##TRACE_SYSTEM##_##a
25+
26+
#undef TRACE_DEFINE_SIZEOF
27+
#define TRACE_DEFINE_SIZEOF(a) \
28+
static struct trace_eval_map __used __initdata \
29+
__##TRACE_SYSTEM##_##a = \
30+
{ \
31+
.system = TRACE_SYSTEM_STRING, \
32+
.eval_string = "sizeof(" #a ")", \
33+
.eval_value = sizeof(a) \
34+
}; \
35+
static struct trace_eval_map __used \
36+
__section("_ftrace_eval_map") \
37+
*TRACE_SYSTEM##_##a = &__##TRACE_SYSTEM##_##a
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/* SPDX-License-Identifier: GPL-2.0 */
2+
3+
/* Stage 1 definitions for creating trace events */
4+
5+
#undef __field
6+
#define __field(type, item) type item;
7+
8+
#undef __field_ext
9+
#define __field_ext(type, item, filter_type) type item;
10+
11+
#undef __field_struct
12+
#define __field_struct(type, item) type item;
13+
14+
#undef __field_struct_ext
15+
#define __field_struct_ext(type, item, filter_type) type item;
16+
17+
#undef __array
18+
#define __array(type, item, len) type item[len];
19+
20+
#undef __dynamic_array
21+
#define __dynamic_array(type, item, len) u32 __data_loc_##item;
22+
23+
#undef __string
24+
#define __string(item, src) __dynamic_array(char, item, -1)
25+
26+
#undef __string_len
27+
#define __string_len(item, src, len) __dynamic_array(char, item, -1)
28+
29+
#undef __bitmask
30+
#define __bitmask(item, nr_bits) __dynamic_array(char, item, -1)
31+
32+
#undef __rel_dynamic_array
33+
#define __rel_dynamic_array(type, item, len) u32 __rel_loc_##item;
34+
35+
#undef __rel_string
36+
#define __rel_string(item, src) __rel_dynamic_array(char, item, -1)
37+
38+
#undef __rel_string_len
39+
#define __rel_string_len(item, src, len) __rel_dynamic_array(char, item, -1)
40+
41+
#undef __rel_bitmask
42+
#define __rel_bitmask(item, nr_bits) __rel_dynamic_array(char, item, -1)
43+
44+
#undef TP_STRUCT__entry
45+
#define TP_STRUCT__entry(args...) args
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
/* SPDX-License-Identifier: GPL-2.0 */
2+
3+
/* Stage 2 definitions for creating trace events */
4+
5+
#undef TRACE_DEFINE_ENUM
6+
#define TRACE_DEFINE_ENUM(a)
7+
8+
#undef TRACE_DEFINE_SIZEOF
9+
#define TRACE_DEFINE_SIZEOF(a)
10+
11+
#undef __field
12+
#define __field(type, item)
13+
14+
#undef __field_ext
15+
#define __field_ext(type, item, filter_type)
16+
17+
#undef __field_struct
18+
#define __field_struct(type, item)
19+
20+
#undef __field_struct_ext
21+
#define __field_struct_ext(type, item, filter_type)
22+
23+
#undef __array
24+
#define __array(type, item, len)
25+
26+
#undef __dynamic_array
27+
#define __dynamic_array(type, item, len) u32 item;
28+
29+
#undef __string
30+
#define __string(item, src) __dynamic_array(char, item, -1)
31+
32+
#undef __bitmask
33+
#define __bitmask(item, nr_bits) __dynamic_array(unsigned long, item, -1)
34+
35+
#undef __string_len
36+
#define __string_len(item, src, len) __dynamic_array(char, item, -1)
37+
38+
#undef __rel_dynamic_array
39+
#define __rel_dynamic_array(type, item, len) u32 item;
40+
41+
#undef __rel_string
42+
#define __rel_string(item, src) __rel_dynamic_array(char, item, -1)
43+
44+
#undef __rel_string_len
45+
#define __rel_string_len(item, src, len) __rel_dynamic_array(char, item, -1)
46+
47+
#undef __rel_bitmask
48+
#define __rel_bitmask(item, nr_bits) __rel_dynamic_array(unsigned long, item, -1)
Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
/* SPDX-License-Identifier: GPL-2.0 */
2+
3+
/* Stage 3 definitions for creating trace events */
4+
5+
#undef __entry
6+
#define __entry field
7+
8+
#undef TP_printk
9+
#define TP_printk(fmt, args...) fmt "\n", args
10+
11+
#undef __get_dynamic_array
12+
#define __get_dynamic_array(field) \
13+
((void *)__entry + (__entry->__data_loc_##field & 0xffff))
14+
15+
#undef __get_dynamic_array_len
16+
#define __get_dynamic_array_len(field) \
17+
((__entry->__data_loc_##field >> 16) & 0xffff)
18+
19+
#undef __get_str
20+
#define __get_str(field) ((char *)__get_dynamic_array(field))
21+
22+
#undef __get_rel_dynamic_array
23+
#define __get_rel_dynamic_array(field) \
24+
((void *)__entry + \
25+
offsetof(typeof(*__entry), __rel_loc_##field) + \
26+
sizeof(__entry->__rel_loc_##field) + \
27+
(__entry->__rel_loc_##field & 0xffff))
28+
29+
#undef __get_rel_dynamic_array_len
30+
#define __get_rel_dynamic_array_len(field) \
31+
((__entry->__rel_loc_##field >> 16) & 0xffff)
32+
33+
#undef __get_rel_str
34+
#define __get_rel_str(field) ((char *)__get_rel_dynamic_array(field))
35+
36+
#undef __get_bitmask
37+
#define __get_bitmask(field) \
38+
({ \
39+
void *__bitmask = __get_dynamic_array(field); \
40+
unsigned int __bitmask_size; \
41+
__bitmask_size = __get_dynamic_array_len(field); \
42+
trace_print_bitmask_seq(p, __bitmask, __bitmask_size); \
43+
})
44+
45+
#undef __get_rel_bitmask
46+
#define __get_rel_bitmask(field) \
47+
({ \
48+
void *__bitmask = __get_rel_dynamic_array(field); \
49+
unsigned int __bitmask_size; \
50+
__bitmask_size = __get_rel_dynamic_array_len(field); \
51+
trace_print_bitmask_seq(p, __bitmask, __bitmask_size); \
52+
})
53+
54+
#undef __print_flags
55+
#define __print_flags(flag, delim, flag_array...) \
56+
({ \
57+
static const struct trace_print_flags __flags[] = \
58+
{ flag_array, { -1, NULL }}; \
59+
trace_print_flags_seq(p, delim, flag, __flags); \
60+
})
61+
62+
#undef __print_symbolic
63+
#define __print_symbolic(value, symbol_array...) \
64+
({ \
65+
static const struct trace_print_flags symbols[] = \
66+
{ symbol_array, { -1, NULL }}; \
67+
trace_print_symbols_seq(p, value, symbols); \
68+
})
69+
70+
#undef __print_flags_u64
71+
#undef __print_symbolic_u64
72+
#if BITS_PER_LONG == 32
73+
#define __print_flags_u64(flag, delim, flag_array...) \
74+
({ \
75+
static const struct trace_print_flags_u64 __flags[] = \
76+
{ flag_array, { -1, NULL } }; \
77+
trace_print_flags_seq_u64(p, delim, flag, __flags); \
78+
})
79+
80+
#define __print_symbolic_u64(value, symbol_array...) \
81+
({ \
82+
static const struct trace_print_flags_u64 symbols[] = \
83+
{ symbol_array, { -1, NULL } }; \
84+
trace_print_symbols_seq_u64(p, value, symbols); \
85+
})
86+
#else
87+
#define __print_flags_u64(flag, delim, flag_array...) \
88+
__print_flags(flag, delim, flag_array)
89+
90+
#define __print_symbolic_u64(value, symbol_array...) \
91+
__print_symbolic(value, symbol_array)
92+
#endif
93+
94+
#undef __print_hex
95+
#define __print_hex(buf, buf_len) \
96+
trace_print_hex_seq(p, buf, buf_len, false)
97+
98+
#undef __print_hex_str
99+
#define __print_hex_str(buf, buf_len) \
100+
trace_print_hex_seq(p, buf, buf_len, true)
101+
102+
#undef __print_array
103+
#define __print_array(array, count, el_size) \
104+
({ \
105+
BUILD_BUG_ON(el_size != 1 && el_size != 2 && \
106+
el_size != 4 && el_size != 8); \
107+
trace_print_array_seq(p, array, count, el_size); \
108+
})
109+
110+
#undef __print_hex_dump
111+
#define __print_hex_dump(prefix_str, prefix_type, \
112+
rowsize, groupsize, buf, len, ascii) \
113+
trace_print_hex_dump_seq(p, prefix_str, prefix_type, \
114+
rowsize, groupsize, buf, len, ascii)
115+
116+
#undef __print_ns_to_secs
117+
#define __print_ns_to_secs(value) \
118+
({ \
119+
u64 ____val = (u64)(value); \
120+
do_div(____val, NSEC_PER_SEC); \
121+
____val; \
122+
})
123+
124+
#undef __print_ns_without_secs
125+
#define __print_ns_without_secs(value) \
126+
({ \
127+
u64 ____val = (u64)(value); \
128+
(u32) do_div(____val, NSEC_PER_SEC); \
129+
})
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
/* SPDX-License-Identifier: GPL-2.0 */
2+
3+
/* Stage 4 definitions for creating trace events */
4+
5+
#undef __field_ext
6+
#define __field_ext(_type, _item, _filter_type) { \
7+
.type = #_type, .name = #_item, \
8+
.size = sizeof(_type), .align = __alignof__(_type), \
9+
.is_signed = is_signed_type(_type), .filter_type = _filter_type },
10+
11+
#undef __field_struct_ext
12+
#define __field_struct_ext(_type, _item, _filter_type) { \
13+
.type = #_type, .name = #_item, \
14+
.size = sizeof(_type), .align = __alignof__(_type), \
15+
0, .filter_type = _filter_type },
16+
17+
#undef __field
18+
#define __field(type, item) __field_ext(type, item, FILTER_OTHER)
19+
20+
#undef __field_struct
21+
#define __field_struct(type, item) __field_struct_ext(type, item, FILTER_OTHER)
22+
23+
#undef __array
24+
#define __array(_type, _item, _len) { \
25+
.type = #_type"["__stringify(_len)"]", .name = #_item, \
26+
.size = sizeof(_type[_len]), .align = __alignof__(_type), \
27+
.is_signed = is_signed_type(_type), .filter_type = FILTER_OTHER },
28+
29+
#undef __dynamic_array
30+
#define __dynamic_array(_type, _item, _len) { \
31+
.type = "__data_loc " #_type "[]", .name = #_item, \
32+
.size = 4, .align = 4, \
33+
.is_signed = is_signed_type(_type), .filter_type = FILTER_OTHER },
34+
35+
#undef __string
36+
#define __string(item, src) __dynamic_array(char, item, -1)
37+
38+
#undef __string_len
39+
#define __string_len(item, src, len) __dynamic_array(char, item, -1)
40+
41+
#undef __bitmask
42+
#define __bitmask(item, nr_bits) __dynamic_array(unsigned long, item, -1)
43+
44+
#undef __rel_dynamic_array
45+
#define __rel_dynamic_array(_type, _item, _len) { \
46+
.type = "__rel_loc " #_type "[]", .name = #_item, \
47+
.size = 4, .align = 4, \
48+
.is_signed = is_signed_type(_type), .filter_type = FILTER_OTHER },
49+
50+
#undef __rel_string
51+
#define __rel_string(item, src) __rel_dynamic_array(char, item, -1)
52+
53+
#undef __rel_string_len
54+
#define __rel_string_len(item, src, len) __rel_dynamic_array(char, item, -1)
55+
56+
#undef __rel_bitmask
57+
#define __rel_bitmask(item, nr_bits) __rel_dynamic_array(unsigned long, item, -1)

0 commit comments

Comments
 (0)