From mboxrd@z Thu Jan 1 00:00:00 1970 From: nils.carlson@ericsson.com (Nils Carlson) Date: Mon, 11 Apr 2011 14:06:51 +0200 Subject: [ltt-dev] [UST PATCH] Tracepoints: add noargs support In-Reply-To: <20110410231959.GB3432@Krystal> References: <20110410231959.GB3432@Krystal> Message-ID: Again, what do you think of UST_ prefixing the "externally visible" macros? /Nils On Mon, 11 Apr 2011, Mathieu Desnoyers wrote: > Add support for tracepoints receiving no argument as parameters. Copied > from Linux kernel: > > commit 38516ab59fbc5b3bb278cf5e1fe2867c70cff32e > Author: Steven Rostedt > Date: Tue Apr 20 17:04:50 2010 -0400 > > Signed-off-by: Mathieu Desnoyers > CC: Nils Carlson > CC: Steven Rostedt > --- > include/ust/tracepoint.h | 25 +++++++++++++++++++++---- > 1 file changed, 21 insertions(+), 4 deletions(-) > > Index: ust/include/ust/tracepoint.h > =================================================================== > --- ust.orig/include/ust/tracepoint.h > +++ ust/include/ust/tracepoint.h > @@ -175,10 +175,27 @@ static inline void tracepoint_update_pro > { } > #endif /* CONFIG_TRACEPOINTS */ > > -#define DECLARE_TRACE(name, proto, args) \ > - __DECLARE_TRACE(name, PARAMS(proto), PARAMS(args), \ > - PARAMS(void *__data, proto), \ > - PARAMS(__data, args)) > +/* > + * The need for the DECLARE_TRACE_NOARGS() is to handle the prototype > + * (void). "void" is a special value in a function prototype and can > + * not be combined with other arguments. Since the DECLARE_TRACE() > + * macro adds a data element at the beginning of the prototype, > + * we need a way to differentiate "(void *data, proto)" from > + * "(void *data, void)". The second prototype is invalid. > + * > + * DECLARE_TRACE_NOARGS() passes "void" as the tracepoint prototype > + * and "void *__data" as the callback prototype. > + * > + * DECLARE_TRACE() passes "proto" as the tracepoint protoype and > + * "void *__data, proto" as the callback prototype. > + */ > +#define DECLARE_TRACE_NOARGS(name) \ > + __DECLARE_TRACE(name, void, , void *__data, __data) > + > +#define DECLARE_TRACE(name, proto, args) \ > + __DECLARE_TRACE(name, PARAMS(proto), PARAMS(args), \ > + PARAMS(void *__data, proto), \ > + PARAMS(__data, args)) > > /* > * Connect a probe to a tracepoint. > > -- > Mathieu Desnoyers > Operating System Efficiency R&D Consultant > EfficiOS Inc. > http://www.efficios.com >