From: mathieu.desnoyers@efficios.com (Mathieu Desnoyers)
Subject: [ltt-dev] [UST PATCH] Tracepoints: add wrapper tracepoint() macro
Date: Sun, 10 Apr 2011 19:18:12 -0400 [thread overview]
Message-ID: <20110410231812.GA3432@Krystal> (raw)
** 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 <mathieu.desnoyers at efficios.com>
CC: Nils Carlson <nils.carlson at ericsson.com>
CC: Steven Rostedt <srostedt at redhat.com>
CC: Josh Stone <jistone at redhat.com>
---
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
next reply other threads:[~2011-04-10 23:18 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-04-10 23:18 Mathieu Desnoyers [this message]
2011-04-11 12:04 ` Nils Carlson
2011-04-11 14:14 ` Mathieu Desnoyers
2011-04-11 21:20 ` Josh Stone
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20110410231812.GA3432@Krystal \
--to=mathieu.desnoyers@efficios.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox