>-----Original Message----- >From: Philippe Gerum [mailto:r...@xenomai.org] >Sent: Wednesday, August 18, 2010 4:44 PM >To: Herrera-Bendezu, Luis >Cc: xenomai-help@gna.org >Subject: RE: [Xenomai-help] RTDM task blocks when connecting gdb to realtime >task > > >On Wed, 2010-08-18 at 13:29 -0400, Herrera-Bendezu, Luis wrote: >> Philippe, >> >> >-----Original Message----- >> >From: Philippe Gerum [mailto:r...@xenomai.org] >> >Sent: Wednesday, August 18, 2010 12:39 PM >> >To: Herrera-Bendezu, Luis >> >Cc: xenomai-help@gna.org >> >Subject: Re: [Xenomai-help] RTDM task blocks when connecting gdb to >> >realtime task >> > >> > >> >On Wed, 2010-08-18 at 12:03 -0400, Herrera-Bendezu, Luis wrote: >> >> Hello: >> >> >> >> I am using Xenomai 2.4.10 on PPC. An RTDM driver creates an RTDM task >> >> using rtdm_task_init() and goes to sleep periodically via function >> >> rtdm_task_sleep(). >> >> >> >> When driver is loaded, RTDM task executes as expected. Then a realtime >> >> application is started via gdbserver on target board and on a linux host >> >> a gdb client is connected to that board. As soon as gdb breakpoints the >> >> realtime application the RTDM task never returns from rtdm_task_sleep(). >> >> The application does not open the RTMD driver so at this point there is >> >> no interaction with the driver. >> >> >> >> The RTDM task is intr_sim and the timer is no longer firing >> >> # cat /proc/xenomai/timerstat/master >> >> CPU SCHEDULED FIRED TIMEOUT INTERVAL HANDLER NAME >> >> 0 29198042 9132085 3724750 - NULL >> >> [host-timer] >> >> 0 1340 1340 - - xnthread_ti intr_sim >> >> >> >> The realtime application is ancvbirt. >> >> # cat /proc/xenomai/sched >> >> CPU PID PRI PERIOD TIMEOUT TIMEBASE STAT NAME >> >> 0 0 -1 0 0 master R ROOT >> >> 0 0 90 0 0 master D intr_sim >> >> 0 1869 0 0 0 master XT ancvbirt >> >> >> >> Any ideas on the cause of the problem and fix? >> > >> >This is a side-effect of hitting a breakpoint in your application >> >introduced by Xenomai: all Xenomai timers are frozen system-wide, until >> >the application is continued. This includes the per-thread timer which >> >is used to have your RTDM task wake up after a delay. >> After continuing the application, the RTDM task does not resume execution. >> I had to reload driver to have it working again. >> > >> >There is a way to prevent this behavior, which was defined for internal >> >purposes only so far. Since Jan is not watching, here is a patch against >> >2.4.10 which happily butchers his nifty interface, that should prevent >> >the per-thread timers of _all_ RTDM tasks from being blocked in that >> >case, which may be enough to help you though: >> > >> >diff --git a/ksrc/skins/rtdm/drvlib.c b/ksrc/skins/rtdm/drvlib.c >> >index 65c630f..0295690 100644 >> >--- a/ksrc/skins/rtdm/drvlib.c >> >+++ b/ksrc/skins/rtdm/drvlib.c >> >@@ -144,6 +144,7 @@ int rtdm_task_init(rtdm_task_t *task, const char *name, >> > res = xnpod_init_thread(task, rtdm_tbase, name, priority, 0, 0, NULL); >> > if (res) >> > goto error_out; >> >+ task->rtimer.status |= XNTIMER_NOBLCK; >> > >> > if (period > 0) { >> > res = xnpod_set_thread_periodic(task, XN_INFINITE, >> >@@ -151,6 +152,7 @@ int rtdm_task_init(rtdm_task_t *task, const char *name, >> > (rtdm_tbase, period)); >> > if (res) >> > goto cleanup_out; >> >+ task->ptimer.status |= XNTIMER_NOBLCK; >> > } >> > >> > res = xnpod_start_thread(task, 0, 0, XNPOD_ALL_CPUS, task_proc, arg); >> > >> Yes, this patch avoids stopping the timers. I see the value on stopping the >> timers on the RTDM driver when application hits a breakpoint but for some >> reason timer does not recover. I am using Linux 2.6.30. > >Could you paste the output from: >/proc/xenomai/stat >/proc/xenomai/timerstat/master > >after the application has resumed execution? > >TIA, > > >-- >Philippe. > Status with application at breakpoint: # cat /proc/xenomai/stat CPU PID MSW CSW PF STAT %CPU NAME 0 0 0 14984 0 00400080 99.7 ROOT 0 0 0 3976 0 00000084 0.0 intr_sim 0 1261 1 1 1 00301380 0.0 ancvbirt 0 0 0 0 0 00000000 0.0 IRQ22: _vip_fpga_co...@2000000_r 0 0 0 337375 0 00000000 0.2 IRQ512: [timer]
# cat /proc/xenomai/timerstat/master CPU SCHEDULED FIRED TIMEOUT INTERVAL HANDLER NAME 0 1005240 326161 1844335 - NULL [host-timer] 0 3976 3976 - - xnthread_ti intr_sim Status of application after application execution is resumed: # cat /proc/xenomai/stat CPU PID MSW CSW PF STAT %CPU NAME 0 0 0 15034 0 00400080 99.6 ROOT 0 0 0 3976 0 00000084 0.0 intr_sim 0 1261 2 2 2 00300380 0.0 ancvbirt 0 0 0 0 0 00000000 0.0 IRQ22: _vip_fpga_co...@2000000_r 0 0 0 428462 0 00000000 0.4 IRQ512: [timer] # cat /proc/xenomai/timerstat/master CPU SCHEDULED FIRED TIMEOUT INTERVAL HANDLER NAME 0 1314446 412961 410890 - NULL [host-timer] 0 3976 3976 - - xnthread_ti intr_sim 0 5 2 - - xnthread_ti AncVbiRt-in-int 0 4 1 - - xnthread_ti AncVbiRt-out-in 0 2 2 - - xnthread_ti AncVbiRt-client 0 3 1 - - xnthread_ti AncVbiRt-tsout 0 3 1 - - xnthread_ti AncVbiRt-pudi 0 1 1 - - xnthread_ti AncVbiRt-ancx 0 1 0 - - xnthread_ti AncVbiRt-vbix 0 1 0 - - xnthread_ti AncVbiRt-gpispl Notes: 1. GNU gdb Red Hat Linux (6.7-1rh) 2. GNU gdbserver Red Hat Linux (6.7-1rh) 3. set gdb to not stop/print/pass SIGXCPU signal. 4. Same behavior if program is executed within gdb and no breakpoints. Thanks, Luis _______________________________________________ Xenomai-help mailing list Xenomai-help@gna.org https://mail.gna.org/listinfo/xenomai-help