From: Robert Hancock <hancockr@shaw.ca>
To: Leon Woestenberg <leon.woestenberg@gmail.com>
Cc: linux-kernel@vger.kernel.org
Subject: Re: Use of mutex in interrupt context flawed/impossible, need advice.
Date: Thu, 22 Nov 2007 19:07:24 -0600 [thread overview]
Message-ID: <474627CC.10201@shaw.ca> (raw)
In-Reply-To: <fa.DDwTo7jhtvU2nkv268RloCrwiwc@ifi.uio.no>
Leon Woestenberg wrote:
> Hello,
>
>
> I'm converting an out-of-tree (*1) driver from binary semaphore to mutex.
>
> Userspace updates a look-up-table using write(). The driver tries to
> write this LUT to the FPGA in the (video frame) interrupt handler. It
> is important that the LUT is consistent and thus changed atomically.
> Note that it is not important that the LUT is updated each interrupt.
>
> The current approach is to try-down()ing a binary semaphore in
> interrupt context, and write the LUT to the FPGA if the semaphore was
> down()ed, do nothing else.
> The write() down()s the semaphore as well before updating the
> in-driver-copy of the LUT, then up()s it again.
>
> I understand this design is not clean (*2), and not even possible with
> mutexes, as mutex_trylock() is not interrupt safe.
>
> My current approach would be to have userspace write into a shadow
> copy, and use a spinlock to update the live copy. The interrupt then
> would try a spinlock.
Unless this update into the FPGA takes a significant amount of time, I
wouldn't bother with that complexity - just do spin_lock_irq/irqsave on
that spinlock.
Using a trylock for this rather sucks since the behavior is entirely
non-deterministic. It could take a really long time in some cases for
the trylock to ever succeed.
>
> My feeling is that we have a valid use of mutex_trylock() in
> interrupt context; "i.e. update LUT if we can do so consistently and
> in time, or not at all".
>
> I would like to know why this is not so, and if someone has a cleaner
> proposal than the "try spinlock" approach?
--
Robert Hancock Saskatoon, SK, Canada
To email, remove "nospam" from hancockr@nospamshaw.ca
Home Page: http://www.roberthancock.com/
next parent reply other threads:[~2007-11-23 1:07 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <fa.DDwTo7jhtvU2nkv268RloCrwiwc@ifi.uio.no>
2007-11-23 1:07 ` Robert Hancock [this message]
2007-11-22 16:02 Use of mutex in interrupt context flawed/impossible, need advice Leon Woestenberg
2007-11-22 16:11 ` Oliver Neukum
2007-11-22 16:19 ` Leon Woestenberg
2007-11-22 16:49 ` Michal Schmidt
2007-11-22 17:17 ` Arjan van de Ven
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=474627CC.10201@shaw.ca \
--to=hancockr@shaw.ca \
--cc=leon.woestenberg@gmail.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.