From: Nishanth Aravamudan <nacc@us.ibm.com>
To: Nish Aravamudan <nish.aravamudan@gmail.com>
Cc: Arnd Bergmann <arnd@arndb.de>, Sergey Vlasov <vsu@altlinux.ru>,
Al Borchers <alborchers@steinerpoint.com>,
david-b@pacbell.net, greg@kroah.com,
linux-kernel@vger.kernel.org
Subject: Re: [RFC UPDATE PATCH] add wait_event_*_lock() functions and comments
Date: Mon, 14 Feb 2005 17:04:35 -0800 [thread overview]
Message-ID: <20050215010435.GD2403@us.ibm.com> (raw)
In-Reply-To: <29495f1d05021221003ef31c3e@mail.gmail.com>
On Sat, Feb 12, 2005 at 09:00:52PM -0800, Nish Aravamudan wrote:
> On Sun, 13 Feb 2005 03:41:01 +0100, Arnd Bergmann <arnd@arndb.de> wrote:
> > On Sünnavend 12 Februar 2005 14:28, Sergey Vlasov wrote:
> > > On Sat, 12 Feb 2005 12:38:26 +0100 Arnd Bergmann wrote:
> > > > #define __wait_event_lock(wq, condition, lock, flags) \
> > > > do { \
> > > > DEFINE_WAIT(__wait); \
> > > > \
> > > > for (;;) { \
> > > > prepare_to_wait(&wq, &__wait, TASK_UNINTERRUPTIBLE); \
> > > > spin_lock_irqsave(lock, flags); \
> > > > if (condition) \
> > > > break; \
> > > > spin_unlock_irqrestore(lock, flags); \
> > > > schedule(); \
> > > > } \
> > > > spin_unlock_irqrestore(lock, flags); \
> > > > finish_wait(&wq, &__wait); \
> > > > } while (0)
> > >
> > > But in this case the result of testing the condition becomes useless
> > > after spin_unlock_irqrestore - someone might grab the lock and change
> > > things. Therefore the calling code would need to add a loop around
> > > wait_event_lock - and the wait_event_* macros were added precisely to
> > > encapsulate such a loop and avoid the need to code it manually.
> >
> > Ok, i understand now what the patch really wants to achieve. However,
> > I'm not convinced it's a good idea. In the usb/gadget/serial.c driver,
> > this appears to work only because an unconventional locking scheme is
> > used, i.e. there is an extra flag (port->port_in_use) that is set to
> > tell other functions about the state of the lock in case the lock holder
> > wants to sleep.
> >
> > Is there any place in the kernel that would benefit of the
> > wait_event_lock() macro family while using locks without such
> > special magic?
>
> Sorry for replying from a different account, but it's the best I can
> do right now. I know while I was scanning the whole kernel for other
> wait_event*() replacements, I thought at least a handful of times,
> "ugh, I could replace this whole block of code, except for that lock!"
> I will try to get you a more concrete example on Monday. Thanks for
> the feedback & patience!
Here's at least one example:
drivers/ieee1394/video1394.c:__video1394_ioctl()
I'm having trouble finding more (maybe I already fixed some of them via
the existing macros in different ways -- or maybe my memory is just
acting up...).
I think this patch/macro can be useful for wait-queues where the same
lock is used to protect the sleeper and the sleeper's data?
Any further feedback would be appreciated, or any recommendations for
better ways of doing things. I really would just like to have one
consistent interface for all wait-queue usage :) The fact that was is
nearly (but not quite) done by wait_event*() has to be defined somewhere
else just to get that functionality, when it costs little to add it to a
common header, makes this a pretty small change to me.
But, Arnd, I understand your concern. It would not be good if we had a
bunch of lock-holding sleepers pop up now! I will try to think of a
better solution.
Thanks,
Nish
next prev parent reply other threads:[~2005-02-15 1:06 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-02-11 7:07 [RFC PATCH] add wait_event_*_lock() functions Al Borchers
2005-02-11 17:31 ` Nishanth Aravamudan
2005-02-11 19:55 ` [RFC UPDATE PATCH] add wait_event_*_lock() functions and comments Nishanth Aravamudan
2005-02-12 11:38 ` Arnd Bergmann
2005-02-12 13:28 ` Sergey Vlasov
2005-02-13 2:41 ` Arnd Bergmann
2005-02-13 5:00 ` Nish Aravamudan
2005-02-15 1:04 ` Nishanth Aravamudan [this message]
2005-02-15 17:50 ` Arnd Bergmann
2005-02-15 18:19 ` Nish Aravamudan
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=20050215010435.GD2403@us.ibm.com \
--to=nacc@us.ibm.com \
--cc=alborchers@steinerpoint.com \
--cc=arnd@arndb.de \
--cc=david-b@pacbell.net \
--cc=greg@kroah.com \
--cc=linux-kernel@vger.kernel.org \
--cc=nish.aravamudan@gmail.com \
--cc=vsu@altlinux.ru \
/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.