I've toyed a bit to find a generic approach for the nucleus to regain
complete control over a userland application running in a syscall-less
The original issue was about recovering gracefully from a runaway
situation detected by the nucleus watchdog, where a thread would spin in
primary mode without issuing any syscall, but this would also apply for
real-time signals pending for such a thread. Currently, Xenomai rt
signals cannot preempt syscall-less code running in primary mode either.
The major difference between the previous approaches we discussed about
and this one, is the fact that we now force the runaway thread to run a
piece of valid code that calls into the nucleus. We do not force the
thread to run faulty code or at a faulty address anymore. Therefore, we
can reuse this feature to improve the rt signal management, without
having to forge yet-another signal stack frame for this.
The code introduced only fixes the watchdog related issue, but also does
some groundwork for enhancing the rt signal support later. The
implementation details can be found here:
The current mayday support is only available for powerpc and x86 for
now, more will come in the next days. To have it enabled, you have to
upgrade your I-pipe patch to 22.214.171.124-2.7-00 or 2.6.34-2.7-00 for x86,
126.96.36.199-2.10-01 or 2.6.34-2.10-00 for powerpc. That feature relies on a
new interface available from those latest patches.
The current implementation does not break the 2.5.x ABI on purpose, so
we could merge it into the stable branch.
We definitely need user feedback on this. Typically, does arming the
nucleus watchdog with that patch support in, properly recovers from your
favorite "get me out of here" situation? TIA,
You can pull this stuff from
git://git.xenomai.org/xenomai-rpm.git, queue/mayday branch.
Xenomai-core mailing list