--- include/asm-generic/hal.h | 7 +++++++ include/asm-generic/system.h | 1 + include/asm-sim/system.h | 1 + include/asm-uvm/system.h | 1 + include/nucleus/trace.h | 1 + ksrc/nucleus/pod.c | 24 ++++++++++++++++++++++++ ksrc/nucleus/shadow.c | 9 +++++++-- 7 files changed, 42 insertions(+), 2 deletions(-) Index: xenomai/include/asm-generic/hal.h =================================================================== --- xenomai.orig/include/asm-generic/hal.h +++ xenomai/include/asm-generic/hal.h @@ -645,6 +645,12 @@ static inline int rthal_trace_special_u6 return 0; } +static inline int rthal_trace_pid(pid_t pid, short prio) +{ + ipipe_trace_pid(pid, prio); + return 0; +} + static inline int rthal_trace_panic_freeze(void) { ipipe_trace_panic_freeze(); @@ -667,6 +673,7 @@ static inline int rthal_trace_panic_dump #define rthal_trace_user_freeze(v, once) ({-ENOSYS;}) #define rthal_trace_special(id, v) ({-ENOSYS;}) #define rthal_trace_special_u64(id, v) ({-ENOSYS;}) +#define rthal_trace_pid(pid, prio) ({-ENOSYS;}) #define rthal_trace_panic_freeze() ({-ENOSYS;}) #define rthal_trace_panic_dump() ({-ENOSYS;}) Index: xenomai/include/asm-generic/system.h =================================================================== --- xenomai.orig/include/asm-generic/system.h +++ xenomai/include/asm-generic/system.h @@ -50,6 +50,7 @@ #define xnarch_trace_user_freeze(v, once) rthal_trace_user_freeze(v, once) #define xnarch_trace_special(id, v) rthal_trace_special(id, v) #define xnarch_trace_special_u64(id, v) rthal_trace_special_u64(id, v) +#define xnarch_trace_pid(pid, prio) rthal_trace_pid(pid, prio) #define xnarch_trace_panic_freeze() rthal_trace_panic_freeze() #define xnarch_trace_panic_dump() rthal_trace_panic_dump() Index: xenomai/include/asm-sim/system.h =================================================================== --- xenomai.orig/include/asm-sim/system.h +++ xenomai/include/asm-sim/system.h @@ -772,6 +772,7 @@ while(0) #define xnarch_trace_user_freeze(v, once) ({-ENOSYS;}) #define xnarch_trace_special(id, v) ({-ENOSYS;}) #define xnarch_trace_special_u64(id, v) ({-ENOSYS;}) +#define xnarch_trace_pid(pid, prio) ({-ENOSYS;}) #define xnarch_trace_panic_freeze() ({-ENOSYS;}) #define xnarch_trace_panic_dump() ({-ENOSYS;}) Index: xenomai/include/asm-uvm/system.h =================================================================== --- xenomai.orig/include/asm-uvm/system.h +++ xenomai/include/asm-uvm/system.h @@ -794,6 +794,7 @@ static inline void xnarch_sysfree (void #define xnarch_trace_user_freeze(v, once) ({-ENOSYS;}) #define xnarch_trace_special(id, v) ({-ENOSYS;}) #define xnarch_trace_special_u64(id, v) ({-ENOSYS;}) +#define xnarch_trace_pid(pid, prio) ({-ENOSYS;}) #define xnarch_trace_panic_freeze() ({-ENOSYS;}) #define xnarch_trace_panic_dump() ({-ENOSYS;}) Index: xenomai/ksrc/nucleus/pod.c =================================================================== --- xenomai.orig/ksrc/nucleus/pod.c +++ xenomai/ksrc/nucleus/pod.c @@ -673,6 +673,10 @@ static inline void xnpod_switch_zombie(x xnthread_archtcb(threadin)); #if defined(__KERNEL__) && defined(CONFIG_XENO_OPT_PERVASIVE) + xnarch_trace_pid(xnthread_user_task(threadin) ? + xnarch_user_pid(xnthread_archtcb(threadin)) : -1, + xnthread_current_priority(threadin)); + if (shadow) /* Reap the user-space mate of a deleted real-time shadow. The Linux task has resumed into the Linux domain at the @@ -1534,6 +1538,9 @@ void xnpod_resume_thread(xnthread_t *thr xnlock_get_irqsave(&nklock, s); xnltt_log_event(xeno_ev_thresume, thread->name, mask); + xnarch_trace_pid(xnthread_user_task(thread) ? + xnarch_user_pid(xnthread_archtcb(thread)) : -1, + xnthread_current_priority(thread)); sched = thread->sched; @@ -2114,6 +2121,8 @@ void xnpod_welcome_thread(xnthread_t *th xnltt_log_event(xeno_ev_thrboot, thread->name); + xnarch_trace_pid(-1, xnthread_current_priority(thread)); + if (xnthread_signaled_p(thread)) xnpod_dispatch_signals(); @@ -2315,6 +2324,10 @@ void xnpod_schedule(void) sched = xnpod_current_sched(); runthread = sched->runthread; + xnarch_trace_pid(xnthread_user_task(runthread) ? + xnarch_user_pid(xnthread_archtcb(runthread)) : -1, + xnthread_current_priority(runthread)); + #if defined(CONFIG_SMP) || defined(CONFIG_XENO_OPT_DEBUG) need_resched = xnsched_tst_resched(sched); #endif @@ -2426,6 +2439,10 @@ void xnpod_schedule(void) * relaxed/hardened transitions. */ runthread = sched->runthread; + xnarch_trace_pid(xnthread_user_task(runthread) ? + xnarch_user_pid(xnthread_archtcb(runthread)) : -1, + xnthread_current_priority(runthread)); + #if defined(__KERNEL__) && defined(CONFIG_XENO_OPT_PERVASIVE) /* Test whether we are relaxing a thread. In such a case, we are here the epilogue of Linux' schedule, and should skip xnpod_schedule epilogue. */ @@ -2498,6 +2515,9 @@ void xnpod_schedule_runnable(xnthread_t xnthread_t *runthread = sched->runthread, *threadin; xnltt_log_event(xeno_ev_fastsched); + xnarch_trace_pid(xnthread_user_task(runthread) ? + xnarch_user_pid(xnthread_archtcb(runthread)) : -1, + xnthread_current_priority(runthread)); if (thread != runthread) { sched_removepq(&sched->readyq, &thread->rlink); @@ -2582,6 +2602,10 @@ void xnpod_schedule_runnable(xnthread_t xnarch_switch_to(xnthread_archtcb(runthread), xnthread_archtcb(threadin)); + xnarch_trace_pid(xnthread_user_task(runthread) ? + xnarch_user_pid(xnthread_archtcb(runthread)) : -1, + xnthread_current_priority(runthread)); + #ifdef CONFIG_SMP /* If runthread migrated while suspended, sched is no longer correct. */ sched = xnpod_current_sched(); Index: xenomai/include/nucleus/trace.h =================================================================== --- xenomai.orig/include/nucleus/trace.h +++ xenomai/include/nucleus/trace.h @@ -43,6 +43,7 @@ #define xntrace_user_freeze(v, once) xnarch_trace_user_freeze(v, once) #define xntrace_special(id, v) xnarch_trace_special(id, v) #define xntrace_special_u64(id, v) xnarch_trace_special_u64(id, v) +#define xntrace_pid(pid, prio) xnarch_trace_pid(pid, prio) #define xntrace_panic_freeze() xnarch_trace_panic_freeze() #define xntrace_panic_dump() xnarch_trace_panic_dump() Index: xenomai/ksrc/nucleus/shadow.c =================================================================== --- xenomai.orig/ksrc/nucleus/shadow.c +++ xenomai/ksrc/nucleus/shadow.c @@ -794,7 +794,7 @@ int xnshadow_map(xnthread_t *thread, xnc { xnarch_cpumask_t affinity; unsigned muxid, magic; - int mode, prio; + int mode, prio, err; /* Increment the interface reference count. */ magic = xnthread_get_magic(thread); @@ -849,7 +849,12 @@ int xnshadow_map(xnthread_t *thread, xnc mode = thread->rrperiod != XN_INFINITE ? XNRRB : 0; xnpod_start_thread(thread, mode, 0, affinity, NULL, NULL); - return xnshadow_harden(); + err = xnshadow_harden(); + + xnarch_trace_pid(xnarch_user_pid(xnthread_archtcb(thread)), + xnthread_current_priority(thread)); + + return err; } void xnshadow_unmap(xnthread_t *thread)