From: Neil Horman <nhorman@redhat.com>
To: Martijn Sipkema <martijn@entmoot.nl>
Cc: linux-kernel@vger.kernel.org
Subject: Re: waiting on a condition
Date: Wed, 13 Oct 2004 10:55:59 -0400 [thread overview]
Message-ID: <416D41FF.6080002@redhat.com> (raw)
In-Reply-To: <02bb01c4b138$8a786f10$161b14ac@boromir>
Martijn Sipkema wrote:
> L.S.
>
> I'd like to do something similar as can be done using a POSIX condition
> variable in the kernel, i.e. wait for some condition to become true. The
> pthread_cond_wait() function allows atomically unlocking a mutex and
> waiting on a condition. I think I should do something like:
> (the condition is updated from an interrupt handler)
>
> disable interrupts
> acquire spinlock
> if condition not satisfied
> add task to wait queue
> set task to sleep
> release spinlock
> restore interrupts
> schedule
>
> Now, this will only work with preemption disabled within the critical
> section. How would something like this be done whith preemption
> enabled?
>
you above algorithm seems rather prone to deadlock. Everything else in
the kernel does more or less this operation by using a wait queue and a
call to schedule to make tasks sleep until an event is signaled with a
call to one of the wake_up family of functions. Then a spinlock is used
to protect any critical data regions in smp environments. Search the
kernel for calls to add_wait_queue and wake_up[_interruptible] for
examples of how this is implemented.
HTH
Neil
>
> --ms
>
>
>
>
> -
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
--
/***************************************************
*Neil Horman
*Software Engineer
*Red Hat, Inc.
*nhorman@redhat.com
*gpg keyid: 1024D / 0x92A74FA1
*http://pgp.mit.edu
***************************************************/
next prev parent reply other threads:[~2004-10-13 14:57 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-10-13 15:23 waiting on a condition Martijn Sipkema
2004-10-13 14:55 ` Neil Horman [this message]
2004-10-13 15:05 ` Duncan Sands
2004-10-13 15:30 ` Peter W. Morreale
2004-10-13 20:58 ` Martijn Sipkema
2004-10-13 20:58 ` Martijn Sipkema
2004-10-14 15:37 ` Davide Rossetti
2004-10-14 15:49 ` Richard B. Johnson
2004-10-15 13:13 ` Alan Cox
2004-10-13 15:34 ` Christophe Saout
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=416D41FF.6080002@redhat.com \
--to=nhorman@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=martijn@entmoot.nl \
/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.