Rohan Akela <rohanakela%gmail.com@localhost> writes: > I would like to know if a thread holding kernel_lock which is a spinlock > can be preempted or not ? > > The implementation of kernel_lock in kern_lock.c seems to suggests that it > can be preempted because the it uses splvm which implies IPL_VM. So a > thread holding kernel_lock can be interrupted by clock interrupt and then > scheduler can put the thread to sleep. This behavior is contrary to the > classic definition of spinlock. > > Is my understanding correct ? This is hard to understand. My memory is slightly fuzzy, but I believe that KERNEL_LOCK is special in that it's automatically released and reacquired across scheduling. In addition to acquiring the big lock for protection from other processors, one needs to splfoo() to protect against same-cpu interrupts that might try to acquire the big lock. I suggest reading 'man 9 lock', and then the source code. Arguably there should be a KERNEL_LOCK(9) man page; there isn't in -6.
Description: PGP signature