On Thu, 22 Nov 2007 17:02:44 +0100 "Leon Woestenberg" <[EMAIL PROTECTED]> 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 [EMAIL PROTECTED] 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 [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/