Messages in this thread | | | Subject | Re: Sleeping function called from illegal context... | From | Robert Love <> | Date | 28 Sep 2002 14:27:44 -0400 |
| |
On Sat, 2002-09-28 at 13:24, John Levon 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?
I really can think of no case in which it is safe to sleep while holding a spinlock or otherwise atomic. If it is, then the atomicity is not needed, sort of by definition.
Robert Love
- 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/
| |