Gilles Chanteperdrix wrote:
> Philippe Gerum wrote:
>> Jan Kiszka wrote:
>>> Philippe Gerum wrote:
>>>> Jan Kiszka wrote:
>>>>> Meanwhile I played with some light-weight approach to relax a thread
>>>>> that received a signal (according to do_sigwake_event). Worked, but only
>>>>> once due to a limitation (if not bug) of I-pipe x86: in __ipipe_run_isr,
>>>>> it does not handle the case that a non-root handler may alter the
>>>>> current domain, causing corruptions to the IPIPE_SYNC_FLAG states of the
>>>>> involved domains.
>>>> It is not a bug, this is wanted. ISR must neither change the current
>>>> domain nor migrate CPU; allowing this would open Pandora's box.
>>> And if there is no way to migrate from within an ISR, we can bury any
>>> attempt to deliver signals to spinning Xenomai threads - or what other
>>> context would remain to Xenomai for triggering migration?
>>>
>> The two-phase solution I have mentioned would work.
>
> Something like:
>
> Index: ksrc/nucleus/sched.c
> ===================================================================
> --- ksrc/nucleus/sched.c (revision 4678)
> +++ ksrc/nucleus/sched.c (working copy)
> @@ -75,7 +75,13 @@ static void xnsched_watchdog_handler(str
> thread, xnthread_name(thread));
> xnprintf("watchdog triggered -- killing runaway thread
> '%s'\n",
> xnthread_name(thread));
> - xnpod_delete_thread(thread);
> +#ifdef CONFIG_XENO_OPT_PERVASIVE
> + if (xnthread_user_task(thread)) {
> + xnpod_suspend_thread(thread);
> + xnshadow_send_sig(thread, SIGSEGV, 0, 1);
> + } else
> +#endif /* CONFIG_XENO_OPT_PERVASIVE */
> + xnpod_delete_thread(thread);
> xnsched_reset_watchdog(sched);
> }
> }
Looks good - but we first have to establish that famous relax-on-pending
signal thing...
Jan
--
Siemens AG, Corporate Technology, CT SE 2
Corporate Competence Center Embedded Linux
_______________________________________________
Xenomai-core mailing list
[email protected]
https://mail.gna.org/listinfo/xenomai-core