Il 11/03/2013 14.07, Gilles Chanteperdrix ha scritto:
On 03/11/2013 09:47 AM, Paolo Minazzi wrote:

Il 08/03/2013 21.13, Gilles Chanteperdrix ha scritto:
On 03/08/2013 01:50 PM, Paolo Minazzi wrote:

This fault does not freeze the arm, I can countinue to work.

Ideas ?
Please try the following patch:

diff --git a/ksrc/nucleus/shadow.c b/ksrc/nucleus/shadow.c
index c91a6f3..ed3864b 100644
--- a/ksrc/nucleus/shadow.c
+++ b/ksrc/nucleus/shadow.c
@@ -1430,8 +1430,10 @@ void xnshadow_unmap(xnthread_t *thread)
        rpi_pop(thread);

        sys_ppd = xnsys_ppd_get(0);
-       xnheap_free(&sys_ppd->sem_heap, thread->u_mode);
-       thread->u_mode = NULL;
+       if (thread->u_mode) {
+               xnheap_free(&sys_ppd->sem_heap, thread->u_mode);
+               thread->u_mode = NULL;
+       }

        xnarch_atomic_dec(&sys_ppd->refcnt);

@@ -2379,7 +2381,7 @@ int do_hisyscall_event(unsigned event, 
rthal_pipeline_stage_t *stage,
         ret_handled:

        /* Update the userland-visible state. */
-       if (thread)
+       if (thread&&   thread->u_mode)
                *thread->u_mode = thread->state;

        trace_mark(xn_nucleus, syscall_histage_exit,
@@ -2549,7 +2551,7 @@ int do_losyscall_event(unsigned event, 
rthal_pipeline_stage_t *stage,
         ret_handled:

        /* Update the userland-visible state. */
-       if (thread)
+       if (thread&&   thread->u_mode)
                *thread->u_mode = thread->state;

        trace_mark(xn_nucleus, syscall_lostage_exit,

Hi Gilles,
I can see the same problem under 2.6.2.1.
I was debugging, after a while I could not stop anymore the code using
breakpoints because all tasks are stopped at rt_task_sleep.
After this, If I close the application and restart it, the rt_task sleep
are blocked. I have to restart my arm processor.
Any ideas ?

Debugging xenomai thread causes the timers to be stopped, and they are
supposed to be restarted when the thread blocked on the breakpoint,
maybe this is what goes wrong: the timers are not restarted.

Another possibility is the hardware timer being programmed for a too
short delay.

Please no private mails.

Paolo





Time ago I have already tried to change a parameter ksrc/nucleus/timer.c:402 (the following is the comment ...)
                                /*
                                 * Make the blocked timer elapse again
                                 * at a reasonably close date in the
                                 * future, waiting for the timebase to
                                 * be unlocked at some point. Timers
                                 * are blocked when single-stepping
                                 * into an application using a
                                 * debugger, so it is fine to wait for
                                 * 250 ms for the user to continue
                                 * program execution.
                                 */
                                interval = xnarch_ns_to_tsc(250000000ULL);
                                goto requeue;

I have tried bigger and smaller value than 250ms without luck.
If you have got some ideas I can make tests as you want.
Regards,
Paolo


_______________________________________________
Xenomai mailing list
[email protected]
http://www.xenomai.org/mailman/listinfo/xenomai

Reply via email to