Consistently use kpreempt_*() outside scheduler path.
Yield the main thread only after exiting critical section.
Consistently use kpreempt_*() outside scheduler path.