On Wed, Jan 18, 2012 at 08:59:47PM -0800, Greg A. Woods wrote: > > So if I understand correctly these calls from other subsystems are not > in an interrupt context and if I remember correctly tsleep() should be > fine in any normal driver ioctl() function (for a non-MPSAFE driver, if > indeed its ioctl() function was in the device switch table), but clearly > grabbing the KERNEL_LOCK() is the wrong thing to do for this case, at > least without releasing it properly before the tsleep() call.
I don't know whether you can, or can't, sleep holding the KERNEL_LOCK(). It is a strange beast -- it's a counted lock unlike any of our standard locking primitives (though it's implemented using them). I am carboning tech-kern, where hopefully someone can answer. Thor