On Sat, 26 Nov 2022 19:59:15 +1000, Nicholas Piggin wrote: > This replaces the generic queued spinlock code (like s390 does) with > our own implementation. There is an extra shim patch 1a to get the > series to apply. > > Generic PV qspinlock code is causing latency / starvation regressions on > large systems that are resulting in hard lockups reported (mostly in > pathoogical cases). The generic qspinlock code has a number of issues > important for powerpc hardware and hypervisors that aren't easily solved > without changing code that would impact other architectures. Follow > s390's lead and implement our own for now. > > [...]
Applied to powerpc/next. [00/17] powerpc/qspinlock: powerpc qspinlock implementation https://git.kernel.org/powerpc/c/9f61521c7a284e799050cd2adacc9a611bd2b491 [01/17] powerpc/qspinlock: add mcs queueing for contended waiters https://git.kernel.org/powerpc/c/84990b169557428c318df87b7836cd15f65b62dc [02/17] powerpc/qspinlock: use a half-word store to unlock to avoid larx/stcx. https://git.kernel.org/powerpc/c/4c93c2e4b9e8988511c06b9c042f23d4b8f593ad [03/17] powerpc/qspinlock: convert atomic operations to assembly https://git.kernel.org/powerpc/c/b3a73b7db2b6cb3b2e5bfda5518a0e92230ef673 [04/17] powerpc/qspinlock: allow new waiters to steal the lock before queueing https://git.kernel.org/powerpc/c/6aa42f883c438ea132a28801bef3f86f3883d14c [05/17] powerpc/qspinlock: theft prevention to control latency https://git.kernel.org/powerpc/c/0944534ef4d5cf39c8133575524be0be3337dd62 [06/17] powerpc/qspinlock: store owner CPU in lock word https://git.kernel.org/powerpc/c/e1a31e7fd7130628cfd229253da2b4630e7a809c [07/17] powerpc/qspinlock: paravirt yield to lock owner https://git.kernel.org/powerpc/c/085f03311bcede99550e08a1f7cad41bf758b460 [08/17] powerpc/qspinlock: implement option to yield to previous node https://git.kernel.org/powerpc/c/bd48287b2cf4cd6e95576db3a94fd2a7cdf9832d [09/17] powerpc/qspinlock: allow stealing when head of queue yields https://git.kernel.org/powerpc/c/b4c3cdc1a698a2f6168768d0bed4bf062723722e [10/17] powerpc/qspinlock: allow propagation of yield CPU down the queue https://git.kernel.org/powerpc/c/28db61e207ea3890d286cff3141c1ce67346074d [11/17] powerpc/qspinlock: add ability to prod new queue head CPU https://git.kernel.org/powerpc/c/be742c573fdafcfa1752642ca1c7aaf08c258128 [12/17] powerpc/qspinlock: allow lock stealing in trylock and lock fastpath https://git.kernel.org/powerpc/c/f61ab43cc1a6146d6eef7e0713a452c3677ad13e [13/17] powerpc/qspinlock: use spin_begin/end API https://git.kernel.org/powerpc/c/71c235027ce7940434acd3f553602ad8b5d36469 [14/17] powerpc/qspinlock: reduce remote node steal spins https://git.kernel.org/powerpc/c/cc79701114154efe79663ba47d9e51aad2ed3c78 [15/17] powerpc/qspinlock: allow indefinite spinning on a preempted owner https://git.kernel.org/powerpc/c/39dfc73596b48bb50cf7e4f3f54e38427dda5b4e [16/17] powerpc/qspinlock: provide accounting and options for sleepy locks https://git.kernel.org/powerpc/c/12b459a5ebf3308e718bc1dd48acb7c4cf7f1a75 [17/17] powerpc/qspinlock: add compile-time tuning adjustments https://git.kernel.org/powerpc/c/0b2199841a7952d01a717b465df028b40b2cf3e9 cheers