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