On Wed, 2004-07-21 at 17:38, Timothy Miller wrote:
Lee Revell wrote:
My
understanding is that the kernel is already preemptible anytime that a
spin lock (including the BKL) is not held, and that the voluntary kernel
preemption patch adds some scheduling points in places where it is safe
to sleep, but preemption is disabled because we are holding the BKL, and
that the number of these should approach zero as the kernel is improved
anyway.
That's confusing to me. It was my understanding that the BKL is used to
completely lock down the kernel so that no other CPU can have a process
get into the kernel... something like how SMP was done under 2.0.
Yes, I was incorrect. The vountary kernel preemption patch takes
sections that are non-preemptible (aka holding a spinlock) and that
would otherwise run for an unbounded time and adds logic to break out of
those loops, releasing any locks, in order to allow a higher priority
process to run. It is voluntary because even though you are in a
non-preemptible section you voluntarily release any locks and yield to a
higher priority process. It has nothing to do with the BKL as such.