All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jan Kiszka <jan.kiszka@domain.hid>
To: xenomai-core <xenomai@xenomai.org>
Subject: Re: [Xenomai-core] LTTng for Xenomai - next round
Date: Thu, 08 Nov 2007 09:09:57 +0100	[thread overview]
Message-ID: <4732C455.6060900@domain.hid> (raw)
In-Reply-To: <472ED274.9070205@domain.hid>


[-- Attachment #1.1: Type: text/plain, Size: 1205 bytes --]

Jan Kiszka wrote:
> Jan Kiszka wrote:
>> Jan Kiszka wrote:
>>> ...
>>> Regarding the instrumentation: My latest Xenomai patch changed the
>>> marker arguments even more away from your original patch. Not looking at
>>> the plugin for this, I may have removed useful information. Please let
>>> us know what you would like to see in the trace points so that this part
>>> can quickly stabilise, maybe even go into the next Xenomai release.
>> I decided to accelerate the core instrumentation as it looks like I will
>> need it sooner than expected. So here comes another version of the
>> Xenomai-part of the patch series, changing the following:
>>
>>  - Full conversion to trace_mark, no intermediate xnltt_log_event
>>    anymore. Unsupported kernel versions are caught by the wrapping layer
>>    instead. Thus, also ltt.h is obsolete now (bootstrap run is required
>>    for user land).
> 
> Just realised: As usual, this patch nicely breaks the simulator (what is
> trace_mark?). Will fix with the next submission later today or tomorrow.
> 

Here comes v6 of instrumentation patch. It fixes the simulator build +
another build error when periodic timing was disabled.

Jan

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.2: lttng-v6.patch --]
[-- Type: text/x-patch; name="lttng-v6.patch", Size: 57175 bytes --]

---
 include/asm-generic/wrappers.h |    6 +
 include/asm-sim/system.h       |    3 
 include/nucleus/Makefile.am    |    1 
 include/nucleus/ltt.h          |  140 ------------------------------
 include/rtdm/rtdm_driver.h     |    7 +
 ksrc/nucleus/Config.in         |    9 -
 ksrc/nucleus/Kconfig           |   36 -------
 ksrc/nucleus/Makefile          |    3 
 ksrc/nucleus/intr.c            |   32 ++++---
 ksrc/nucleus/ltt.c             |  186 -----------------------------------------
 ksrc/nucleus/module.c          |    8 -
 ksrc/nucleus/pod.c             |  128 +++++++++++++++++++---------
 ksrc/nucleus/shadow.c          |   48 +++++++---
 ksrc/nucleus/synch.c           |   20 +++-
 ksrc/nucleus/timebase.c        |   27 +++--
 ksrc/nucleus/timer.c           |   25 +++++
 ksrc/skins/rtdm/core.c         |   33 +++++++
 ksrc/skins/rtdm/device.c       |   21 ++++
 ksrc/skins/rtdm/drvlib.c       |   25 +++++
 19 files changed, 290 insertions(+), 468 deletions(-)

Index: xenomai/include/nucleus/ltt.h
===================================================================
--- xenomai.orig/include/nucleus/ltt.h
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * Copyright (C) 2004 Gilles Chanteperdrix <gilles.chanteperdrix@xenomai.org.net>
- * Copyright (C) 2005 Philippe Gerum <rpm@xenomai.org>.
- *
- * Xenomai is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published
- * by the Free Software Foundation; either version 2 of the License,
- * or (at your option) any later version.
- *
- * Xenomai is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Xenomai; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _XENO_NUCLEUS_LTT_H
-#define _XENO_NUCLEUS_LTT_H
-
-#include <nucleus/types.h>
-
-#ifdef CONFIG_LTT
-
-#include <linux/ltt-core.h>
-
-struct xnltt_evmap {
-
-    char *ltt_label;	/* !< Event label (creation time). */
-    char *ltt_format;	/* !< Event format (creation time). */
-    int ltt_evid;	/* !< LTT custom event id. */
-    int ltt_filter;	/* !< Event filter. */
-};
-
-#define xeno_ev_ienter       0
-#define xeno_ev_iexit        1
-#define xeno_ev_resched      2
-#define xeno_ev_smpsched     3
-#define xeno_ev_fastsched    4
-#define xeno_ev_switch       5
-#define xeno_ev_fault        6
-#define xeno_ev_callout      7
-#define xeno_ev_finalize     8
-#define xeno_ev_thrinit      9
-#define xeno_ev_thrstart     10
-#define xeno_ev_threstart    11
-#define xeno_ev_thrdelete    12
-#define xeno_ev_thrsuspend   13
-#define xeno_ev_thresume     14
-#define xeno_ev_thrunblock   15
-#define xeno_ev_threnice     16
-#define xeno_ev_cpumigrate   17
-#define xeno_ev_sigdispatch  18
-#define xeno_ev_thrboot      19
-#define xeno_ev_tstick       20
-#define xeno_ev_sleepon      21
-#define xeno_ev_wakeup1      22
-#define xeno_ev_wakeupx      23
-#define xeno_ev_syncflush    24
-#define xeno_ev_syncforget   25
-#define xeno_ev_lohandler    26
-#define xeno_ev_primarysw    27
-#define xeno_ev_primary      28
-#define xeno_ev_secondarysw  29
-#define xeno_ev_secondary    30
-#define xeno_ev_shadowmap    31
-#define xeno_ev_shadowunmap  32
-#define xeno_ev_shadowstart  33
-#define xeno_ev_syscall      34
-#define xeno_ev_shadowexit   35
-#define xeno_ev_thrsetmode   36
-#define xeno_ev_rdrotate     37
-#define xeno_ev_rractivate   38
-#define xeno_ev_rrdeactivate 39
-#define xeno_ev_timeset      40
-#define xeno_ev_addhook      41
-#define xeno_ev_remhook      42
-#define xeno_ev_thrperiodic  43
-#define xeno_ev_thrwait      44
-#define xeno_ev_tsenable     45
-#define xeno_ev_tsdisable    46
-#define xeno_ev_mark         47
-#define xeno_ev_watchdog     48
-
-#define xeno_evthr  0x1
-#define xeno_evirq  0x2
-#define xeno_evsys  0x4
-#define xeno_evall  0x7
-
-#define XNLTT_MAX_EVENTS 64
-
-extern struct xnltt_evmap xnltt_evtable[];
-
-extern int xnltt_filter;
-
-#define xnltt_log_event(ev, args...) \
-do { \
-  if (xnltt_evtable[ev].ltt_filter & xnltt_filter) \
-    ltt_log_std_formatted_event(xnltt_evtable[ev].ltt_evid, ##args); \
-} while(0)
-
-static inline void xnltt_set_filter (int mask)
-{
-    xnltt_filter = mask;
-}
-
-static inline void xnltt_stop_tracing (void)
-{
-    xnltt_set_filter(0);
-}
-
-void xnltt_log_mark(const char *fmt,
-		    ...);
-
-int xnltt_mount(void);
-
-void xnltt_umount(void);
-
-#else /* !CONFIG_LTT */
-
-#define xnltt_log_event(ev, args...); /* Eat the semi-colon. */
-
-static inline void xnltt_log_mark (const char *fmt, ...)
-{
-}
-
-static inline void xnltt_set_filter (int mask)
-{
-}
-
-static inline void xnltt_stop_tracing (void)
-{
-}
-
-#endif /* CONFIG_LTT */
-
-#endif /* !_XENO_NUCLEUS_LTT_H_ */
Index: xenomai/ksrc/nucleus/intr.c
===================================================================
--- xenomai.orig/ksrc/nucleus/intr.c
+++ xenomai/ksrc/nucleus/intr.c
@@ -34,7 +34,6 @@
 
 #include <nucleus/pod.h>
 #include <nucleus/intr.h>
-#include <nucleus/ltt.h>
 #include <nucleus/stat.h>
 #include <asm/xenomai/bits/intr.h>
 
@@ -98,9 +97,8 @@ void xnintr_clock_handler(void)
 
 	xnarch_announce_tick();
 
-	xnltt_log_event(xeno_ev_ienter, XNARCH_TIMER_IRQ);
-	xnltt_log_event(xeno_ev_tstick, nktbase.name,
-			xnpod_current_thread()->name);
+	trace_mark(xn_nucleus_irq_enter, "irq %d", XNARCH_TIMER_IRQ);
+	trace_mark(xn_nucleus_tbase_tick, "base %s", nktbase.name);
 
 	++sched->inesting;
 
@@ -124,7 +122,7 @@ void xnintr_clock_handler(void)
 		xnarch_relay_tick();
 	}
 
-	xnltt_log_event(xeno_ev_iexit, XNARCH_TIMER_IRQ);
+	trace_mark(xn_nucleus_irq_exit, "irq %d", XNARCH_TIMER_IRQ);
 	xnstat_exectime_switch(sched, prev);
 }
 
@@ -168,7 +166,7 @@ static void xnintr_shirq_handler(unsigne
 
 	prev  = xnstat_exectime_get_current(sched);
 	start = xnstat_exectime_now();
-	xnltt_log_event(xeno_ev_ienter, irq);
+	trace_mark(xn_nucleus_irq_enter, "irq %d", irq);
 
 	++sched->inesting;
 
@@ -212,7 +210,7 @@ static void xnintr_shirq_handler(unsigne
 	if (--sched->inesting == 0 && xnsched_resched_p())
 		xnpod_schedule();
 
-	xnltt_log_event(xeno_ev_iexit, irq);
+	trace_mark(xn_nucleus_irq_exit, "irq %d", irq);
 	xnstat_exectime_switch(sched, prev);
 }
 
@@ -233,7 +231,7 @@ static void xnintr_edge_shirq_handler(un
 
 	prev  = xnstat_exectime_get_current(sched);
 	start = xnstat_exectime_now();
-	xnltt_log_event(xeno_ev_ienter, irq);
+	trace_mark(xn_nucleus_irq_enter, "irq %d", irq);
 
 	++sched->inesting;
 
@@ -292,7 +290,7 @@ static void xnintr_edge_shirq_handler(un
 	if (--sched->inesting == 0 && xnsched_resched_p())
 		xnpod_schedule();
 
-	xnltt_log_event(xeno_ev_iexit, irq);
+	trace_mark(xn_nucleus_irq_exit, "irq %d", irq);
 	xnstat_exectime_switch(sched, prev);
 }
 
@@ -443,7 +441,7 @@ static void xnintr_irq_handler(unsigned 
 
 	prev  = xnstat_exectime_get_current(sched);
 	start = xnstat_exectime_now();
-	xnltt_log_event(xeno_ev_ienter, irq);
+	trace_mark(xn_nucleus_irq_enter, "irq %d", irq);
 
 	++sched->inesting;
 
@@ -490,7 +488,7 @@ static void xnintr_irq_handler(unsigned 
 	if (--sched->inesting == 0 && xnsched_resched_p())
 		xnpod_schedule();
 
-	xnltt_log_event(xeno_ev_iexit, irq);
+	trace_mark(xn_nucleus_irq_exit, "irq %d", irq);
 	xnstat_exectime_switch(sched, prev);
 }
 
@@ -695,6 +693,9 @@ int xnintr_attach(xnintr_t *intr, void *
 	int err;
 	spl_t s;
 
+	trace_mark(xn_nucleus_irq_attach, "irq %u name %s",
+		   intr->irq, intr->name);
+
 	intr->cookie = cookie;
 	memset(&intr->stat, 0, sizeof(intr->stat));
 
@@ -750,6 +751,8 @@ int xnintr_detach(xnintr_t *intr)
 	int err;
 	spl_t s;
 
+	trace_mark(xn_nucleus_irq_detach, "irq %u", intr->irq);
+
 	xnlock_get_irqsave(&intrlock, s);
 
 	err = xnintr_irq_detach(intr);
@@ -790,6 +793,8 @@ int xnintr_detach(xnintr_t *intr)
 
 int xnintr_enable(xnintr_t *intr)
 {
+	trace_mark(xn_nucleus_irq_enable, "irq %u", intr->irq);
+
 	return xnarch_enable_irq(intr->irq);
 }
 
@@ -820,6 +825,8 @@ int xnintr_enable(xnintr_t *intr)
 
 int xnintr_disable(xnintr_t *intr)
 {
+	trace_mark(xn_nucleus_irq_disable, "irq %u", intr->irq);
+
 	return xnarch_disable_irq(intr->irq);
 }
 
@@ -844,6 +851,9 @@ int xnintr_disable(xnintr_t *intr)
 
 xnarch_cpumask_t xnintr_affinity(xnintr_t *intr, xnarch_cpumask_t cpumask)
 {
+	trace_mark(xn_nucleus_irq_affinity, "irq %u %lu",
+		   intr->irq, *(unsigned long *)&cpumask);
+
 	return xnarch_set_irq_affinity(intr->irq, cpumask);
 }
 
Index: xenomai/ksrc/nucleus/ltt.c
===================================================================
--- xenomai.orig/ksrc/nucleus/ltt.c
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
- * Copyright (C) 2004 Gilles Chanteperdrix <gilles.chanteperdrix@xenomai.org.net>
- * Copyright (C) 2005 Philippe Gerum <rpm@xenomai.org>.
- *
- * Xenomai is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published
- * by the Free Software Foundation, Inc., 675 Mass Ave, Cambridge MA
- * 02139, USA; either version 2 of the License, or (at your option)
- * any later version.
- *
- * Xenomai is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <linux/init.h>
-#include <linux/module.h>
-#include <stdarg.h>
-#include <nucleus/ltt.h>
-
-void xnltt_log_mark(const char *fmt, ...)
-{
-	char markbuf[64];	/* Don't eat too much stack space. */
-	va_list ap;
-
-	if (xnltt_evtable[xeno_ev_mark].ltt_filter & xnltt_filter) {
-		va_start(ap, fmt);
-		vsnprintf(markbuf, sizeof(markbuf), fmt, ap);
-		va_end(ap);
-		ltt_log_std_formatted_event(xnltt_evtable[xeno_ev_mark].
-					    ltt_evid, markbuf);
-	}
-}
-
-int __init xnltt_mount(void)
-{
-	int ev, evid;
-
-	/* Create all custom LTT events we need. */
-
-	for (ev = 0; xnltt_evtable[ev].ltt_label != NULL; ev++) {
-		evid = ltt_create_event(xnltt_evtable[ev].ltt_label,
-					xnltt_evtable[ev].ltt_format,
-					LTT_CUSTOM_EV_FORMAT_TYPE_STR, NULL);
-		if (evid < 0) {
-			while (--ev >= 0) {
-				xnltt_evtable[ev].ltt_evid = -1;
-				ltt_destroy_event(xnltt_evtable[ev].ltt_evid);
-			}
-
-			return evid;
-		}
-
-		xnltt_evtable[ev].ltt_evid = evid;
-	}
-
-#ifdef CONFIG_XENO_OPT_FILTER_EVALL
-	xnltt_filter = ~xeno_evall;
-#else /* !CONFIG_XENO_OPT_FILTER_EVALL */
-#ifdef CONFIG_XENO_OPT_FILTER_EVIRQ
-	xnltt_filter &= ~xeno_evirq;
-#endif /* CONFIG_XENO_OPT_FILTER_EVIRQ */
-#ifdef CONFIG_XENO_OPT_FILTER_EVTHR
-	xnltt_filter &= ~xeno_evthr;
-#endif /* CONFIG_XENO_OPT_FILTER_EVTHR */
-#ifdef CONFIG_XENO_OPT_FILTER_EVSYS
-	xnltt_filter &= ~xeno_evthr;
-#endif /* CONFIG_XENO_OPT_FILTER_EVSYS */
-#endif /* CONFIG_XENO_OPT_FILTER_EVALL */
-
-	return 0;
-}
-
-void __exit xnltt_umount(void)
-{
-	int ev;
-
-	for (ev = 0; xnltt_evtable[ev].ltt_evid != -1; ev++)
-		ltt_destroy_event(xnltt_evtable[ev].ltt_evid);
-}
-
-struct xnltt_evmap xnltt_evtable[] = {
-
-	[xeno_ev_ienter] = {"Xenomai i-enter", "irq=%d", -1, xeno_evirq},
-	[xeno_ev_iexit] = {"Xenomai i-exit", "irq=%d", -1, xeno_evirq},
-	[xeno_ev_resched] = {"Xenomai resched", NULL, -1, xeno_evthr},
-	[xeno_ev_smpsched] = {"Xenomai smpsched", NULL, -1, xeno_evthr},
-	[xeno_ev_fastsched] = {"Xenomai fastsched", NULL, -1, xeno_evthr},
-	[xeno_ev_switch] = {"Xenomai ctxsw", "%s -> %s", -1, xeno_evthr},
-	[xeno_ev_fault] =
-	    {"Xenomai fault", "thread=%s, location=%p, trap=%d", -1,
-	     xeno_evall},
-	[xeno_ev_callout] =
-	    {"Xenomai callout", "type=%s, thread=%s", -1, xeno_evall},
-	[xeno_ev_finalize] = {"Xenomai finalize", "%s -> %s", -1, xeno_evall},
-	[xeno_ev_thrinit] =
-	    {"Xenomai thread init", "thread=%s, flags=0x%x", -1, xeno_evthr},
-	[xeno_ev_thrstart] =
-	    {"Xenomai thread start", "thread=%s", -1, xeno_evthr},
-	[xeno_ev_threstart] =
-	    {"Xenomai thread restart", "thread=%s", -1, xeno_evthr},
-	[xeno_ev_thrdelete] =
-	    {"Xenomai thread delete", "thread=%s", -1, xeno_evthr},
-	[xeno_ev_thrsuspend] = {"Xenomai thread suspend",
-				"thread=%s, mask=0x%x, timeout=%Lu, wchan=%p",
-				-1, xeno_evthr},
-	[xeno_ev_thresume] =
-	    {"Xenomai thread resume", "thread=%s, mask=0x%x", -1, xeno_evthr},
-	[xeno_ev_thrunblock] =
-	    {"Xenomai thread unblock", "thread=%s, status=0x%x", -1,
-	     xeno_evthr},
-	[xeno_ev_threnice] =
-	    {"Xenomai thread renice", "thread=%s, prio=%d", -1, xeno_evthr},
-	[xeno_ev_cpumigrate] =
-	    {"Xenomai CPU migrate", "thread=%s, cpu=%d", -1, xeno_evthr},
-	[xeno_ev_sigdispatch] =
-	    {"Xenomai sigdispatch", "thread=%s, sigpend=0x%x", -1, xeno_evall},
-	[xeno_ev_thrboot] =
-	    {"Xenomai thread begin", "thread=%s", -1, xeno_evthr},
-	[xeno_ev_tstick] = {"Xenomai time source tick",
-			    "base=%s, runthread=%s", -1, xeno_evirq},
-	[xeno_ev_sleepon] =
-	    {"Xenomai sleepon", "thread=%s, sync=%p", -1, xeno_evthr},
-	[xeno_ev_wakeup1] =
-	    {"Xenomai wakeup1", "thread=%s, sync=%p", -1, xeno_evthr},
-	[xeno_ev_wakeupx] =
-	    {"Xenomai wakeupx", "thread=%s, sync=%p", -1, xeno_evthr},
-	[xeno_ev_syncflush] =
-	    {"Xenomai syncflush", "sync=%p, reason=0x%x", -1, xeno_evthr},
-	[xeno_ev_syncforget] =
-	    {"Xenomai syncforget", "thread=%s, sync=%p", -1, xeno_evthr},
-	[xeno_ev_lohandler] =
-	    {"Xenomai lohandler", "type=%d, task=%s, pid=%d", -1, xeno_evall},
-	[xeno_ev_primarysw] = {"Xenomai modsw1", "thread=%s", -1, xeno_evthr},
-	[xeno_ev_primary] = {"Xenomai modex1", "thread=%s", -1, xeno_evthr},
-	[xeno_ev_secondarysw] = {"Xenomai modsw2", "thread=%s", -1, xeno_evthr},
-	[xeno_ev_secondary] = {"Xenomai modex2", "thread=%s", -1, xeno_evthr},
-	[xeno_ev_shadowmap] =
-	    {"Xenomai shadow map", "thread=%s, pid=%d, prio=%d", -1,
-	     xeno_evthr},
-	[xeno_ev_shadowunmap] =
-	    {"Xenomai shadow unmap", "thread=%s, pid=%d", -1, xeno_evthr},
-	[xeno_ev_shadowstart] =
-	    {"Xenomai shadow start", "thread=%s", -1, xeno_evthr},
-	[xeno_ev_syscall] =
-	    {"Xenomai syscall", "thread=%s, skin=%d, call=%d", -1, xeno_evsys},
-	[xeno_ev_shadowexit] =
-	    {"Xenomai shadow exit", "thread=%s", -1, xeno_evthr},
-	[xeno_ev_thrsetmode] =
-	    {"Xenomai thread setmode", "thread=%s, clrmask=0x%x, setmask=0x%x",
-	     -1,
-	     xeno_evthr},
-	[xeno_ev_rdrotate] =
-	    {"Xenomai rotate readyq", "thread=%s, prio=%d", -1, xeno_evthr},
-	[xeno_ev_rractivate] = {"Xenomai RR on", "quantum=%Lu", -1, xeno_evthr},
-	[xeno_ev_rrdeactivate] = {"Xenomai RR off", NULL, -1, xeno_evthr},
-	[xeno_ev_timeset] = {"Xenomai set time", "newtime=%Lu", -1, xeno_evall},
-	[xeno_ev_addhook] =
-	    {"Xenomai add hook", "type=%d, routine=%p", -1, xeno_evall},
-	[xeno_ev_remhook] =
-	    {"Xenomai remove hook", "type=%d, routine=%p", -1, xeno_evall},
-	[xeno_ev_thrperiodic] =
-	    {"Xenomai thread speriod", "thread=%s, idate=%Lu, period=%Lu", -1,
-	     xeno_evthr},
-	[xeno_ev_thrwait] =
-	    {"Xenomai thread wperiod", "thread=%s", -1, xeno_evthr},
-	[xeno_ev_tsenable] =
-	    {"Xenomai enable time source", "tick=%u ns", -1, xeno_evall},
-	[xeno_ev_tsdisable] = {"Xenomai disable time source", NULL, -1, xeno_evall},
-	[xeno_ev_mark] = {"Xenomai **mark**", "%s", -1, xeno_evall},
-	[xeno_ev_watchdog] =
-	    {"Xenomai watchdog", "runthread=%s", -1, xeno_evall},
-	{NULL, NULL, -1, 0},
-};
-
-int xnltt_filter = xeno_evall;
-
-EXPORT_SYMBOL(xnltt_evtable);
-EXPORT_SYMBOL(xnltt_filter);
-EXPORT_SYMBOL(xnltt_log_mark);
Index: xenomai/ksrc/nucleus/pod.c
===================================================================
--- xenomai.orig/ksrc/nucleus/pod.c
+++ xenomai/ksrc/nucleus/pod.c
@@ -40,7 +40,6 @@
 #include <nucleus/intr.h>
 #include <nucleus/registry.h>
 #include <nucleus/module.h>
-#include <nucleus/ltt.h>
 #include <nucleus/stat.h>
 #include <asm/xenomai/bits/pod.h>
 
@@ -167,9 +166,10 @@ void xnpod_watchdog_handler(xntimer_t *t
 	}
 		
 	if (unlikely(++sched->wdcount >= CONFIG_XENO_OPT_WATCHDOG_TIMEOUT)) {
-		xnltt_log_event(xeno_ev_watchdog, thread->name);
+		trace_mark(xn_nucleus_watchdog, "thread %p thread_name %s",
+			   thread, xnthread_name(thread));
 		xnprintf("watchdog triggered -- killing runaway thread '%s'\n",
-			 thread->name);
+			 xnthread_name(thread));
 		xnpod_delete_thread(thread);
 		xnpod_reset_watchdog(sched);
 	}
@@ -181,7 +181,7 @@ void xnpod_schedule_handler(void) /* Cal
 {
 	xnsched_t *sched = xnpod_current_sched();
 
-	xnltt_log_event(xeno_ev_smpsched);
+	trace_mark(xe_nucleus_sched_remote, MARK_NOARGS);
 #if defined(CONFIG_SMP) && defined(CONFIG_XENO_OPT_PRIOCPL)
 	if (testbits(sched->status, XNRPICK)) {
 		clrbits(sched->status, XNRPICK);
@@ -549,11 +549,16 @@ static inline void xnpod_switch_zombie(x
 	int shadow = xnthread_test_state(threadout, XNSHADOW);
 #endif /* CONFIG_XENO_OPT_PERVASIVE */
 
-	xnltt_log_event(xeno_ev_finalize, threadout->name, threadin->name);
+	trace_mark(xn_nucleus_sched_finalize,
+		   "thread_out %p thread_out_name %s "
+		   "thread_in %p thread_in_name %s",
+		   threadout, xnthread_name(threadout),
+		   threadin, xnthread_name(threadin));
 
 	if (!emptyq_p(&nkpod->tdeleteq) && !xnthread_test_state(threadout, XNROOT)) {
-		xnltt_log_event(xeno_ev_callout, "SELF-DELETE",
-				threadout->name);
+		trace_mark(xn_nucleus_thread_callout,
+			   "thread %p thread_name %s hook %s",
+			   threadout, xnthread_name(threadout), "DELETE");
 		xnpod_fire_callouts(&nkpod->tdeleteq, threadout);
 	}
 
@@ -703,7 +708,9 @@ int xnpod_init_thread(xnthread_t *thread
 	if (err)
 		return err;
 
-	xnltt_log_event(xeno_ev_thrinit, thread->name, flags);
+	trace_mark(xn_nucleus_thread_init,
+		   "thread %p thread_name %s flags %lu priority %d",
+		   thread, xnthread_name(thread), flags, prio);
 
 	xnlock_get_irqsave(&nklock, s);
 	thread->sched = xnpod_current_sched();
@@ -835,7 +842,8 @@ int xnpod_start_thread(xnthread_t *threa
 	if (xnthread_test_state(thread, XNRRB))
 		thread->rrcredit = thread->rrperiod;
 
-	xnltt_log_event(xeno_ev_thrstart, thread->name);
+	trace_mark(xn_nucleus_thread_start, "thread %p thread_name %s",
+		   thread, xnthread_name(thread));
 
 #ifdef CONFIG_XENO_OPT_PERVASIVE
 	if (xnthread_test_state(thread, XNSHADOW)) {
@@ -859,7 +867,9 @@ int xnpod_start_thread(xnthread_t *threa
 #endif /* __XENO_SIM__ */
 
 	if (!emptyq_p(&nkpod->tstartq) && !xnthread_test_state(thread, XNROOT)) {
-		xnltt_log_event(xeno_ev_callout, "START", thread->name);
+		trace_mark(xn_nucleus_thread_callout,
+			   "thread %p thread_name %s hook %s",
+			   thread, xnthread_name(thread), "START");
 		xnpod_fire_callouts(&nkpod->tstartq, thread);
 	}
 
@@ -916,7 +926,8 @@ void xnpod_restart_thread(xnthread_t *th
 
 	xnlock_get_irqsave(&nklock, s);
 
-	xnltt_log_event(xeno_ev_threstart, thread->name);
+	trace_mark(xn_nucleus_thread_restart, "thread %p thread_name %s",
+		   thread, xnthread_name(thread));
 
 	/* Break the thread out of any wait it is currently in. */
 	xnpod_unblock_thread(thread);
@@ -1032,7 +1043,9 @@ xnflags_t xnpod_set_thread_mode(xnthread
 
 	xnlock_get_irqsave(&nklock, s);
 
-	xnltt_log_event(xeno_ev_thrsetmode, thread->name, clrmask, setmask);
+	trace_mark(xn_nucleus_thread_setmode,
+		   "thread %p thread_name %s clrmask %lu setmask %lu",
+		   thread, xnthread_name(thread), clrmask, setmask);
 
 #ifndef CONFIG_XENO_OPT_ISHIELD
 	setmask &= ~XNSHIELD;
@@ -1165,7 +1178,8 @@ void xnpod_delete_thread(xnthread_t *thr
 	}
 #endif /* CONFIG_XENO_OPT_PERVASIVE */
 
-	xnltt_log_event(xeno_ev_thrdelete, thread->name);
+	trace_mark(xn_nucleus_thread_delete, "thread %p thread_name %s",
+		   thread, xnthread_name(thread));
 
 	removeq(&nkpod->threadq, &thread->glink);
 	nkpod->threadq_rev++;
@@ -1202,8 +1216,9 @@ void xnpod_delete_thread(xnthread_t *thr
 	} else {
 		if (!emptyq_p(&nkpod->tdeleteq)
 		    && !xnthread_test_state(thread, XNROOT)) {
-			xnltt_log_event(xeno_ev_callout, "DELETE",
-					thread->name);
+			trace_mark(xn_nucleus_thread_callout,
+				   "thread %p thread_name %s hook %s",
+				   thread, xnthread_name(thread), "DELETE");
 			xnpod_fire_callouts(&nkpod->tdeleteq, thread);
 		}
 
@@ -1350,7 +1365,11 @@ void xnpod_suspend_thread(xnthread_t *th
 
 	xnlock_get_irqsave(&nklock, s);
 
-	xnltt_log_event(xeno_ev_thrsuspend, thread->name, mask, timeout, wchan);
+	trace_mark(xn_nucleus_thread_suspend,
+		   "thread %p thread_name %s mask %lu timeout %Lu "
+		   "timeout_mode %d wchan %p",
+		   thread, xnthread_name(thread), mask, timeout,
+		   timeout_mode, wchan);
 
 	sched = thread->sched;
 
@@ -1530,7 +1549,9 @@ void xnpod_resume_thread(xnthread_t *thr
 
 	xnlock_get_irqsave(&nklock, s);
 
-	xnltt_log_event(xeno_ev_thresume, thread->name, mask);
+	trace_mark(xn_nucleus_thread_resume,
+		   "thread %p thread_name %s mask %lu",
+		   thread, xnthread_name(thread), mask);
 	xnarch_trace_pid(xnthread_user_task(thread) ?
 			 xnarch_user_pid(xnthread_archtcb(thread)) : -1,
 			 xnthread_current_priority(thread));
@@ -1671,7 +1692,10 @@ int xnpod_unblock_thread(xnthread_t *thr
 
 	xnlock_get_irqsave(&nklock, s);
 
-	xnltt_log_event(xeno_ev_thrunblock, xnthread_name(thread), xnthread_state_flags(thread));
+	trace_mark(xn_nucleus_thread_unblock,
+		   "thread %p thread_name %s state %lu",
+		   thread, xnthread_name(thread),
+		   xnthread_state_flags(thread));
 
 	if (xnthread_test_state(thread, XNDELAY))
 		xnpod_resume_thread(thread, XNDELAY);
@@ -1754,7 +1778,9 @@ void xnpod_renice_thread_inner(xnthread_
 
 	xnlock_get_irqsave(&nklock, s);
 
-	xnltt_log_event(xeno_ev_threnice, thread->name, prio);
+	trace_mark(xn_nucleus_thread_renice,
+		   "thread %p thread_nmae %s priority %d",
+		   thread, xnthread_name(thread), prio);
 
 	oldprio = thread->cprio;
 
@@ -1835,7 +1861,9 @@ int xnpod_migrate_thread(int cpu)
 	if (cpu == xnarch_current_cpu())
 		goto unlock_and_exit;
 
-	xnltt_log_event(xeno_ev_cpumigrate, thread->name, cpu);
+	trace_mark(xn_nucleus_thread_migrate,
+		   "thread %p thread_name %s cpu %d",
+		   thread, xnthread_name(thread), cpu);
 
 #ifdef CONFIG_XENO_HW_FPU
 	if (xnthread_test_state(thread, XNFPU)) {
@@ -1920,7 +1948,7 @@ void xnpod_rotate_readyq(int prio)
 	if (sched_emptypq_p(&sched->readyq))
 		goto unlock_and_exit;	/* Nobody is ready. */
 
-	xnltt_log_event(xeno_ev_rdrotate, sched->runthread, prio);
+	trace_mark(xn_nucleus_sched_rotate, "priority %d", prio);
 
 	/* There is _always_ a running thread, ultimately the root
 	   one. Use the base priority, not the priority boost. */
@@ -1974,7 +2002,7 @@ void xnpod_activate_rr(xnticks_t quantum
 
 	xnlock_get_irqsave(&nklock, s);
 
-	xnltt_log_event(xeno_ev_rractivate, quantum);
+	trace_mark(xn_nucleus_sched_rractivate, "quantum %Lu", quantum);
 
 	holder = getheadq(&nkpod->threadq);
 
@@ -2019,7 +2047,7 @@ void xnpod_deactivate_rr(void)
 
 	xnlock_get_irqsave(&nklock, s);
 
-	xnltt_log_event(xeno_ev_rrdeactivate);
+	trace_mark(xn_nucleus_sched_rrdeactivate, MARK_NOARGS);
 
 	holder = getheadq(&nkpod->threadq);
 
@@ -2061,7 +2089,8 @@ void xnpod_dispatch_signals(void)
 	    || thread->asr == XNTHREAD_INVALID_ASR)
 		return;
 
-	xnltt_log_event(xeno_ev_sigdispatch, thread->name, thread->signals);
+	trace_mark(xn_nucleus_sched_sigdispatch, "signals %lu",
+		   thread->signals);
 
 	/* Start the asynchronous service routine */
 	oldmode = xnthread_test_state(thread, XNTHREAD_MODE_BITS);
@@ -2102,7 +2131,8 @@ void xnpod_dispatch_signals(void)
 
 void xnpod_welcome_thread(xnthread_t *thread, int imask)
 {
-	xnltt_log_event(xeno_ev_thrboot, thread->name);
+	trace_mark(xn_nucleus_thread_boot, "thread %p thread_name %s",
+		   thread, xnthread_name(thread));
 
 	xnarch_trace_pid(-1, xnthread_current_priority(thread));
 
@@ -2345,8 +2375,6 @@ void xnpod_schedule(void)
 
 	if (xnarch_escalate())
 		return;
-
-	xnltt_log_event(xeno_ev_resched);
 #endif /* __KERNEL__ */
 
 	/* No immediate rescheduling is possible if an ISR or callout
@@ -2355,6 +2383,8 @@ void xnpod_schedule(void)
 	if (xnpod_callout_p() || xnpod_interrupt_p())
 		return;
 
+	trace_mark(xn_nucleus_sched, MARK_NOARGS);
+
 	xnlock_get_irqsave(&nklock, s);
 
 	sched = xnpod_current_sched();
@@ -2442,7 +2472,11 @@ void xnpod_schedule(void)
 	    !xnthread_test_state(threadout, XNRESTART))
 		goto signal_unlock_and_exit;
 
-	xnltt_log_event(xeno_ev_switch, threadout->name, threadin->name);
+	trace_mark(xn_nucleus_sched_switch,
+		   "thread_out %p thread_out_name %s "
+		   "thread_in %p thread_in_name %s",
+		   threadout, xnthread_name(threadout),
+		   threadin, xnthread_name(threadin));
 
 #ifdef CONFIG_XENO_OPT_PERVASIVE
 	shadow = xnthread_test_state(threadout, XNSHADOW);
@@ -2509,7 +2543,9 @@ void xnpod_schedule(void)
 #endif /* __XENO_SIM__ */
 
 	if (!emptyq_p(&nkpod->tswitchq) && !xnthread_test_state(runthread, XNROOT)) {
-		xnltt_log_event(xeno_ev_callout, "SWITCH", runthread->name);
+		trace_mark(xn_nucleus_thread_callout,
+			   "thread %p thread_name %s hook %s",
+			   runthread, xnthread_name(runthread), "SWITCH");
 		xnpod_fire_callouts(&nkpod->tswitchq, runthread);
 	}
 
@@ -2553,7 +2589,7 @@ void xnpod_schedule_runnable(xnthread_t 
 	xnsched_t *sched = thread->sched;
 	xnthread_t *runthread = sched->runthread, *threadin;
 
-	xnltt_log_event(xeno_ev_fastsched);
+	trace_mark(xn_nucleus_sched_fast, MARK_NOARGS);
 	xnarch_trace_pid(xnthread_user_task(thread) ?
 			 xnarch_user_pid(xnthread_archtcb(thread)) : -1,
 			 xnthread_current_priority(thread));
@@ -2719,7 +2755,8 @@ int xnpod_add_hook(int type, void (*rout
 
 	xnlock_get_irqsave(&nklock, s);
 
-	xnltt_log_event(xeno_ev_addhook, type, routine);
+	trace_mark(xn_nucleus_sched_addhook, "type %d routine %p",
+		   type, routine);
 
 	switch (type) {
 	case XNHOOK_THREAD_START:
@@ -2789,7 +2826,8 @@ int xnpod_remove_hook(int type, void (*r
 
 	xnlock_get_irqsave(&nklock, s);
 
-	xnltt_log_event(xeno_ev_remhook, type, routine);
+	trace_mark(xn_nucleus_sched_removehook, "type %d routine %p",
+		   type, routine);
 
 	switch (type) {
 	case XNHOOK_THREAD_START:
@@ -2873,9 +2911,10 @@ int xnpod_trap_fault(xnarch_fltinfo_t *f
 
 	thread = xnpod_current_thread();
 
-	xnltt_log_event(xeno_ev_fault,
-			thread->name,
-			xnarch_fault_pc(fltinfo), xnarch_fault_trap(fltinfo));
+	trace_mark(xn_nucleus_thread_fault,
+		   "thread %p thread_name %s address %lu type %d",
+		   thread, xnthread_name(thread), xnarch_fault_pc(fltinfo),
+		   xnarch_fault_trap(fltinfo));
 
 #ifdef __KERNEL__
 	if (xnarch_fault_fpu_p(fltinfo)) {
@@ -3012,7 +3051,7 @@ int xnpod_enable_timesource(void)
 		return err;
 	}
 
-	xnltt_log_event(xeno_ev_tsenable);
+	trace_mark(xn_nucleus_tbase_start, "base %s", nktbase.name);
 
 #ifdef CONFIG_XENO_OPT_STATS
 	/*
@@ -3111,7 +3150,7 @@ void xnpod_disable_timesource(void)
 	spl_t s;
 	int cpu;
 
-	xnltt_log_event(xeno_ev_tsdisable);
+	trace_mark(xn_nucleus_tbase_stop, "base %s", nktbase.name);
 
 	xnlock_get_irqsave(&nklock, s);
 
@@ -3201,7 +3240,10 @@ int xnpod_set_thread_periodic(xnthread_t
 
 	xnlock_get_irqsave(&nklock, s);
 
-	xnltt_log_event(xeno_ev_thrperiodic, thread->name, idate, period);
+	trace_mark(xn_nucleus_thread_setperiodic,
+		   "thread %p thread_name %s idate %Lu period %Lu timer %p",
+		   thread, xnthread_name(thread), idate, period,
+		   &thread->ptimer);
 
 	if (period == XN_INFINITE) {
 		if (xntimer_running_p(&thread->ptimer))
@@ -3304,7 +3346,8 @@ int xnpod_wait_thread_period(unsigned lo
 		goto unlock_and_exit;
 	}
 
-	xnltt_log_event(xeno_ev_thrwait, thread->name);
+	trace_mark(xn_nucleus_thread_waitperiod, "thread %p thread_name %s",
+		   thread, xnthread_name(thread));
 
 	/* Work with either TSC or periodic ticks. */
 	tbase = xnthread_time_base(thread);
@@ -3322,9 +3365,14 @@ int xnpod_wait_thread_period(unsigned lo
 	}
 
 	overruns = xntimer_get_overruns(&thread->ptimer, now);
-	if (overruns)
+	if (overruns) {
 		err = -ETIMEDOUT;
 
+		trace_mark(xn_nucleus_thread_missedperiod,
+			   "thread %p thread_name %s overruns %lu",
+			   thread, xnthread_name(thread), overruns);
+	}
+
 	if (likely(overruns_r != NULL))
 		*overruns_r = overruns;
 
Index: xenomai/ksrc/nucleus/shadow.c
===================================================================
--- xenomai.orig/ksrc/nucleus/shadow.c
+++ xenomai/ksrc/nucleus/shadow.c
@@ -46,7 +46,6 @@
 #include <nucleus/module.h>
 #include <nucleus/shadow.h>
 #include <nucleus/core.h>
-#include <nucleus/ltt.h>
 #include <nucleus/jhash.h>
 #include <nucleus/ppd.h>
 #include <nucleus/trace.h>
@@ -881,7 +880,8 @@ static void lostage_handler(void *cookie
 		struct task_struct *p = rq->req[reqnum].task;
 		rq->out = (reqnum + 1) & (LO_MAX_REQUESTS - 1);
 
-		xnltt_log_event(xeno_ev_lohandler, reqnum, p->comm, p->pid);
+		trace_mark(xn_nucleus_lostage_work, "reqnum %d comm %s pid %d",
+			   reqnum, p->comm, p->pid);
 
 		switch (rq->req[reqnum].type) {
 		case LO_UNMAP_REQ:
@@ -1094,7 +1094,9 @@ redo:
 	   preemption and using the TASK_ATOMICSWITCH cumulative state
 	   provided by Adeos to Linux tasks. */
 
-	xnltt_log_event(xeno_ev_primarysw, this_task->comm);
+	trace_mark(xn_nucleus_shadow_gohard,
+		   "thread %p thread_name %s comm %s",
+		   thread, xnthread_name(thread), this_task->comm);
 
 	gk->thread = thread;
 	xnthread_set_info(thread, XNATOMIC);
@@ -1141,7 +1143,8 @@ redo:
 	if (rpi_p(thread))
 		rpi_clear_remote(thread);
 
-	xnltt_log_event(xeno_ev_primary, thread->name);
+	trace_mark(xn_nucleus_shadow_hardened, "thread %p thread_name %s",
+		   thread, xnthread_name(thread));
 
 	return 0;
 }
@@ -1186,7 +1189,8 @@ void xnshadow_relax(int notify)
 	   domain to the Linux domain.  This will cause the Linux task
 	   to resume using the register state of the shadow thread. */
 
-	xnltt_log_event(xeno_ev_secondarysw, thread->name);
+	trace_mark(xn_nucleus_shadow_gorelax, "thread %p thread_name %s",
+		  thread, xnthread_name(thread));
 
 	ishield_on(thread);
 
@@ -1231,7 +1235,9 @@ void xnshadow_relax(int notify)
 	/* "current" is now running into the Linux domain on behalf of the
 	   root thread. */
 
-	xnltt_log_event(xeno_ev_secondary, current->comm);
+	trace_mark(xn_nucleus_shadow_relaxed,
+		  "thread %p thread_name %s comm %s",
+		  thread, xnthread_name(thread), current->comm);
 }
 
 void xnshadow_exit(void)
@@ -1327,9 +1333,10 @@ int xnshadow_map(xnthread_t *thread, xnc
 		}
 	}
 
-	xnltt_log_event(xeno_ev_shadowmap,
-			thread->name, current->pid,
-			xnthread_base_priority(thread));
+	trace_mark(xn_nucleus_shadow_map,
+		   "thread %p thread_name %s pid %d priority %d",
+		   thread, xnthread_name(thread), current->pid,
+		   xnthread_base_priority(thread));
 
 	/* Switch on propagation of normal kernel events for the bound
 	   task. This is basically a per-task event filter which
@@ -1387,7 +1394,9 @@ void xnshadow_unmap(xnthread_t *thread)
 	xnthread_clear_state(thread, XNMAPPED);
 	rpi_pop(thread);
 
-	xnltt_log_event(xeno_ev_shadowunmap, thread->name, p ? p->pid : -1);
+	trace_mark(xn_nucleus_shadow_unmap,
+		   "thread %p thread_name %s pid %d",
+		   thread, xnthread_name(thread), p ? p->pid : -1);
 
 	if (!p)
 		return;
@@ -1450,7 +1459,8 @@ void xnshadow_start(xnthread_t *thread)
 	struct task_struct *p = xnthread_archtcb(thread)->user_task;
 
 	rpi_push(thread);	/* A shadow always starts in relaxed mode. */
-	xnltt_log_event(xeno_ev_shadowstart, thread->name);
+	trace_mark(xn_nucleus_shadow_start, "thread %p thread_name %s",
+		   thread, xnthread_name(thread));
 	xnpod_resume_thread(thread, XNDORMANT);
 
 	if (p->state == TASK_INTERRUPTIBLE)
@@ -1897,7 +1907,10 @@ static inline int do_hisyscall_event(uns
 	muxid = __xn_mux_id(regs);
 	muxop = __xn_mux_op(regs);
 
-	xnltt_log_event(xeno_ev_syscall, thread->name, muxid, muxop);
+	trace_mark(xn_nucleus_syscall_histage,
+		   "thread %p thread_name %s muxid %d muxop %d",
+		   thread, thread ? xnthread_name(thread) : NULL,
+		   muxid, muxop);
 
 	if (muxid < 0 || muxid > XENOMAI_MUX_NR ||
 	    muxop < 0 || muxop >= muxtable[muxid].props->nrcalls) {
@@ -2072,9 +2085,11 @@ static inline int do_losyscall_event(uns
 	muxid = __xn_mux_id(regs);
 	muxop = __xn_mux_op(regs);
 
-	xnltt_log_event(xeno_ev_syscall,
-			xnpod_active_p() ? xnpod_current_thread()->name : "<system>",
-			muxid, muxop);
+	trace_mark(xn_nucleus_syscall_lostage,
+		   "thread %p thread_name %s muxid %d muxop %d",
+		   xnpod_active_p() ? xnpod_current_thread() : NULL,
+		   xnpod_active_p() ? xnthread_name(xnpod_current_thread()) : NULL,
+		   muxid, muxop);
 
 	/* Processing a real-time skin syscall. */
 
@@ -2150,7 +2165,8 @@ static inline void do_taskexit_event(str
 	xnpod_schedule();
 
 	xnshadow_dereference_skin(magic);
-	xnltt_log_event(xeno_ev_shadowexit, thread->name);
+	trace_mark(xn_nucleus_shadow_exit, "thread %p thread_name %s",
+		   thread, xnthread_name(thread));
 }
 
 RTHAL_DECLARE_EXIT_EVENT(taskexit_event);
Index: xenomai/ksrc/nucleus/synch.c
===================================================================
--- xenomai.orig/ksrc/nucleus/synch.c
+++ xenomai/ksrc/nucleus/synch.c
@@ -35,7 +35,6 @@
 #include <nucleus/synch.h>
 #include <nucleus/thread.h>
 #include <nucleus/module.h>
-#include <nucleus/ltt.h>
 
 /*! 
  * \fn void xnsynch_init(xnsynch_t *synch, xnflags_t flags);
@@ -174,7 +173,9 @@ void xnsynch_sleep_on(xnsynch_t *synch, 
 
 	xnlock_get_irqsave(&nklock, s);
 
-	xnltt_log_event(xeno_ev_sleepon, thread->name, synch);
+	trace_mark(xn_nucleus_synch_sleepon,
+		   "thread %p thread_name %s sync %p",
+		   thread, xnthread_name(thread), synch);
 
 	if (!testbits(synch->status, XNSYNCH_PRIO)) { /* i.e. FIFO */
 		appendpq(&synch->pendq, &thread->plink);
@@ -388,7 +389,9 @@ xnthread_t *xnsynch_wakeup_one_sleeper(x
 		thread->wchan = NULL;
 		synch->owner = thread;
 		xnthread_set_info(thread, XNWAKEN);
-		xnltt_log_event(xeno_ev_wakeup1, thread->name, synch);
+		trace_mark(xn_nucleus_synch_wakeup_one,
+			   "thread %p thread_name %s sync %p",
+			   thread, xnthread_name(thread), synch);
 		xnpod_resume_thread(thread, XNPEND);
 	} else
 		synch->owner = NULL;
@@ -461,7 +464,9 @@ xnpholder_t *xnsynch_wakeup_this_sleeper
 	thread->wchan = NULL;
 	synch->owner = thread;
 	xnthread_set_info(thread, XNWAKEN);
-	xnltt_log_event(xeno_ev_wakeupx, thread->name, synch);
+	trace_mark(xn_nucleus_synch_wakeup_all,
+		   "thread %p thread_name %s synch %p",
+		   thread, xnthread_name(thread), synch);
 	xnpod_resume_thread(thread, XNPEND);
 
 	if (testbits(synch->status, XNSYNCH_CLAIMED))
@@ -531,7 +536,8 @@ int xnsynch_flush(xnsynch_t *synch, xnfl
 
 	xnlock_get_irqsave(&nklock, s);
 
-	xnltt_log_event(xeno_ev_syncflush, synch, reason);
+	trace_mark(xn_nucleus_synch_flush, "synch %p reason %lu",
+		   synch, reason);
 
 	status = emptypq_p(&synch->pendq) ? XNSYNCH_DONE : XNSYNCH_RESCHED;
 
@@ -577,7 +583,9 @@ void xnsynch_forget_sleeper(xnthread_t *
 {
 	xnsynch_t *synch = thread->wchan;
 
-	xnltt_log_event(xeno_ev_syncforget, thread->name, synch);
+	trace_mark(xn_nucleus_synch_forget,
+		   "thread %p thread_name %s synch %p",
+		   thread, xnthread_name(thread), synch);
 
 	xnthread_clear_state(thread, XNPEND);
 	thread->wchan = NULL;
Index: xenomai/ksrc/nucleus/timebase.c
===================================================================
--- xenomai.orig/ksrc/nucleus/timebase.c
+++ xenomai/ksrc/nucleus/timebase.c
@@ -53,7 +53,6 @@
 
 #include <nucleus/pod.h>
 #include <nucleus/timer.h>
-#include <nucleus/ltt.h>
 #include <nucleus/module.h>
 
 DEFINE_XNQUEUE(nktimebaseq);
@@ -378,19 +377,21 @@ void xntbase_start(xntbase_t *base)
 	xnticks_t start_date;
 	spl_t s;
 
- 	if (base == &nktbase || xntbase_enabled_p(base))
+	if (base == &nktbase || xntbase_enabled_p(base))
 		return;
 
+	trace_mark(xn_nucleus_tbase_start, "base %s", base->name);
+
 	xnlock_get_irqsave(&nklock, s);
 
-  	start_date = xnarch_get_cpu_time();
+	start_date = xnarch_get_cpu_time();
 
- 	/* Only synchronise non-isolated time bases on the master base. */
- 	if (!xntbase_isolated_p(base)) {
- 		base->wallclock_offset = xntbase_ns2ticks(base,
- 			start_date + nktbase.wallclock_offset);
- 		__setbits(base->status, XNTBSET);
- 	}
+	/* Only synchronise non-isolated time bases on the master base. */
+	if (!xntbase_isolated_p(base)) {
+		base->wallclock_offset = xntbase_ns2ticks(base,
+			start_date + nktbase.wallclock_offset);
+		__setbits(base->status, XNTBSET);
+	}
 
 	start_date += base->tickvalue;
 
@@ -433,6 +434,8 @@ void xntbase_stop(xntbase_t *base)
 
 	xntslave_stop(base2slave(base));
 	__clrbits(base->status, XNTBRUN | XNTBSET);
+
+	trace_mark(xn_nucleus_tbase_stop, "base %s", base->name);
 }
 
 /*!
@@ -469,8 +472,7 @@ void xntbase_tick(xntbase_t *base)
 
 	xnlock_get_irqsave(&nklock, s);
 
-	xnltt_log_event(xeno_ev_tstick, base->name,
-			xnpod_current_thread()->name);
+	trace_mark(xn_nucleus_tbase_tick, "base %s", base->name);
 
 	if (base == &nktbase)
 		xntimer_tick_aperiodic();
@@ -565,7 +567,8 @@ void xntbase_adjust_time(xntbase_t *base
 	}
 #endif /* CONFIG_XENO_OPT_TIMING_PERIODIC */
 
-	/* xnltt_log_event(xeno_ev_timeadjust, base->name, delta); */
+	trace_mark(xn_nucleus_tbase_adjust, "base %s delta %Lu",
+		   base->name, delta);
 }
 
 /* The master time base - the most precise one, aperiodic, always valid. */
Index: xenomai/ksrc/nucleus/Config.in
===================================================================
--- xenomai.orig/ksrc/nucleus/Config.in
+++ xenomai/ksrc/nucleus/Config.in
@@ -60,15 +60,6 @@ if [ "$CONFIG_XENO_OPT_NUCLEUS" != "n" ]
 	fi
 	endmenu
 
-	if [ "$CONFIG_LTT" != "n" ]; then
-		mainmenu_option next_comment
-		comment 'LTT tracepoints filtering'
-			bool 'Disable IRQ-related tracepoints' CONFIG_XENO_OPT_FILTER_EVIRQ
-			bool 'Disable thread-related tracepoints' CONFIG_XENO_OPT_FILTER_EVTHR
-			bool 'Disable syscall-related tracepoints' CONFIG_XENO_OPT_FILTER_EVSYS
-			bool 'Disable all tracepoints' CONFIG_XENO_OPT_FILTER_EVALL
-		endmenu
-	fi
 	endmenu
 fi
 
Index: xenomai/ksrc/nucleus/Kconfig
===================================================================
--- xenomai.orig/ksrc/nucleus/Kconfig
+++ xenomai/ksrc/nucleus/Kconfig
@@ -339,40 +339,4 @@ config XENO_OPT_TIMER_WHEEL_STEP
 
 endmenu
 
-menu "LTT tracepoints filtering"
-
-	depends on LTT
-
-config XENO_OPT_FILTER_EVIRQ
-	bool "Disable IRQ-related tracepoints"
-	default y if XENO_OPT_FILTER_EVALL=y
-	help
-
-	When LTT support is active, this option disables tracepoints
-	inside real-time interrupt handlers.
-
-config XENO_OPT_FILTER_EVTHR
-	bool "Disable thread-related tracepoints"
-	default y if XENO_OPT_FILTER_EVALL=y
-	help
-
-	When LTT support is active, this option disables tracepoints
-	inside most thread-related services.
-
-config XENO_OPT_FILTER_EVSYS
-	bool "Disable syscall-related tracepoints"
-	default y if XENO_OPT_FILTER_EVALL=y
-	help
-
-	When LTT support is active, this option disables tracepoints
-	inside the shadow syscall dispatcher.
-
-config XENO_OPT_FILTER_EVALL
-	bool "Disable all tracepoints"
-	help
-
-	This option disables all LTT tracepoints inside Xenomai.
-
-endmenu
-
 endif
Index: xenomai/ksrc/nucleus/Makefile
===================================================================
--- xenomai.orig/ksrc/nucleus/Makefile
+++ xenomai/ksrc/nucleus/Makefile
@@ -14,8 +14,6 @@ xeno_nucleus-$(CONFIG_XENO_OPT_MAP) += m
 
 xeno_nucleus-$(CONFIG_XENO_OPT_REGISTRY) += registry.o
 
-xeno_nucleus-$(CONFIG_LTT) += ltt.o
-
 EXTRA_CFLAGS += -D__IN_XENOMAI__ -Iinclude/xenomai
 
 else
@@ -35,7 +33,6 @@ opt_objs-$(CONFIG_XENO_OPT_PERVASIVE) +=
 opt_objs-$(CONFIG_XENO_OPT_PIPE) += pipe.o
 opt_objs-$(CONFIG_XENO_OPT_MAP) += map.o
 opt_objs-$(CONFIG_XENO_OPT_REGISTRY) += registry.o
-opt_objs-$(CONFIG_LTT) += ltt.o
 
 xeno_nucleus-objs += $(opt_objs-y)
 
Index: xenomai/ksrc/nucleus/module.c
===================================================================
--- xenomai.orig/ksrc/nucleus/module.c
+++ xenomai/ksrc/nucleus/module.c
@@ -34,7 +34,6 @@
 #ifdef CONFIG_XENO_OPT_PERVASIVE
 #include <nucleus/core.h>
 #endif /* CONFIG_XENO_OPT_PERVASIVE */
-#include <nucleus/ltt.h>
 #include <asm/xenomai/bits/init.h>
 
 MODULE_DESCRIPTION("Xenomai nucleus");
@@ -1156,10 +1155,6 @@ int __init __xeno_sys_init(void)
 
 	xnintr_mount();
 
-#ifdef CONFIG_LTT
-	xnltt_mount();
-#endif /* CONFIG_LTT */
-
 #ifdef CONFIG_XENO_OPT_PIPE
 	err = xnpipe_mount();
 
@@ -1249,9 +1244,6 @@ void __exit __xeno_sys_exit(void)
 #ifdef CONFIG_XENO_OPT_PIPE
 	xnpipe_umount();
 #endif /* CONFIG_XENO_OPT_PIPE */
-#ifdef CONFIG_LTT
-	xnltt_umount();
-#endif /* CONFIG_LTT */
 #endif /* __KERNEL__ */
 
 	if (nkmsgbuf)
Index: xenomai/include/asm-generic/wrappers.h
===================================================================
--- xenomai.orig/include/asm-generic/wrappers.h
+++ xenomai/include/asm-generic/wrappers.h
@@ -275,4 +275,10 @@ unsigned long __va_to_kva(unsigned long 
 #define IRQF_SHARED			SA_SHIRQ
 #endif /* < 2.6.18 */
 
+#if defined(CONFIG_MARKERS) || LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
+#include <linux/marker.h>
+#else /* !CONFIG_MARKERS */
+#define xnltt_log_event(ev, fmt, args...)	do { } while (0)
+#endif /* CONFIG_MARKERS */
+
 #endif /* _XENO_ASM_GENERIC_WRAPPERS_H */
Index: xenomai/ksrc/nucleus/timer.c
===================================================================
--- xenomai.orig/ksrc/nucleus/timer.c
+++ xenomai/ksrc/nucleus/timer.c
@@ -170,6 +170,10 @@ int xntimer_start_aperiodic(xntimer_t *t
 {
 	xnticks_t date, now;
 
+	trace_mark(xn_nucleus_timer_start,
+		   "timer %p base %s value %Lu interval %Lu mode %u",
+		   timer, xntimer_base(timer)->name, value, interval, mode);
+
 	if (!testbits(timer->status, XNTIMER_DEQUEUED))
 		xntimer_dequeue_aperiodic(timer);
 
@@ -218,6 +222,8 @@ void xntimer_stop_aperiodic(xntimer_t *t
 {
 	int heading;
 
+	trace_mark(xn_nucleus_timer_stop, "timer %p", timer);
+
 	heading = xntimer_heading_p(timer);
 	xntimer_dequeue_aperiodic(timer);
 
@@ -294,6 +300,8 @@ void xntimer_tick_aperiodic(void)
 			   dates are ordered by increasing values. */
 			break;
 
+		trace_mark(xn_nucleus_timer_expire, "timer %p", timer);
+
 		xntimer_dequeue_aperiodic(timer);
 		xnstat_counter_inc(&timer->fired);
 
@@ -371,6 +379,10 @@ static int xntimer_start_periodic(xntime
 				  xnticks_t value, xnticks_t interval,
 				  xntmode_t mode)
 {
+	trace_mark(xn_nucleus_timer_start,
+		   "timer %p base %s value %Lu interval %Lu mode %u", timer,
+		   xntimer_base(timer)->name->name, value, interval, mode);
+
 	if (!testbits(timer->status, XNTIMER_DEQUEUED))
 		xntimer_dequeue_periodic(timer);
 
@@ -406,6 +418,8 @@ static int xntimer_start_periodic(xntime
 
 static void xntimer_stop_periodic(xntimer_t *timer)
 {
+	trace_mark(xn_nucleus_timer_stop, "timer %p", timer);
+
 	xntimer_dequeue_periodic(timer);
 }
 
@@ -488,6 +502,8 @@ void xntimer_tick_periodic_inner(xntslav
 				  - base->jiffies) > 0)
 			break;
 
+		trace_mark(xn_nucleus_timer_expire, "timer %p", timer);
+
 		xntimer_dequeue_periodic(timer);
 		xnstat_counter_inc(&timer->fired);
 
@@ -625,6 +641,8 @@ void xntslave_start(xntslave_t *slave, x
 	int nr_cpus, cpu;
 	spl_t s;
 
+	trace_mark(xn_nucleus_tbase_start, "base %s", slave->base.name);
+
 	for (cpu = 0, nr_cpus = xnarch_num_online_cpus(); cpu < nr_cpus; cpu++) {
 
 		struct percpu_cascade *pc = &slave->cascade[cpu];
@@ -642,6 +660,8 @@ void xntslave_stop(xntslave_t *slave)
 	int nr_cpus, cpu;
 	spl_t s;
 
+	trace_mark(xn_nucleus_tbase_stop, "base %s", slave->base.name);
+
 	for (cpu = 0, nr_cpus = xnarch_num_online_cpus(); cpu < nr_cpus; cpu++) {
 
 		struct percpu_cascade *pc = &slave->cascade[cpu];
@@ -837,6 +857,9 @@ int xntimer_migrate(xntimer_t *timer, xn
 	int queued;
 	spl_t s;
 
+	trace_mark(xn_nucleus_timer_migrate, "timer %p cpu %d",
+		   timer, xnsched_cpu(sched));
+
 	xnlock_get_irqsave(&nklock, s);
 
 	if (sched == timer->sched)
@@ -932,6 +955,8 @@ void xntimer_freeze(void)
 	int nr_cpus, cpu;
 	spl_t s;
 
+	trace_mark(xn_nucleus_timer_freeze, MARK_NOARGS);
+
 	xnlock_get_irqsave(&nklock, s);
 
 	nr_cpus = xnarch_num_online_cpus();
Index: xenomai/include/rtdm/rtdm_driver.h
===================================================================
--- xenomai.orig/include/rtdm/rtdm_driver.h
+++ xenomai/include/rtdm/rtdm_driver.h
@@ -1019,11 +1019,13 @@ void __rtdm_synch_flush(xnsynch_t *synch
 
 static inline void rtdm_event_pulse(rtdm_event_t *event)
 {
+	trace_mark(xn_rtdm_event_pulse, "event %p", event);
 	__rtdm_synch_flush(&event->synch_base, 0);
 }
 
 static inline void rtdm_event_destroy(rtdm_event_t *event)
 {
+	trace_mark(xn_rtdm_event_destroy, "event %p", event);
 	__rtdm_synch_flush(&event->synch_base, XNRMID);
 }
 #endif /* !DOXYGEN_CPP */
@@ -1044,6 +1046,7 @@ void rtdm_sem_up(rtdm_sem_t *sem);
 #ifndef DOXYGEN_CPP /* Avoid static inline tags for RTDM in doxygen */
 static inline void rtdm_sem_destroy(rtdm_sem_t *sem)
 {
+	trace_mark(xn_rtdm_sem_destroy, "sem %p", sem);
 	__rtdm_synch_flush(&sem->synch_base, XNRMID);
 }
 #endif /* !DOXYGEN_CPP */
@@ -1064,12 +1067,16 @@ static inline void rtdm_mutex_unlock(rtd
 {
 	XENO_ASSERT(RTDM, !xnpod_asynch_p(), return;);
 
+	trace_mark(xn_rtdm_mutex_unlock, "mutex %p", mutex);
+
 	if (unlikely(xnsynch_wakeup_one_sleeper(&mutex->synch_base) != NULL))
 		xnpod_schedule();
 }
 
 static inline void rtdm_mutex_destroy(rtdm_mutex_t *mutex)
 {
+	trace_mark(xn_rtdm_mutex_destroy, "mutex %p", mutex);
+
 	__rtdm_synch_flush(&mutex->synch_base, XNRMID);
 }
 #endif /* !DOXYGEN_CPP */
Index: xenomai/ksrc/skins/rtdm/core.c
===================================================================
--- xenomai.orig/ksrc/skins/rtdm/core.c
+++ xenomai/ksrc/skins/rtdm/core.c
@@ -204,6 +204,8 @@ int __rt_dev_open(rtdm_user_info_t *user
 	int nrt_mode = !rtdm_in_rt_context();
 
 	device = get_named_device(path);
+	trace_mark(xn_rtdm_open, "user_info %p path %s oflag %d device %p",
+		   user_info, path, oflag, device);
 	ret = -ENODEV;
 	if (!device)
 		goto err_out;
@@ -227,6 +229,8 @@ int __rt_dev_open(rtdm_user_info_t *user
 
 	fildes->context = context;
 
+	trace_mark(xn_rtdm_fd_created, "device %p fd %d", device, context->fd);
+
 	return context->fd;
 
 cleanup_out:
@@ -250,6 +254,9 @@ int __rt_dev_socket(rtdm_user_info_t *us
 	int nrt_mode = !rtdm_in_rt_context();
 
 	device = get_protocol_device(protocol_family, socket_type);
+	trace_mark(xn_rtdm_socket, "user_info %p protocol_family %d "
+		   "socket_type %d protocol %d device %p",
+		   user_info, protocol_family, socket_type, protocol, device);
 	ret = -EAFNOSUPPORT;
 	if (!device)
 		goto err_out;
@@ -273,6 +280,8 @@ int __rt_dev_socket(rtdm_user_info_t *us
 
 	fildes->context = context;
 
+	trace_mark(xn_rtdm_fd_created, "device %p fd %d", device, context->fd);
+
 	return context->fd;
 
 cleanup_out:
@@ -292,6 +301,8 @@ int __rt_dev_close(rtdm_user_info_t *use
 	int ret;
 	int nrt_mode = !rtdm_in_rt_context();
 
+	trace_mark(xn_rtdm_close, "user_info %p fd %d", user_info, fd);
+
 	ret = -EBADF;
 	if (unlikely((unsigned int)fd >= RTDM_FD_MAX))
 		goto err_out;
@@ -350,6 +361,8 @@ again:
 			 test_bit(RTDM_CREATED_IN_NRT, &context->context_flags),
 			 s);
 
+	trace_mark(xn_rtdm_fd_closed, "fd %d", fd);
+
 	return ret;
 
 unlock_out:
@@ -413,6 +426,7 @@ do {									\
 	rtdm_context_unlock(context);					\
 									\
 err_out:								\
+	trace_mark(xn_rtdm_##operation##_done, "result %d", ret);	\
 	return ret;							\
 } while (0)
 
@@ -431,6 +445,9 @@ int __rt_dev_ioctl(rtdm_user_info_t *use
 	arg = va_arg(args, void __user *);
 	va_end(args);
 
+	trace_mark(xn_rtdm_ioctl, "user_info %p fd %d request %d arg %p",
+		   user_info, fd, request, arg);
+
 	MAJOR_FUNCTION_WRAPPER_TH(ioctl, (unsigned int)request, arg);
 
 	if (unlikely(ret < 0) && (unsigned int)request == RTIOC_DEVICE_INFO) {
@@ -454,6 +471,8 @@ EXPORT_SYMBOL(__rt_dev_ioctl);
 ssize_t __rt_dev_read(rtdm_user_info_t *user_info, int fd, void *buf,
 		      size_t nbyte)
 {
+	trace_mark(xn_rtdm_read, "user_info %p fd %d buf %p nbyte %zu",
+		   user_info, fd, buf, nbyte);
 	MAJOR_FUNCTION_WRAPPER(read, buf, nbyte);
 }
 
@@ -462,6 +481,8 @@ EXPORT_SYMBOL(__rt_dev_read);
 ssize_t __rt_dev_write(rtdm_user_info_t *user_info, int fd, const void *buf,
 		       size_t nbyte)
 {
+	trace_mark(xn_rtdm_write, "user_info %p fd %d buf %p nbyte %zu",
+		   user_info, fd, buf, nbyte);
 	MAJOR_FUNCTION_WRAPPER(write, buf, nbyte);
 }
 
@@ -470,6 +491,12 @@ EXPORT_SYMBOL(__rt_dev_write);
 ssize_t __rt_dev_recvmsg(rtdm_user_info_t *user_info, int fd,
 			 struct msghdr *msg, int flags)
 {
+	trace_mark(xn_rtdm_recvmsg, "user_info %p fd %d msg_name %p "
+		   "msg_namelen %u msg_iov %p msg_iovlen %zu "
+		   "msg_control %p msg_controllen %zu msg_flags %d",
+		   user_info, fd, msg->msg_name, msg->msg_namelen,
+		   msg->msg_iov, msg->msg_iovlen, msg->msg_control,
+		   msg->msg_controllen, msg->msg_flags);
 	MAJOR_FUNCTION_WRAPPER(recvmsg, msg, flags);
 }
 
@@ -478,6 +505,12 @@ EXPORT_SYMBOL(__rt_dev_recvmsg);
 ssize_t __rt_dev_sendmsg(rtdm_user_info_t *user_info, int fd,
 			 const struct msghdr *msg, int flags)
 {
+	trace_mark(xn_rtdm_recvmsg, "user_info %p fd %d msg_name %p "
+		   "msg_namelen %u msg_iov %p msg_iovlen %zu "
+		   "msg_control %p msg_controllen %zu msg_flags %d",
+		   user_info, fd, msg->msg_name, msg->msg_namelen,
+		   msg->msg_iov, msg->msg_iovlen, msg->msg_control,
+		   msg->msg_controllen, msg->msg_flags);
 	MAJOR_FUNCTION_WRAPPER(sendmsg, msg, flags);
 }
 
Index: xenomai/ksrc/skins/rtdm/device.c
===================================================================
--- xenomai.orig/ksrc/skins/rtdm/device.c
+++ xenomai/ksrc/skins/rtdm/device.c
@@ -263,6 +263,13 @@ int rtdm_dev_register(struct rtdm_device
 	down(&nrt_dev_lock);
 
 	if ((device->device_flags & RTDM_DEVICE_TYPE_MASK) == RTDM_NAMED_DEVICE) {
+		trace_mark(xn_rtdm_nameddev_register, "device %p name %s "
+			   "flags %d class %d sub_class %d profile_version %d "
+			   "driver_version %d", device, device->device_name,
+			   device->device_flags, device->device_class,
+			   device->device_sub_class, device->profile_version,
+			   device->driver_version);
+
 		hashkey =
 		    get_name_hash(device->device_name, RTDM_MAX_DEVNAME_LEN,
 				  name_hashkey_mask);
@@ -290,6 +297,15 @@ int rtdm_dev_register(struct rtdm_device
 
 		up(&nrt_dev_lock);
 	} else {
+		trace_mark(xn_rtdm_protocol_register, "device %p "
+			   "protocol_family %d socket_type %d flags %d "
+			   "class %d sub_class %d profile_version %d "
+			   "driver_version %d", device,
+			   device->protocol_family, device->socket_type,
+			   device->device_flags, device->device_class,
+			   device->device_sub_class, device->profile_version,
+			   device->driver_version);
+
 		hashkey = get_proto_hash(device->protocol_family,
 					 device->socket_type);
 
@@ -372,6 +388,9 @@ int rtdm_dev_unregister(struct rtdm_devi
 	if (!reg_dev)
 		return -ENODEV;
 
+	trace_mark(xn_rtdm_dev_unregister, "device %p poll_delay %u",
+		   device, poll_delay);
+
 	down(&nrt_dev_lock);
 	xnlock_get_irqsave(&rt_dev_lock, s);
 
@@ -381,6 +400,7 @@ int rtdm_dev_unregister(struct rtdm_devi
 
 		if (!poll_delay) {
 			rtdm_dereference_device(reg_dev);
+			trace_mark(xn_rtdm_dev_busy, "device %p", device);
 			return -EAGAIN;
 		}
 
@@ -388,6 +408,7 @@ int rtdm_dev_unregister(struct rtdm_devi
 			xnlogwarn("RTDM: device %s still in use - waiting for "
 				  "release...\n", reg_dev->device_name);
 		msleep(poll_delay);
+		trace_mark(xn_rtdm_dev_poll, "device %p", device);
 
 		down(&nrt_dev_lock);
 		xnlock_get_irqsave(&rt_dev_lock, s);
Index: xenomai/ksrc/skins/rtdm/drvlib.c
===================================================================
--- xenomai.orig/ksrc/skins/rtdm/drvlib.c
+++ xenomai/ksrc/skins/rtdm/drvlib.c
@@ -408,6 +408,9 @@ void rtdm_task_join_nrt(rtdm_task_t *tas
 
 	XENO_ASSERT(RTDM, xnpod_root_p(), return;);
 
+	trace_mark(xn_rtdm_task_joinnrt, "thread %p poll_delay %u",
+		   task, poll_delay);
+
 	xnlock_get_irqsave(&nklock, s);
 
 	while (!xnthread_test_state(task, XNZOMBIE)) {
@@ -745,6 +748,8 @@ void rtdm_event_init(rtdm_event_t *event
 {
 	spl_t s;
 
+	trace_mark(xn_rtdm_event_init, "event %p pending %lu", event, pending);
+
 	/* Make atomic for re-initialisation support */
 	xnlock_get_irqsave(&nklock, s);
 
@@ -822,6 +827,8 @@ void rtdm_event_signal(rtdm_event_t *eve
 {
 	spl_t s;
 
+	trace_mark(xn_rtdm_event_signal, "event %p", event);
+
 	xnlock_get_irqsave(&nklock, s);
 
 	xnsynch_set_flags(&event->synch_base, RTDM_EVENT_PENDING);
@@ -911,6 +918,10 @@ int rtdm_event_timedwait(rtdm_event_t *e
 
 	XENO_ASSERT(RTDM, !xnpod_unblockable_p(), return -EPERM;);
 
+	trace_mark(xn_rtdm_event_timedwait,
+		   "event %p timeout %Lu timeout_seq %p timeout_seq_value %Lu",
+		   event, timeout, timeout_seq, timeout_seq ? *timeout_seq : 0);
+
 	xnlock_get_irqsave(&nklock, s);
 
 	if (unlikely(testbits(event->synch_base.status, RTDM_SYNCH_DELETED)))
@@ -979,6 +990,8 @@ void rtdm_event_clear(rtdm_event_t *even
 {
 	spl_t s;
 
+	trace_mark(xn_rtdm_event_clear, "event %p", event);
+
 	xnlock_get_irqsave(&nklock, s);
 
 	xnsynch_clear_flags(&event->synch_base, RTDM_EVENT_PENDING);
@@ -1014,6 +1027,8 @@ void rtdm_sem_init(rtdm_sem_t *sem, unsi
 {
 	spl_t s;
 
+	trace_mark(xn_rtdm_sem_init, "sem %p value %lu", sem, value);
+
 	/* Make atomic for re-initialisation support */
 	xnlock_get_irqsave(&nklock, s);
 
@@ -1125,6 +1140,10 @@ int rtdm_sem_timeddown(rtdm_sem_t *sem, 
 
 	XENO_ASSERT(RTDM, !xnpod_unblockable_p(), return -EPERM;);
 
+	trace_mark(xn_rtdm_sem_timedwait,
+		   "sem %p timeout %Lu timeout_seq %p timeout_seq_value %Lu",
+		   sem, timeout, timeout_seq, timeout_seq ? *timeout_seq : 0);
+
 	xnlock_get_irqsave(&nklock, s);
 
 	if (testbits(sem->synch_base.status, RTDM_SYNCH_DELETED))
@@ -1188,6 +1207,8 @@ void rtdm_sem_up(rtdm_sem_t *sem)
 {
 	spl_t s;
 
+	trace_mark(xn_rtdm_sem_up, "sem %p", sem);
+
 	xnlock_get_irqsave(&nklock, s);
 
 	if (xnsynch_wakeup_one_sleeper(&sem->synch_base))
@@ -1349,6 +1370,10 @@ int rtdm_mutex_timedlock(rtdm_mutex_t *m
 	spl_t s;
 	int err = 0;
 
+	trace_mark(xn_rtdm_mutex_timedlock,
+		   "mutex %p timeout %Lu timeout_seq %p timeout_seq_value %Lu",
+		   mutex, timeout, timeout_seq, timeout_seq ? *timeout_seq : 0);
+
 	XENO_ASSERT(RTDM, !xnpod_unblockable_p(), return -EPERM;);
 
 	xnlock_get_irqsave(&nklock, s);
Index: xenomai/include/nucleus/Makefile.am
===================================================================
--- xenomai.orig/include/nucleus/Makefile.am
+++ xenomai/include/nucleus/Makefile.am
@@ -8,7 +8,6 @@ includesub_HEADERS = \
 	heap.h \
 	intr.h \
 	jhash.h \
-	ltt.h \
 	map.h \
 	module.h \
 	pipe.h \
Index: xenomai/include/asm-sim/system.h
===================================================================
--- xenomai.orig/include/asm-sim/system.h
+++ xenomai/include/asm-sim/system.h
@@ -261,6 +261,9 @@ xnarch_read_environ (const char *name, c
 #define __init
 #define __exit
 
+/* Kernel markers */
+#define trace_mark(...);
+
 #define container_of(ptr, type, member) ({                      \
         const typeof( ((type *)0)->member ) *__mptr = (ptr);    \
         (type *)( (char *)__mptr - offsetof(type,member) );})

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 249 bytes --]

  reply	other threads:[~2007-11-08  8:09 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-10-18 22:05 [Xenomai-core] LTTng for Xenomai - next round Jan Kiszka
2007-10-19  7:41 ` ROSSIER Daniel
2007-10-19  8:13   ` Jan Kiszka
2007-11-05  8:15     ` Jan Kiszka
2007-11-05  8:21       ` Jan Kiszka
2007-11-08  8:09         ` Jan Kiszka [this message]
2007-11-08  9:01           ` Philippe Gerum

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=4732C455.6060900@domain.hid \
    --to=jan.kiszka@domain.hid \
    --cc=xenomai@xenomai.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.