Messages in this thread | | | Date | Sat, 28 Sep 2002 19:38:06 +0100 | From | John Levon <> | Subject | Re: Sleeping function called from illegal context... |
| |
On Sat, Sep 28, 2002 at 02:27:44PM -0400, Robert Love wrote:
> > NMI interrupt handler cannot block so it trylocks against a spinlock > > instead. Buffer processing code needs to block against concurrent NMI > > interrupts so takes the spinlock for them. All actual blocks on the > > spinlock are beneath a down() on another semaphore, so a sleep whilst > > holding the spinlock won't actually cause deadlock. > > If all accesses to the spinlock are taken under a semaphore, then the > spinlock is not needed (i.e. the down'ed semaphore provides the same > protection), or am I missing something? > > If this is not the case - e.g. there are other accesses to these locks - > then you cannot sleep, no?
The other accessors are spin_trylock()ers, as I mentioned. They will not block but they are not under the semaphore.
The spinlock cannot be a semaphore because NMI interrupts do not take to kindly to up()
regards john
-- "When your name is Winner, that's it. You don't need a nickname." - Loser Lane - 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/
| |