All of lore.kernel.org
 help / color / mirror / Atom feed
From: Gilles Chanteperdrix <gilles.chanteperdrix@xenomai.org>
To: "Stoidner, Christoph" <c.stoidner@arvero.de>
Cc: "xenomai@xenomai.org" <xenomai@xenomai.org>
Subject: Re: [Xenomai] Sleeping function called from invalid context
Date: Wed, 17 Dec 2014 14:22:35 +0100	[thread overview]
Message-ID: <20141217132235.GA4096@hermes.click-hack.org> (raw)
In-Reply-To: <322873cb03ce4d91b6217ebf8e3ef714@EX132MBOX1A.de2.local>

On Wed, Dec 17, 2014 at 12:24:23PM +0000, Stoidner, Christoph wrote:
> 
> After some research I have ended up now in APC'c thread handling (see code snipped below, out of ksrc/arch/generic/hal.c). From my point of view there could be occur the "lost wakeup problem". That means in detail that rthal_kicker() calls wakeup when rthal_apc_thread() has returned from rthal_apc_handler() but not yet called set_current_state(). After that, when kicker has finished, the APC thread calls set_current_state() and goes to sleep. Thus, the wakeup is lost. Or do I overlook something?  Maybe we should use a waitqueue here?
> 
> 
> static int rthal_apc_thread(void *data)
> {
>     unsigned cpu = (unsigned)(unsigned long)data;
> 
>     set_cpus_allowed(current, cpumask_of_cpu(cpu));
>     sigfillset(&current->blocked);
>     current->flags |= PF_NOFREEZE;
>     /* Use highest priority here, since some apc handlers might
>        require to run as soon as possible after the request has been
>        pended. */
>     rthal_setsched_root(current, SCHED_FIFO, MAX_RT_PRIO - 1);
> 
>     while (!kthread_should_stop()) {
>         set_current_state(TASK_INTERRUPTIBLE);
>         schedule();

You can obtain the same effect as with a wait queue by replacing the
schedule() above with:

	  if (rthal_apc_pending[cpu] == 0)
	     schedule();

However, using a wait queue will make the code easier to read.

>         rthal_apc_handler(0, NULL);
>     }
> 
>     __set_current_state(TASK_RUNNING);
> 
>     return 0;
> }
> 
> void rthal_apc_kicker(unsigned virq, void *cookie)
> {
>     wake_up_process(rthal_apc_servers[smp_processor_id()]);
> }

-- 
					    Gilles.


  parent reply	other threads:[~2014-12-17 13:22 UTC|newest]

Thread overview: 49+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-12-10 18:58 [Xenomai] Sleeping function called from invalid context Stoidner, Christoph
2014-12-10 19:01 ` Gilles Chanteperdrix
2014-12-11 10:00   ` Stoidner, Christoph
2014-12-11 10:05     ` Gilles Chanteperdrix
2014-12-11 10:18       ` Stoidner, Christoph
2014-12-11 10:22         ` Gilles Chanteperdrix
2014-12-11 10:29           ` Stoidner, Christoph
2014-12-11 10:47             ` Gilles Chanteperdrix
2014-12-11 11:17               ` Stoidner, Christoph
2014-12-11 14:47                 ` Gilles Chanteperdrix
2014-12-11 15:47                   ` Stoidner, Christoph
2014-12-11 16:06                     ` Gilles Chanteperdrix
2014-12-11 16:31                       ` Stoidner, Christoph
2014-12-11 16:38                         ` Gilles Chanteperdrix
2014-12-11 19:23                           ` Stoidner, Christoph
2014-12-12 16:42                             ` Stoidner, Christoph
2014-12-15 11:42                               ` Stoidner, Christoph
2014-12-15 13:23                                 ` Gilles Chanteperdrix
2014-12-15 13:29                                   ` Stoidner, Christoph
2014-12-15 14:20                                     ` Gilles Chanteperdrix
2014-12-15 15:11                                       ` Stoidner, Christoph
2014-12-15 15:19                                         ` Gilles Chanteperdrix
2014-12-17 12:24                                           ` Stoidner, Christoph
2014-12-17 12:38                                             ` Gilles Chanteperdrix
2014-12-17 13:22                                             ` Gilles Chanteperdrix [this message]
2014-12-17 15:46                                               ` Gilles Chanteperdrix
2014-12-17 22:40                                                 ` Stoidner, Christoph
  -- strict thread matches above, loose matches on Subject: below --
2014-12-06 14:19 Stoidner, Christoph
2014-12-06 14:25 ` Gilles Chanteperdrix
2014-12-06 15:11   ` Stoidner, Christoph
2014-12-07 12:32     ` Stoidner, Christoph
2014-12-07 12:40 ` Gilles Chanteperdrix
2014-12-07 13:50   ` Stoidner, Christoph
2014-12-07 13:52     ` Gilles Chanteperdrix
2014-12-07 15:05       ` Stoidner, Christoph
2014-12-09 20:06         ` Stoidner, Christoph
2014-12-09 20:08           ` Gilles Chanteperdrix
2014-12-09 20:18             ` Stoidner, Christoph
2014-12-09 20:24               ` Gilles Chanteperdrix
2014-12-09 20:34                 ` Stoidner, Christoph
2014-12-09 20:37                   ` Gilles Chanteperdrix
2014-12-09 20:47                     ` Stoidner, Christoph
2014-12-09 20:55                       ` Gilles Chanteperdrix
2014-12-09 20:49           ` Stoidner, Christoph
2014-12-09 20:59             ` Gilles Chanteperdrix
2014-12-10 16:23               ` Stoidner, Christoph
2014-12-10 16:26                 ` Gilles Chanteperdrix
2014-12-10 18:23                   ` Stoidner, Christoph
2014-12-10 18:41                     ` Gilles Chanteperdrix

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=20141217132235.GA4096@hermes.click-hack.org \
    --to=gilles.chanteperdrix@xenomai.org \
    --cc=c.stoidner@arvero.de \
    --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.