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