From mboxrd@z Thu Jan 1 00:00:00 1970 From: nils.carlson@ericsson.com (Nils Carlson) Date: Mon, 11 Apr 2011 14:04:47 +0200 Subject: [ltt-dev] [UST PATCH] Tracepoints: add wrapper tracepoint() macro In-Reply-To: <20110410231812.GA3432@Krystal> References: <20110410231812.GA3432@Krystal> Message-ID: Hi, Again, looks good, but maybe we should prefix with ust_ ? I like the macro approach. /Nils On Mon, 11 Apr 2011, Mathieu Desnoyers wrote: > ** Instrumentation API change ** > > Moving tracepoints from > > trace_name(args) > register_trace_name(...) > unregister_trace_name(...) > > to > > tracepoint(name, args) > register_tracepoint(name, ...) > unregister_tracepoint(name, ...) > > This will allow doing macro tricks at the "tracepoint()" macro expansion > site. This will be useful for integration with SystemTAP probes, which > needs to expand an inline assembly with constraints on the arguments. > > Signed-off-by: Mathieu Desnoyers > CC: Nils Carlson > CC: Steven Rostedt > CC: Josh Stone > --- > include/ust/tracepoint.h | 22 +++++++++++++++++----- > include/ust/ust_trace.h | 6 +++--- > tests/hello/hello.c | 2 +- > tests/hello/tp.c | 2 +- > tests/register_test/register_test.c | 6 +++--- > tests/trace_event/trace_event_test.c | 2 +- > tests/tracepoint/benchmark/tracepoint_benchmark.c | 4 ++-- > tests/tracepoint/tracepoint_test.c | 12 ++++++------ > 8 files changed, 34 insertions(+), 22 deletions(-) > > Index: ust/include/ust/tracepoint.h > =================================================================== > --- ust.orig/include/ust/tracepoint.h > +++ ust/include/ust/tracepoint.h > @@ -49,6 +49,18 @@ struct tracepoint { > #define TP_PROTO(args...) args > #define TP_ARGS(args...) args > > +/* > + * Tracepoints should be added to the instrumented code using the > + * "tracepoint()" macro. > + */ > +#define tracepoint(name, args...) __trace_##name(args) > + > +#define register_tracepoint(name, probe, data) \ > + __register_trace_##name(probe, data) > + > +#define unregister_tracepoint(name, probe, data) \ > + __unregister_trace_##name(probe, data) > + > #define CONFIG_TRACEPOINTS > #ifdef CONFIG_TRACEPOINTS > > @@ -99,7 +111,7 @@ struct tracepoint { > */ > #define __DECLARE_TRACE(name, proto, args, data_proto, data_args) \ > extern struct tracepoint __tracepoint_##name; \ > - static inline void trace_##name(proto) \ > + static inline void __trace_##name(proto) \ > { \ > __CHECK_TRACE(name, 0, TP_PROTO(data_proto), \ > TP_ARGS(data_args)); \ > @@ -110,14 +122,14 @@ struct tracepoint { > TP_ARGS(data_args)); \ > } \ > static inline int \ > - register_trace_##name(void (*probe)(data_proto), void *data) \ > + __register_trace_##name(void (*probe)(data_proto), void *data) \ > { \ > return tracepoint_probe_register(#name, (void *)probe, \ > data); \ > \ > } \ > static inline int \ > - unregister_trace_##name(void (*probe)(data_proto), void *data) \ > + __unregister_trace_##name(void (*probe)(data_proto), void *data)\ > { \ > return tracepoint_probe_unregister(#name, (void *)probe, \ > data); \ > @@ -145,11 +157,11 @@ extern void tracepoint_update_probe_rang > { } \ > static inline void _trace_##name(proto) \ > { } \ > - static inline int register_trace_##name(void (*probe)(proto), void *data) \ > + static inline int __register_trace_##name(void (*probe)(proto), void *data) \ > { \ > return -ENOSYS; \ > } \ > - static inline int unregister_trace_##name(void (*probe)(proto), void *data) \ > + static inline int __unregister_trace_##name(void (*probe)(proto), void *data) \ > { \ > return -ENOSYS; \ > } > Index: ust/include/ust/ust_trace.h > =================================================================== > --- ust.orig/include/ust/ust_trace.h > +++ ust/include/ust/ust_trace.h > @@ -70,11 +70,11 @@ > } \ > static inline int register_event_##name(void *data) \ > { \ > - return register_trace_##name(trace_printf_##name, data); \ > + return register_tracepoint(name, trace_printf_##name, data); \ > } \ > static inline int unregister_event_##name(void *data) \ > { \ > - return unregister_trace_##name(trace_printf_##name, data); \ > + return unregister_tracepoint(name, trace_printf_##name, data); \ > } \ > struct trace_event __event_##name = { \ > __tpstrtab_##name, \ > @@ -88,7 +88,7 @@ > static void __attribute__((constructor)) init_##name() \ > { \ > void *dummy = NULL; \ > - register_trace_##name(trace_printf_##name, dummy); \ > + register_tracepoint(name, trace_printf_##name, dummy); \ > } > > > Index: ust/tests/hello/hello.c > =================================================================== > --- ust.orig/tests/hello/hello.c > +++ ust/tests/hello/hello.c > @@ -73,7 +73,7 @@ int main() > for(i=0; i<50; i++) { > trace_mark(bar, "str %s", "FOOBAZ"); > trace_mark(bar2, "number1 %d number2 %d", 53, 9800); > - trace_hello_tptest(i); > + tracepoint(hello_tptest, i); > usleep(100000); > } > > Index: ust/tests/hello/tp.c > =================================================================== > --- ust.orig/tests/hello/tp.c > +++ ust/tests/hello/tp.c > @@ -40,5 +40,5 @@ void tptest_probe(void *data, int anint) > static void __attribute__((constructor)) init() > { > DBG("connecting tracepoint...\n"); > - register_trace_hello_tptest(tptest_probe, &hello_struct); > + register_tracepoint(hello_tptest, tptest_probe, &hello_struct); > } > Index: ust/tests/register_test/register_test.c > =================================================================== > --- ust.orig/tests/register_test/register_test.c > +++ ust/tests/register_test/register_test.c > @@ -65,13 +65,13 @@ static void * register_thread_main(void > } > > for (i=0; i<1000; i++) { > - while (!register_trace_hello_tptest(tptest_probe, > + while (!register_tracepoint(hello_tptest, tptest_probe, > &hello[j%HELLO_LENGTH])) { > usleep(10); > j++; > } > printf("Registered all\n"); > - while (!unregister_trace_hello_tptest(tptest_probe, > + while (!unregister_tracepoint(hello_tptest, tptest_probe, > &hello[j%HELLO_LENGTH])) { > usleep(10); > j++; > @@ -89,7 +89,7 @@ int main(int argc, char **argv) > > pthread_create(®ister_thread, NULL, register_thread_main, NULL); > for(i=0; i<1000000; i++) { > - trace_hello_tptest(i); > + tracepoint(hello_tptest, i); > } > > return 0; > Index: ust/tests/trace_event/trace_event_test.c > =================================================================== > --- ust.orig/tests/trace_event/trace_event_test.c > +++ ust/tests/trace_event/trace_event_test.c > @@ -25,7 +25,7 @@ int main(int argc, char * argv[]) > static unsigned long time, i; > for (i=0; i<10; i++) { > time=trace_clock_read64(); > - trace_test(time, i); > + tracepoint(test, time, i); > } > return 0; > } > Index: ust/tests/tracepoint/benchmark/tracepoint_benchmark.c > =================================================================== > --- ust.orig/tests/tracepoint/benchmark/tracepoint_benchmark.c > +++ ust/tests/tracepoint/benchmark/tracepoint_benchmark.c > @@ -49,12 +49,12 @@ void tp_probe(void *data, unsigned int p > > static void __attribute__((constructor)) init() > { > - register_trace_ust_event(tp_probe, NULL); > + register_tracepoint(ust_event, tp_probe, NULL); > } > > void single_trace(unsigned int v) > { > - trace_ust_event(v); > + tracepoint(ust_event, v); > } > > void do_trace(void) > Index: ust/tests/tracepoint/tracepoint_test.c > =================================================================== > --- ust.orig/tests/tracepoint/tracepoint_test.c > +++ ust/tests/tracepoint/tracepoint_test.c > @@ -90,18 +90,18 @@ void tp_probe(void *data, unsigned int p > > static void __attribute__((constructor)) init() > { > - register_trace_ust_event(tp_probe, NULL); > - register_trace_ust_event(tp_probe2, NULL); > - register_trace_ust_event(tp_probe3, &msg_probe3); > - register_trace_ust_event2(tp_probe4, NULL); > + register_tracepoint(ust_event, tp_probe, NULL); > + register_tracepoint(ust_event, tp_probe2, NULL); > + register_tracepoint(ust_event, tp_probe3, &msg_probe3); > + register_tracepoint(ust_event2, tp_probe4, NULL); > } > > int main(int argc, char **argv) { > unsigned int v = 42; > /* Tracepoint 1 : ust_event */ > - trace_ust_event(v); > + tracepoint(ust_event, v); > /* Tracepoint 2 : ust_event2 */ > - trace_ust_event2(v); > + tracepoint(ust_event2, v); > > return 0; > } > > -- > Mathieu Desnoyers > Operating System Efficiency R&D Consultant > EfficiOS Inc. > http://www.efficios.com >