Module: xenomai-forge
Branch: next
Commit: 734b90a1d8e9b8dabcbc6afeeb8201d7097b43df
URL:    
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=734b90a1d8e9b8dabcbc6afeeb8201d7097b43df

Author: Philippe Gerum <r...@xenomai.org>
Date:   Tue May 27 09:23:23 2014 +0200

cobalt/posix/event: introduce tracepoints

---

 kernel/cobalt/posix/event.c        |    9 +++-
 kernel/cobalt/trace/cobalt-posix.h |   99 ++++++++++++++++++++++++++++++++++++
 2 files changed, 107 insertions(+), 1 deletion(-)

diff --git a/kernel/cobalt/posix/event.c b/kernel/cobalt/posix/event.c
index d000291..37b2c81 100644
--- a/kernel/cobalt/posix/event.c
+++ b/kernel/cobalt/posix/event.c
@@ -42,6 +42,7 @@
 #include "thread.h"
 #include "clock.h"
 #include "event.h"
+#include <trace/events/cobalt-posix.h>
 
 struct event_wait_context {
        struct xnthread_wait_context wc;
@@ -62,6 +63,8 @@ int cobalt_event_init(struct cobalt_event_shadow __user 
*u_event,
        struct xnheap *heap;
        spl_t s;
 
+       trace_cobalt_event_init(u_event, value, flags);
+
        event = xnmalloc(sizeof(*event));
        if (event == NULL)
                return -ENOMEM;
@@ -133,7 +136,9 @@ int cobalt_event_wait(struct cobalt_event_shadow __user 
*u_event,
                        tmode = XN_ABSOLUTE;
                } else
                        timeout = XN_NONBLOCK;
-       }
+               trace_cobalt_event_timedwait(u_event, bits, mode, &ts);
+       } else
+               trace_cobalt_event_wait(u_event, bits, mode);
 
        xnlock_get_irqsave(&nklock, s);
 
@@ -268,6 +273,8 @@ int cobalt_event_destroy(struct cobalt_event_shadow __user 
*u_event)
        int ret = 0;
        spl_t s;
 
+       trace_cobalt_event_destroy(u_event);
+
        handle = cobalt_get_handle_from_user(&u_event->handle);
 
        xnlock_get_irqsave(&nklock, s);
diff --git a/kernel/cobalt/trace/cobalt-posix.h 
b/kernel/cobalt/trace/cobalt-posix.h
index 27b3a31..6e0f04e 100644
--- a/kernel/cobalt/trace/cobalt-posix.h
+++ b/kernel/cobalt/trace/cobalt-posix.h
@@ -7,6 +7,7 @@
 #include <linux/tracepoint.h>
 #include <xenomai/posix/cond.h>
 #include <xenomai/posix/mqueue.h>
+#include <xenomai/posix/event.h>
 
 #define __timespec_fields(__name)                              \
        __field(__kernel_time_t, tv_sec_##__name)               \
@@ -910,6 +911,104 @@ DEFINE_EVENT(cobalt_posix_mqattr, cobalt_mq_setattr,
        TP_ARGS(mqd, attr)
 );
 
+#define cobalt_print_evflags(__flags)                  \
+       __print_flags(__flags,  "|",                    \
+                     {COBALT_EVENT_SHARED, "shared"},  \
+                     {COBALT_EVENT_PRIO, "prio"})
+
+TRACE_EVENT(cobalt_event_init,
+       TP_PROTO(const struct cobalt_event_shadow __user *u_event,
+                unsigned long value, int flags),
+       TP_ARGS(u_event, value, flags),
+       TP_STRUCT__entry(
+               __field(const struct cobalt_event_shadow __user *, u_event)
+               __field(unsigned long, value)
+               __field(int, flags)
+       ),
+       TP_fast_assign(
+               __entry->u_event = u_event;
+               __entry->value = value;
+               __entry->flags = flags;
+       ),
+       TP_printk("event=%p value=%lu flags=%#x(%s)",
+                 __entry->u_event, __entry->value,
+                 __entry->flags, cobalt_print_evflags(__entry->flags))
+);
+
+#define cobalt_print_evmode(__mode)                    \
+       __print_symbolic(__mode,                        \
+                        {COBALT_EVENT_ANY, "any"},     \
+                        {COBALT_EVENT_ALL, "all"})
+
+TRACE_EVENT(cobalt_event_timedwait,
+       TP_PROTO(const struct cobalt_event_shadow __user *u_event,
+                unsigned long bits, int mode,
+                const struct timespec *timeout),
+       TP_ARGS(u_event, bits, mode, timeout),
+       TP_STRUCT__entry(
+               __field(const struct cobalt_event_shadow __user *, u_event)
+               __field(unsigned long, bits)
+               __field(int, mode)
+               __timespec_fields(timeout)
+       ),
+       TP_fast_assign(
+               __entry->u_event = u_event;
+               __entry->bits = bits;
+               __entry->mode = mode;
+               __assign_timespec(timeout, timeout);
+       ),
+       TP_printk("event=%p bits=%#lx mode=%#x(%s) timeout=(%ld.%09ld)",
+                 __entry->u_event, __entry->bits, __entry->mode,
+                 cobalt_print_evmode(__entry->mode),
+                 __timespec_args(timeout))
+);
+
+TRACE_EVENT(cobalt_event_wait,
+       TP_PROTO(const struct cobalt_event_shadow __user *u_event,
+                unsigned long bits, int mode),
+       TP_ARGS(u_event, bits, mode),
+       TP_STRUCT__entry(
+               __field(const struct cobalt_event_shadow __user *, u_event)
+               __field(unsigned long, bits)
+               __field(int, mode)
+       ),
+       TP_fast_assign(
+               __entry->u_event = u_event;
+               __entry->bits = bits;
+               __entry->mode = mode;
+       ),
+       TP_printk("event=%p bits=%#lx mode=%#x(%s)",
+                 __entry->u_event, __entry->bits, __entry->mode,
+                 cobalt_print_evmode(__entry->mode))
+);
+
+DECLARE_EVENT_CLASS(cobalt_event_ident,
+       TP_PROTO(const struct cobalt_event_shadow __user *u_event),
+       TP_ARGS(u_event),
+       TP_STRUCT__entry(
+               __field(const struct cobalt_event_shadow __user *, u_event)
+       ),
+       TP_fast_assign(
+               __entry->u_event = u_event;
+       ),
+       TP_printk("event=%p", __entry->u_event)
+);
+
+DEFINE_EVENT(cobalt_event_ident, cobalt_event_destroy,
+       TP_PROTO(const struct cobalt_event_shadow __user *u_event),
+       TP_ARGS(u_event)
+);
+
+DEFINE_EVENT(cobalt_event_ident, cobalt_event_sync,
+       TP_PROTO(const struct cobalt_event_shadow __user *u_event),
+       TP_ARGS(u_event)
+);
+
+DEFINE_EVENT(cobalt_event_ident, cobalt_event_inquire,
+       TP_PROTO(const struct cobalt_event_shadow __user *u_event),
+       TP_ARGS(u_event)
+);
+
 #endif /* _TRACE_COBALT_POSIX_H */
 
 /* This part must be outside protection */


_______________________________________________
Xenomai-git mailing list
Xenomai-git@xenomai.org
http://www.xenomai.org/mailman/listinfo/xenomai-git

Reply via email to