Module Name: src Committed By: riastradh Date: Sat Apr 9 23:46:10 UTC 2022
Modified Files: src/sys/kern: kern_mutex.c Log Message: mutex(9): Convert to membar_acquire/release. Except for setting the waiters bit -- not sure if this is actually required to be store-before-load/store. Seems unlikely -- surely we'd have seen some serious bug by now if not, because membar_enter has failed to guarantee that on x86! -- but I'm leaving it for now until I have time to think enough about it to be sure one way or another. To generate a diff of this commit: cvs rdiff -u -r1.98 -r1.99 src/sys/kern/kern_mutex.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/kern/kern_mutex.c diff -u src/sys/kern/kern_mutex.c:1.98 src/sys/kern/kern_mutex.c:1.99 --- src/sys/kern/kern_mutex.c:1.98 Wed Aug 25 04:13:42 2021 +++ src/sys/kern/kern_mutex.c Sat Apr 9 23:46:10 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: kern_mutex.c,v 1.98 2021/08/25 04:13:42 thorpej Exp $ */ +/* $NetBSD: kern_mutex.c,v 1.99 2022/04/09 23:46:10 riastradh Exp $ */ /*- * Copyright (c) 2002, 2006, 2007, 2008, 2019 The NetBSD Foundation, Inc. @@ -40,7 +40,7 @@ #define __MUTEX_PRIVATE #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: kern_mutex.c,v 1.98 2021/08/25 04:13:42 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: kern_mutex.c,v 1.99 2022/04/09 23:46:10 riastradh Exp $"); #include <sys/param.h> #include <sys/atomic.h> @@ -169,10 +169,12 @@ do { \ */ #ifdef __HAVE_ATOMIC_AS_MEMBAR #define MUTEX_MEMBAR_ENTER() -#define MUTEX_MEMBAR_EXIT() +#define MUTEX_MEMBAR_ACQUIRE() +#define MUTEX_MEMBAR_RELEASE() #else #define MUTEX_MEMBAR_ENTER() membar_enter() -#define MUTEX_MEMBAR_EXIT() membar_exit() +#define MUTEX_MEMBAR_ACQUIRE() membar_acquire() +#define MUTEX_MEMBAR_RELEASE() membar_release() #endif /* @@ -238,7 +240,7 @@ MUTEX_ACQUIRE(kmutex_t *mtx, uintptr_t c MUTEX_INHERITDEBUG(oldown, mtx->mtx_owner); MUTEX_INHERITDEBUG(newown, oldown); rv = MUTEX_CAS(&mtx->mtx_owner, oldown, newown); - MUTEX_MEMBAR_ENTER(); + MUTEX_MEMBAR_ACQUIRE(); return rv; } @@ -256,7 +258,7 @@ MUTEX_RELEASE(kmutex_t *mtx) { uintptr_t newown; - MUTEX_MEMBAR_EXIT(); + MUTEX_MEMBAR_RELEASE(); newown = 0; MUTEX_INHERITDEBUG(newown, mtx->mtx_owner); mtx->mtx_owner = newown;