please at least use an owner-recursive per-CPU lock, not a naked preempt_disable()! The concurrency rules for data structures changed via preempt_disable() are quite hard to sort out after the fact. (preempt_disable() is too opaque, it doesnt attach data structure to critical section, like normal locks do.)