Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

tracing: Add DEFINE_EVENT_FN() macro

Each TRACE_EVENT() adds several helper functions. If two or more trace events
share the same structure and print format, they can also share most of these
helper functions and save a lot of space from duplicate code. This is why the
DECLARE_EVENT_CLASS() and DEFINE_EVENT() were created.

Some events require a trigger to be called at registering and unregistering of
the event and to do so they use TRACE_EVENT_FN().

If multiple events require a trigger, they currently have no choice but to use
TRACE_EVENT_FN() as there's no DEFINE_EVENT_FN() available. This unfortunately
causes a lot of wasted duplicate code created.

By adding a DEFINE_EVENT_FN(), these events can still use a
DECLARE_EVENT_CLASS() and then define their own triggers.

Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Link: http://lkml.kernel.org/r/51C3236C.8030508@hds.com
Signed-off-by: Seiji Aguchi <seiji.aguchi@hds.com>
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>

authored by

Steven Rostedt and committed by
H. Peter Anvin
f5abaa1b 7d132055

+11
+2
include/linux/tracepoint.h
··· 378 378 #define DECLARE_EVENT_CLASS(name, proto, args, tstruct, assign, print) 379 379 #define DEFINE_EVENT(template, name, proto, args) \ 380 380 DECLARE_TRACE(name, PARAMS(proto), PARAMS(args)) 381 + #define DEFINE_EVENT_FN(template, name, proto, args, reg, unreg)\ 382 + DECLARE_TRACE(name, PARAMS(proto), PARAMS(args)) 381 383 #define DEFINE_EVENT_PRINT(template, name, proto, args, print) \ 382 384 DECLARE_TRACE(name, PARAMS(proto), PARAMS(args)) 383 385 #define DEFINE_EVENT_CONDITION(template, name, proto, \
+5
include/trace/define_trace.h
··· 44 44 #define DEFINE_EVENT(template, name, proto, args) \ 45 45 DEFINE_TRACE(name) 46 46 47 + #undef DEFINE_EVENT_FN 48 + #define DEFINE_EVENT_FN(template, name, proto, args, reg, unreg) \ 49 + DEFINE_TRACE_FN(name, reg, unreg) 50 + 47 51 #undef DEFINE_EVENT_PRINT 48 52 #define DEFINE_EVENT_PRINT(template, name, proto, args, print) \ 49 53 DEFINE_TRACE(name) ··· 95 91 #undef TRACE_EVENT_CONDITION 96 92 #undef DECLARE_EVENT_CLASS 97 93 #undef DEFINE_EVENT 94 + #undef DEFINE_EVENT_FN 98 95 #undef DEFINE_EVENT_PRINT 99 96 #undef DEFINE_EVENT_CONDITION 100 97 #undef TRACE_HEADER_MULTI_READ
+4
include/trace/ftrace.h
··· 71 71 static struct ftrace_event_call __used \ 72 72 __attribute__((__aligned__(4))) event_##name 73 73 74 + #undef DEFINE_EVENT_FN 75 + #define DEFINE_EVENT_FN(template, name, proto, args, reg, unreg) \ 76 + DEFINE_EVENT(template, name, PARAMS(proto), PARAMS(args)) 77 + 74 78 #undef DEFINE_EVENT_PRINT 75 79 #define DEFINE_EVENT_PRINT(template, name, proto, args, print) \ 76 80 DEFINE_EVENT(template, name, PARAMS(proto), PARAMS(args))