[PATCH v2 10/12] locking/qspinlock: paravirt use simple trylock in case idx overflows

From: Nicholas Piggin
Date: Wed Jul 13 2022 - 03:08:37 EST


The mcs node overflow fallback locking case does not have to use
pv_hybrid_queued_unfair_trylock as the trylock, which reduces the
differences between pv and !pv cases.

This was likely an artifact of function renaming making it use the pv
trylock, which is not a bug but it is unexpected.

Signed-off-by: Nicholas Piggin <npiggin@xxxxxxxxx>
---
kernel/locking/qspinlock.c | 9 ++-------
1 file changed, 2 insertions(+), 7 deletions(-)

diff --git a/kernel/locking/qspinlock.c b/kernel/locking/qspinlock.c
index df6d8af8f2a9..2ebb946a6b80 100644
--- a/kernel/locking/qspinlock.c
+++ b/kernel/locking/qspinlock.c
@@ -800,13 +800,8 @@ static __always_inline void queued_spin_lock_mcs_queue(struct qspinlock *lock, b
*/
if (unlikely(idx >= MAX_NODES)) {
lockevent_inc(lock_no_node);
- if (paravirt) {
- while (!pv_hybrid_queued_unfair_trylock(lock))
- cpu_relax();
- } else {
- while (!queued_spin_trylock(lock))
- cpu_relax();
- }
+ while (!queued_spin_trylock(lock))
+ cpu_relax();
goto release;
}

--
2.35.1