All of lore.kernel.org
 help / color / mirror / Atom feed
From: Philippe Gerum <rpm@xenomai.org>
To: Jan Kiszka <jan.kiszka@domain.hid>
Cc: xenomai@xenomai.org, Tschaeche IT-Services <services@domain.hid>
Subject: Re: [Xenomai-core] [PATCH] Mayday support
Date: Fri, 20 Aug 2010 16:00:45 +0200	[thread overview]
Message-ID: <1282312845.1730.606.camel@domain.hid> (raw)
In-Reply-To: <4C6E75E6.5000408@domain.hid>

On Fri, 2010-08-20 at 14:32 +0200, Jan Kiszka wrote:
> Jan Kiszka wrote:
> > Philippe Gerum wrote:
> >> 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
> >> loop.
> >>
> >> 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:
> >> http://git.xenomai.org/?p=xenomai-rpm.git;a=commit;h=4cf21a2ae58354819da6475ae869b96c2defda0c
> >>
> >> 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 2.6.32.15-2.7-00 or 2.6.34-2.7-00 for x86,
> >> 2.6.33.5-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.
> >>
> > 
> > I've retested the feature as it's now in master, and it has one
> > remaining problem: If you run the cpu hog under gdb control and try to
> > break out of the while(1) loop, this doesn't work before the watchdog
> > expired - of course. But if you send the break before the expiry (or hit
> > a breakpoint), something goes wrong. The Xenomai task continues to spin,
> > and there is no chance to kill its process (only gdb).
> > 
> > # cat /proc/xenomai/sched
> > CPU  PID    CLASS  PRI      TIMEOUT   TIMEBASE   STAT       NAME
> >   0  0      idle    -1      -         master     RR         ROOT/0

Eeek, we really need to have a look at this funky STAT output.

> >   1  0      idle    -1      -         master     R          ROOT/1
> >   0  6120   rt      99      -         master     Tt         cpu-hog
> > # cat /proc/xenomai/stat
> > CPU  PID    MSW        CSW        PF    STAT       %CPU  NAME
> >   0  0      0          0          0     00500088    0.0  ROOT/0
> >   1  0      0          0          0     00500080   99.7  ROOT/1
> >   0  6120   0          1          0     00342180  100.0  cpu-hog
> >   0  0      0          21005      0     00000000    0.0  IRQ3340: [timer]
> >   1  0      0          35887      0     00000000    0.3  IRQ3340: [timer]
> > 
> 
> Fixable by this tiny change:
> 
> diff --git a/ksrc/nucleus/sched.c b/ksrc/nucleus/sched.c
> index 5242d9f..04a344e 100644
> --- a/ksrc/nucleus/sched.c
> +++ b/ksrc/nucleus/sched.c
> @@ -175,7 +175,8 @@ void xnsched_init(struct xnsched *sched, int cpu)
>  			     xnthread_name(&sched->rootcb));
>  
>  #ifdef CONFIG_XENO_OPT_WATCHDOG
> -	xntimer_init(&sched->wdtimer, &nktbase, xnsched_watchdog_handler);
> +	xntimer_init_noblock(&sched->wdtimer, &nktbase,
> +			     xnsched_watchdog_handler);
>  	xntimer_set_name(&sched->wdtimer, "[watchdog]");
>  	xntimer_set_priority(&sched->wdtimer, XNTIMER_LOPRIO);
>  	xntimer_set_sched(&sched->wdtimer, sched);
> 
> 
> I.e. the watchdog timer should not be stopped by any ongoing debug
> session of a Xenomai app. Will queue this for upstream.

Yes, that makes a lot of sense now. The watchdog would not fire if the
task was single-stepped anyway, since the latter would have been moved
to secondary mode first.

Did you see this bug happening in a uniprocessor context as well?

> 
> Jan
> 

-- 
Philippe.




  reply	other threads:[~2010-08-20 14:00 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-06-02 17:19 [Xenomai-core] [RFC] Break out of endless user space loops Jan Kiszka
2010-06-02 17:30 ` Gilles Chanteperdrix
2010-06-03  6:55   ` Jan Kiszka
2010-06-03  8:27     ` Philippe Gerum
2010-06-03  8:47       ` Jan Kiszka
2010-06-03  9:56         ` Philippe Gerum
2010-06-03 10:18           ` Jan Kiszka
2010-06-03 10:47             ` Philippe Gerum
2010-06-03 10:52               ` Philippe Gerum
2010-06-03 10:59               ` Jan Kiszka
2010-06-02 20:58 ` Philippe Gerum
2010-06-03  6:56   ` Jan Kiszka
2010-06-09 10:41 ` [Xenomai-core] [PATCH] Mayday support (was: Re: [RFC] Break out of endless user space loops) Philippe Gerum
2010-06-09 13:38   ` [Xenomai-help] " Tschaeche IT-Services
2010-06-09 14:01     ` Philippe Gerum
2010-06-09 18:11   ` Tschaeche IT-Services
2010-06-18 23:11     ` [Xenomai-core] " Philippe Gerum
2010-06-24  9:22       ` [Xenomai-help] " Tschaeche IT-Services
2010-06-24  9:34         ` [Xenomai-core] [PATCH] Mayday support Jan Kiszka
2010-06-24 10:28         ` [Xenomai-core] [PATCH] Mayday support (was: Re: [RFC] Break out of endless user space loops) Philippe Gerum
2010-06-24 12:05   ` [Xenomai-core] [PATCH] Mayday support Jan Kiszka
2010-06-27 16:01     ` Philippe Gerum
2010-06-28 14:06       ` Jan Kiszka
2010-06-28 14:12         ` Philippe Gerum
2010-07-06 15:44         ` Philippe Gerum
2010-07-06 15:54           ` Jan Kiszka
2010-07-06 16:41             ` Philippe Gerum
2010-07-06 17:10               ` Jan Kiszka
2010-08-20 12:32     ` Jan Kiszka
2010-08-20 14:00       ` Philippe Gerum [this message]
2010-08-20 14:06         ` Jan Kiszka
2010-08-20 14:20           ` Philippe Gerum

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1282312845.1730.606.camel@domain.hid \
    --to=rpm@xenomai.org \
    --cc=jan.kiszka@domain.hid \
    --cc=services@domain.hid \
    --cc=xenomai@xenomai.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.