1  /* SPDX-License-Identifier: GPL-2.0 */
2  /*
3   * Trace files that want to automate creation of all tracepoints defined
4   * in their file should include this file. The following are macros that the
5   * trace file may define:
6   *
7   * TRACE_SYSTEM defines the system the tracepoint is for
8   *
9   * TRACE_INCLUDE_FILE if the file name is something other than TRACE_SYSTEM.h
10   *     This macro may be defined to tell define_trace.h what file to include.
11   *     Note, leave off the ".h".
12   *
13   * TRACE_INCLUDE_PATH if the path is something other than core kernel include/trace
14   *     then this macro can define the path to use. Note, the path is relative to
15   *     define_trace.h, not the file including it. Full path names for out of tree
16   *     modules must be used.
17   */
18  
19  #ifdef CREATE_TRACE_POINTS
20  
21  /* Prevent recursion */
22  #undef CREATE_TRACE_POINTS
23  
24  #include <linux/stringify.h>
25  
26  #undef TRACE_EVENT
27  #define TRACE_EVENT(name, proto, args, tstruct, assign, print)	\
28  	DEFINE_TRACE(name, PARAMS(proto), PARAMS(args))
29  
30  #undef TRACE_EVENT_CONDITION
31  #define TRACE_EVENT_CONDITION(name, proto, args, cond, tstruct, assign, print) \
32  	TRACE_EVENT(name,						\
33  		PARAMS(proto),						\
34  		PARAMS(args),						\
35  		PARAMS(tstruct),					\
36  		PARAMS(assign),						\
37  		PARAMS(print))
38  
39  #undef TRACE_EVENT_FN
40  #define TRACE_EVENT_FN(name, proto, args, tstruct,		\
41  		assign, print, reg, unreg)			\
42  	DEFINE_TRACE_FN(name, reg, unreg, PARAMS(proto), PARAMS(args))
43  
44  #undef TRACE_EVENT_FN_COND
45  #define TRACE_EVENT_FN_COND(name, proto, args, cond, tstruct,		\
46  		assign, print, reg, unreg)			\
47  	DEFINE_TRACE_FN(name, reg, unreg, PARAMS(proto), PARAMS(args))
48  
49  #undef TRACE_EVENT_NOP
50  #define TRACE_EVENT_NOP(name, proto, args, struct, assign, print)
51  
52  #undef DEFINE_EVENT_NOP
53  #define DEFINE_EVENT_NOP(template, name, proto, args)
54  
55  #undef DEFINE_EVENT
56  #define DEFINE_EVENT(template, name, proto, args) \
57  	DEFINE_TRACE(name, PARAMS(proto), PARAMS(args))
58  
59  #undef DEFINE_EVENT_FN
60  #define DEFINE_EVENT_FN(template, name, proto, args, reg, unreg) \
61  	DEFINE_TRACE_FN(name, reg, unreg, PARAMS(proto), PARAMS(args))
62  
63  #undef DEFINE_EVENT_PRINT
64  #define DEFINE_EVENT_PRINT(template, name, proto, args, print)	\
65  	DEFINE_TRACE(name, PARAMS(proto), PARAMS(args))
66  
67  #undef DEFINE_EVENT_CONDITION
68  #define DEFINE_EVENT_CONDITION(template, name, proto, args, cond) \
69  	DEFINE_EVENT(template, name, PARAMS(proto), PARAMS(args))
70  
71  #undef DECLARE_TRACE
72  #define DECLARE_TRACE(name, proto, args)	\
73  	DEFINE_TRACE(name, PARAMS(proto), PARAMS(args))
74  
75  #undef TRACE_INCLUDE
76  #undef __TRACE_INCLUDE
77  
78  #ifndef TRACE_INCLUDE_FILE
79  # define TRACE_INCLUDE_FILE TRACE_SYSTEM
80  # define UNDEF_TRACE_INCLUDE_FILE
81  #endif
82  
83  #ifndef TRACE_INCLUDE_PATH
84  # define __TRACE_INCLUDE(system) <trace/events/system.h>
85  # define UNDEF_TRACE_INCLUDE_PATH
86  #else
87  # define __TRACE_INCLUDE(system) __stringify(TRACE_INCLUDE_PATH/system.h)
88  #endif
89  
90  # define TRACE_INCLUDE(system) __TRACE_INCLUDE(system)
91  
92  /* Let the trace headers be reread */
93  #define TRACE_HEADER_MULTI_READ
94  
95  #include TRACE_INCLUDE(TRACE_INCLUDE_FILE)
96  
97  /* Make all open coded DECLARE_TRACE nops */
98  #undef DECLARE_TRACE
99  #define DECLARE_TRACE(name, proto, args)
100  
101  #ifdef TRACEPOINTS_ENABLED
102  #include <trace/trace_events.h>
103  #include <trace/perf.h>
104  #include <trace/bpf_probe.h>
105  #endif
106  
107  #undef TRACE_EVENT
108  #undef TRACE_EVENT_FN
109  #undef TRACE_EVENT_FN_COND
110  #undef TRACE_EVENT_CONDITION
111  #undef TRACE_EVENT_NOP
112  #undef DEFINE_EVENT_NOP
113  #undef DECLARE_EVENT_CLASS
114  #undef DEFINE_EVENT
115  #undef DEFINE_EVENT_FN
116  #undef DEFINE_EVENT_PRINT
117  #undef DEFINE_EVENT_CONDITION
118  #undef TRACE_HEADER_MULTI_READ
119  #undef DECLARE_TRACE
120  
121  /* Only undef what we defined in this file */
122  #ifdef UNDEF_TRACE_INCLUDE_FILE
123  # undef TRACE_INCLUDE_FILE
124  # undef UNDEF_TRACE_INCLUDE_FILE
125  #endif
126  
127  #ifdef UNDEF_TRACE_INCLUDE_PATH
128  # undef TRACE_INCLUDE_PATH
129  # undef UNDEF_TRACE_INCLUDE_PATH
130  #endif
131  
132  /* We may be processing more files */
133  #define CREATE_TRACE_POINTS
134  
135  #endif /* CREATE_TRACE_POINTS */
136