On 04/03/2019 01:16 PM, Peter Zijlstra wrote: > On Wed, Apr 03, 2019 at 12:33:20PM -0400, Waiman Long wrote: >> static inline void queued_spin_lock_slowpath(struct qspinlock *lock, u32 >> val) >> { >> if (static_branch_unlikely(&use_numa_spinlock)) >> numa_queued_spin_lock_slowpath(lock, val); >> else >> native_queued_spin_lock_slowpath(lock, val); >> } > That's horrible for the exact reason you state. > >> Alternatively, we can also call numa_queued_spin_lock_slowpath() in >> native_queued_spin_lock_slowpath() if we don't want to increase the code >> size of spinlock call sites. > Yeah, still don't much like that though, we're littering the fast path > of that slow path with all sorts of crap. Yes, I know it is less than ideal, but that is probably the only option if we don't have static_call or paravirt. On the other hand, I am perfectly fine with making CNA depends on PARAVIRT_SPINLOCKS for now until static_call is available. Cheers, Longman