All of lore.kernel.org
 help / color / mirror / Atom feed
From: Joe Korty <joe.korty@ccur.com>
To: john_fodor@mitel.com
Cc: linux-kernel@vger.kernel.org
Subject: Re: wait_event and preemption in 2.6
Date: Fri, 8 Oct 2004 16:24:52 -0400	[thread overview]
Message-ID: <20041008202452.GA4894@tsunami.ccur.com> (raw)
In-Reply-To: <20041008174510.GJ30977@e-smith.com>

On Fri, Oct 08, 2004 at 01:45:10PM -0400, michael_soulier@mitel.com wrote:
> I'm writing a device driver for PPC Linux and I'm using wait_event. It
> seems to me that there is a potential race condition in wait_event when
> preemption is turned on (2.6 kernel).
> 
> The scenario goes something like this: After the waiting process is
> woken up and returns from schedule it goes to the top of the loop and
> prepares to wait again (despite the condition being true). Then it will
> check the condition and break out of the loop. But what if in-kernel
> preemption occurs while it's doing that and another process is
> immediately scheduled to run? Does the process sleep forever? Assume
> that the event (say interrupt) that caused the original wakeup is a one
> shot.
> 
> I'm probably missing something. I've googled for an answer and asked
> some of my Linux friends but it's not clear. Thanks for any replies.
> Please cc me.


Hi Mike,
Here is the answer Robert Love gave me to that very same question,
over a year ago.......

> On Mon, 2003-04-14 at 17:54, Joe Korty wrote:
>> Is this analysis correct?  If it is, perhaps there is an alternative
>> to fixing these cases individually: make the TASK_INTERRUPTIBLE/
>> TASK_UNINTERRUPTIBLE states block preemption.  In which case the
>> 'set_current_state(TASK_RUNNING)' macro would need to include the
>> same preemption check as 'preemption_enable'.

> Thankfully you are wrong or we would have some serious problems :)
>
> See kernel/sched.c :: preempt_schedule() where we set p->preempt_count
> to PREEMPT_ACTIVE.
>
> Then see kernel/sched.c :: schedule() where we short-circuit the
> remove-from-runqueue code if PREEMPT_ACTIVE is set.
>
> Thus, it is safe to preempt regardless of the task's state.  It will
> eventually reschedule.
>
>        Robert Love

      parent reply	other threads:[~2004-10-08 20:25 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-10-08 17:45 wait_event and preemption in 2.6 michael_soulier
2004-10-08 20:14 ` Robert Love
2004-10-08 20:24 ` Joe Korty [this message]

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=20041008202452.GA4894@tsunami.ccur.com \
    --to=joe.korty@ccur.com \
    --cc=john_fodor@mitel.com \
    --cc=linux-kernel@vger.kernel.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.