Improve spinning in mtx_enter().
authorbluhm <bluhm@openbsd.org>
Tue, 26 Mar 2024 18:18:30 +0000 (18:18 +0000)
committerbluhm <bluhm@openbsd.org>
Tue, 26 Mar 2024 18:18:30 +0000 (18:18 +0000)
commit55c63681fc0c76278cd2b515f4696a742954c980
treed18126a2245d01ba540422b9b0c409416e55fc1b
parent21c3ae38122e1d434e1fd93d65303cc3c0785470
Improve spinning in mtx_enter().

Instead of calling mtx_enter_try() in each spinning loop, do it
only if the result of a lockless read indicates that the mutex has
been released.  This avoids some expensive atomic compare-and-swap
operations.  Up to 5% reduction of spinning time during kernel build
can been seen on a 8 core amd64 machine.  On other machines there
was no visible effect.

Test on powerpc64 has revealed a bug in mtx_owner declaration.  Not
the variable was volatile, but the object it points to.  Move the
volatile declaration in struct mutex to avoid a hang when going to
multiuser.

from Mateusz Guzik; input kettenis@ jca@; OK mpi@
sys/kern/kern_lock.c
sys/sys/mutex.h