lkml.org 
[lkml]   [2007]   [Nov]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: Use of mutex in interrupt context flawed/impossible, need advice.
    On Thu, 22 Nov 2007 17:02:44 +0100
    "Leon Woestenberg" <leon.woestenberg@gmail.com> 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.
    >

    I suspect you need to copy the userspace data anyway, so I don't see
    why the spinlock approach would be wrong; if the update itself is short
    and non-sleeping, it's even better than a mutex or semaphore.


    --
    If you want to reach me at my work email, use arjan@linux.intel.com
    For development, discussion and tips for power savings,
    visit http://www.lesswatts.org
    -
    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/

    \
     
     \ /
      Last update: 2007-11-22 18:21    [W:0.023 / U:0.232 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site