I thought you said there were things that want to sleep in the region?
If so, spinlocks will work as long as you don't have CONFIG_PREEMPT or
lock validation (there's no way to deadlock thanks to all the lock getters
using the "trylock" variant), but will blow up because a successful
trylock will obviously also disable preemption and/or trigger all the lock
detection.
So if there are potential sleepers, you'd need the mutex instead.
Linus
--