svn commit: r325920 - head/sys/kern
Cy Schubert
Cy.Schubert at komquats.com
Fri Nov 17 07:21:24 UTC 2017
In message <201711170225.vAH2P4jY046885 at repo.freebsd.org>, Mateusz Guzik
writes
:
> Author: mjg
> Date: Fri Nov 17 02:25:04 2017
> New Revision: 325920
> URL: https://svnweb.freebsd.org/changeset/base/325920
>
> Log:
> mtx: unlock before traversing threads to wake up
>
> This shortens the lock hold time while not affecting corretness.
> All the woken up threads end up competing can lose the race against
> a completely unrelated thread getting the lock anyway.
>
> Modified:
> head/sys/kern/kern_mutex.c
>
> Modified: head/sys/kern/kern_mutex.c
> =============================================================================
> =
> --- head/sys/kern/kern_mutex.c Fri Nov 17 02:22:51 2017 (r32591
> 9)
> +++ head/sys/kern/kern_mutex.c Fri Nov 17 02:25:04 2017 (r32592
> 0)
> @@ -629,7 +629,8 @@ __mtx_lock_sleep(volatile uintptr_t *c, uintptr_t v)
> #ifdef KDTRACE_HOOKS
> sleep_time -= lockstat_nsecs(&m->lock_object);
> #endif
> - turnstile_wait(ts, mtx_owner(m), TS_EXCLUSIVE_QUEUE);
> + MPASS(owner == mtx_owner(m));
Should this be conditional when ADAPTIVE_MUTEXES is defined? Otherwise it
fails to build.
> + turnstile_wait(ts, owner, TS_EXCLUSIVE_QUEUE);
> #ifdef KDTRACE_HOOKS
> sleep_time += lockstat_nsecs(&m->lock_object);
> sleep_cnt++;
> @@ -1002,7 +1003,7 @@ __mtx_unlock_sleep(volatile uintptr_t *c)
> {
> struct mtx *m;
> struct turnstile *ts;
> - uintptr_t tid, v;
> + uintptr_t tid;
>
> if (SCHEDULER_STOPPED())
> return;
> @@ -1028,12 +1029,12 @@ __mtx_unlock_sleep(volatile uintptr_t *c)
> * can be removed from the hash list if it is empty.
> */
> turnstile_chain_lock(&m->lock_object);
> + _mtx_release_lock_quick(m);
> ts = turnstile_lookup(&m->lock_object);
> + MPASS(ts != NULL);
> if (LOCK_LOG_TEST(&m->lock_object, opts))
> CTR1(KTR_LOCK, "_mtx_unlock_sleep: %p contested", m);
> - MPASS(ts != NULL);
> turnstile_broadcast(ts, TS_EXCLUSIVE_QUEUE);
> - _mtx_release_lock_quick(m);
>
> /*
> * This turnstile is now no longer associated with the mutex. We can
>
--
Cheers,
Cy Schubert <Cy.Schubert at cschubert.com>
FreeBSD UNIX: <cy at FreeBSD.org> Web: http://www.FreeBSD.org
The need of the many outweighs the greed of the few.
More information about the svn-src-head
mailing list