Re: [PATCH v3 2/5] locking/qspinlock: Refactor the qspinlock slow path
From: Peter Zijlstra <peterz@infradead.org>
Date: 2019-07-16 10:21:24
Also in:
linux-arch, lkml
From: Peter Zijlstra <peterz@infradead.org>
Date: 2019-07-16 10:21:24
Also in:
linux-arch, lkml
On Mon, Jul 15, 2019 at 03:25:33PM -0400, Alex Kogan wrote:
+/*
+ * set_locked_empty_mcs - Try to set the spinlock value to _Q_LOCKED_VAL,
+ * and by doing that unlock the MCS lock when its waiting queue is empty
+ * @lock: Pointer to queued spinlock structure
+ * @val: Current value of the lock
+ * @node: Pointer to the MCS node of the lock holder
+ *
+ * *,*,* -> 0,0,1
+ */
+static __always_inline bool __set_locked_empty_mcs(struct qspinlock *lock,
+ u32 val,
+ struct mcs_spinlock *node)
+{
+ return atomic_try_cmpxchg_relaxed(&lock->val, &val, _Q_LOCKED_VAL);
+}That name is nonsense. It should be something like: static __always_inline bool __try_clear_tail(...)
+/*
+ * pass_mcs_lock - pass the MCS lock to the next waiter
+ * @node: Pointer to the MCS node of the lock holder
+ * @next: Pointer to the MCS node of the first waiter in the MCS queue
+ */
+static __always_inline void __pass_mcs_lock(struct mcs_spinlock *node,
+ struct mcs_spinlock *next)
+{
+ arch_mcs_spin_unlock_contended(&next->locked, 1);
+}I'm not entirely happy with that name either; but it's not horrible like the other one. Why not mcs_spin_unlock_contended() ? _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel