This replaces the generic queued spinlock code (like s390 does) with our own implementation. There is an extra shim patch 1a here to get the series to apply.
So far the microbenchmarks look okay, haven't really had time to write up a good set of results. I hope to get some significant bigger workloads some testing time in the next week or so so if those turn out positive I may resubmit with any tweaks and some more details of numbers. Thanks, Nick Nicholas Piggin (17): powerpc/qspinlock: powerpc qspinlock implementation powerpc/qspinlock: add mcs queueing for contended waiters powerpc/qspinlock: use a half-word store to unlock to avoid larx/stcx. powerpc/qspinlock: convert atomic operations to assembly powerpc/qspinlock: allow new waiters to steal the lock before queueing powerpc/qspinlock: theft prevention to control latency powerpc/qspinlock: store owner CPU in lock word powerpc/qspinlock: paravirt yield to lock owner powerpc/qspinlock: implement option to yield to previous node powerpc/qspinlock: allow stealing when head of queue yields powerpc/qspinlock: allow propagation of yield CPU down the queue powerpc/qspinlock: add ability to prod new queue head CPU powerpc/qspinlock: trylock and initial lock attempt may steal powerpc/qspinlock: use spin_begin/end API powerpc/qspinlock: reduce remote node steal spins powerpc/qspinlock: allow indefinite spinning on a preempted owner powerpc/qspinlock: provide accounting and options for sleepy locks arch/powerpc/Kconfig | 1 - arch/powerpc/include/asm/qspinlock.h | 130 ++- arch/powerpc/include/asm/qspinlock_types.h | 70 ++ arch/powerpc/include/asm/spinlock_types.h | 2 +- arch/powerpc/lib/Makefile | 4 +- arch/powerpc/lib/qspinlock.c | 1009 ++++++++++++++++++++ 6 files changed, 1172 insertions(+), 44 deletions(-) create mode 100644 arch/powerpc/include/asm/qspinlock_types.h create mode 100644 arch/powerpc/lib/qspinlock.c -- 2.35.1