sched.c
Kernel > sched.c Functions analysis
1. void __preempt_spin_lock(spinlock_t *lock)
This function is effective only when kernel is SMP supportive and preemption is enabled. Here, the calling process spins on the lock while permitting preemption.
Analysis:
If preemption is enabled, then create a Read-write spinlock, allowing multiple readers but only one writer.
Otherwise enable preemption, check whether the spinlock is still spinning and disable the preemption, incase it is . Do this till the spin lock exists.
My meanderings into the heart of Linux Kernel