Hi, here are three patches, two enhancing the ipipe tracer, the third propagating the new features to Xenomai. The tracer gains support for recording a Linux pid + a priority value. The priority can be set to an arbitrary value (12 bit, signed), but will typically be related to the pid. When the tracer's verbose mode is active, it tries to resolve the pid to a task_struct and prints the first chars of the command line followed by the priority in the related lines. This feature is applied to Xenomai for tracing RT-task switches and wakeups. Kind of poor man's LTT, but with the advantage of per-function tracing. I already used this while trying to understand my prio-inversion issue. Finally, the tracer is enhanced by a facility to track the currently active ipipe domain. The field for displaying domain stall flags is reused for this. Some example from my Pentium-133 box: > I-pipe frozen back-tracing service on 2.6.16.16/ipipe-1.3-05 > ------------------------------------------------------------ > Freeze: 6070092534285 cycles, Trace Points: 1000 (+10) > > +----- Hard IRQs ('|': locked) > |+---- > ||+--- > |||+-- Xenomai > ||||+- Linux ('*': domain stalled, '+': current, '#': current+stalled) > ||||| +---------- Delay flag ('+': > 1 us, '!': > 10 us) > ||||| | +- NMI noise ('N') > ||||| | | > Type User Val. Time Delay Function (Parent) > : +func -3221+ 2.105 n_tty_set_room+0x8 (n_tty_receive_buf+0xe4b) > : +func -3219+ 2.060 kill_fasync+0x9 (n_tty_receive_buf+0xe78) > : +func -3217+ 1.458 __wake_up+0xe (n_tty_receive_buf+0xe97) > : +func -3216+ 2.421 __ipipe_test_and_stall_root+0x8 (__wake_up+0x1a) > : #func -3213+ 2.135 __wake_up_common+0xe (__wake_up+0x50) > : #func -3211+ 6.090 default_wake_function+0x8 (__wake_up_common+0x33) > :| #func -3205+ 2.676 __ipipe_handle_irq+0xe (common_interrupt+0x18) > :| #func -3203+ 2.360 __ipipe_ack_common_irq+0xa (__ipipe_handle_irq+0x80) > :| #func -3200+ 3.428 ipipe_test_and_stall_pipeline_from+0x8 (__ipipe_ack_common_irq+0x16) > :| #func -3197+ 4.511 mask_and_ack_8259A+0xb (__ipipe_ack_common_irq+0x3f) > :| #func -3192+ 2.571 __ipipe_dispatch_wired+0xe (__ipipe_handle_irq+0x8a) > :| #*func -3190+ 2.766 xnintr_irq_handler+0xb (__ipipe_dispatch_wired+0x7d) > :| #*func -3187+ 4.902 rt_irqbench_task_irq+0xa [xeno_irqbench] (xnintr_irq_handler+0x24) > :| #*func -3182+ 3.451 rtdm_event_signal+0x9 (rt_irqbench_task_irq+0x46 [xeno_irqbench]) > :| #*func -3179+ 3.796 xnsynch_flush+0xe (rtdm_event_signal+0x2d) > :| #*func -3175+ 3.263 xnpod_resume_thread+0xe (xnsynch_flush+0x76) > :| #*[ 922] irqloop 99 -3171+ 4.375 xnpod_resume_thread+0x48 (xnsynch_flush+0x76) > :| #*func -3167+ 2.992 xnpod_schedule+0xe (rtdm_event_signal+0x36) > :| #*func -3164+ 2.511 rthal_irq_end+0x8 (xnintr_irq_handler+0x41) > :| #*func -3162+ 3.969 enable_8259A_irq+0x9 (rthal_irq_end+0x2e) > :| #*func -3158+ 2.511 xnpod_schedule+0xe (xnintr_irq_handler+0x5f) > :| #*[ 0] swapper 0 -3155+ 8.669 xnpod_schedule+0x82 (xnintr_irq_handler+0x5f) > :| #*func -3146+ 7.766 __switch_to+0xe (xnpod_schedule+0x5e8) > :| #*[ 922] irqloop 99 -3139+ 6.992 xnpod_schedule+0x6bc (xnpod_suspend_thread+0xed) > :| #*func -3132! 18.015 __ipipe_restore_pipeline_head+0x8 (rtdm_event_timedwait+0xea) > : +*func -3114+ 2.774 __ipipe_syscall_root+0x9 (system_call+0x20) > : +*func -3111+ 2.323 __ipipe_dispatch_event+0xe (__ipipe_syscall_root+0x55) > : +*func -3109+ 4.676 hisyscall_event+0xe (__ipipe_dispatch_event+0x5e) > : +*func -3104+ 2.135 sys_rtdm_ioctl+0x8 (hisyscall_event+0x140) > : +*func -3102+ 2.157 _rtdm_ioctl+0xe (sys_rtdm_ioctl+0x16) > : +*func -3100+ 2.052 rtdm_context_get+0x9 (_rtdm_ioctl+0x1f) Jan