Module Name: src Committed By: ad Date: Tue Jan 7 13:44:23 UTC 2020
Modified Files: src/sys/arch/hppa/include: mutex.h src/sys/kern: kern_mutex.c Log Message: hppa has custom adaptive mutexes. Allow it to build again while not reintroducing the main read of mtx_owner that I wanted to eliminate. To generate a diff of this commit: cvs rdiff -u -r1.14 -r1.15 src/sys/arch/hppa/include/mutex.h cvs rdiff -u -r1.87 -r1.88 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/arch/hppa/include/mutex.h diff -u src/sys/arch/hppa/include/mutex.h:1.14 src/sys/arch/hppa/include/mutex.h:1.15 --- src/sys/arch/hppa/include/mutex.h:1.14 Fri Nov 29 20:05:29 2019 +++ src/sys/arch/hppa/include/mutex.h Tue Jan 7 13:44:23 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: mutex.h,v 1.14 2019/11/29 20:05:29 riastradh Exp $ */ +/* $NetBSD: mutex.h,v 1.15 2020/01/07 13:44:23 ad Exp $ */ /*- * Copyright (c) 2002, 2007 The NetBSD Foundation, Inc. @@ -141,15 +141,15 @@ MUTEX_DEBUG_P(const volatile struct kmut } static inline int -MUTEX_SPIN_P(const volatile struct kmutex *mtx) +MUTEX_SPIN_P(const uintptr_t owner) { - return mtx->mtx_owner == MUTEX_SPIN_FLAG; + return owner == MUTEX_SPIN_FLAG; } static inline int -MUTEX_ADAPTIVE_P(const volatile struct kmutex *mtx) +MUTEX_ADAPTIVE_P(const uintptr_t owner) { - return mtx->mtx_owner != MUTEX_SPIN_FLAG; + return owner != MUTEX_SPIN_FLAG; } /* Acquire an adaptive mutex */ Index: src/sys/kern/kern_mutex.c diff -u src/sys/kern/kern_mutex.c:1.87 src/sys/kern/kern_mutex.c:1.88 --- src/sys/kern/kern_mutex.c:1.87 Mon Jan 6 11:12:55 2020 +++ src/sys/kern/kern_mutex.c Tue Jan 7 13:44:23 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: kern_mutex.c,v 1.87 2020/01/06 11:12:55 ad Exp $ */ +/* $NetBSD: kern_mutex.c,v 1.88 2020/01/07 13:44:23 ad 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.87 2020/01/06 11:12:55 ad Exp $"); +__KERNEL_RCSID(0, "$NetBSD: kern_mutex.c,v 1.88 2020/01/07 13:44:23 ad Exp $"); #include <sys/param.h> #include <sys/atomic.h> @@ -186,8 +186,8 @@ do { \ #define MUTEX_OWNER(owner) \ (owner & MUTEX_THREAD) -#define MUTEX_HAS_WAITERS(owner) \ - ((owner & MUTEX_BIT_WAITERS) != 0) +#define MUTEX_HAS_WAITERS(mtx) \ + (((int)(mtx)->mtx_owner & MUTEX_BIT_WAITERS) != 0) #define MUTEX_INITIALIZE_ADAPTIVE(mtx, dodebug) \ do { \ @@ -313,7 +313,7 @@ mutex_dump(const volatile void *cookie, uintptr_t owner = mtx->mtx_owner; pr("owner field : %#018lx wait/spin: %16d/%d\n", - (long)MUTEX_OWNER(owner), MUTEX_HAS_WAITERS(owner), + (long)MUTEX_OWNER(owner), MUTEX_HAS_WAITERS(mtx), MUTEX_SPIN_P(owner)); } @@ -385,7 +385,7 @@ mutex_destroy(kmutex_t *mtx) if (MUTEX_ADAPTIVE_P(owner)) { MUTEX_ASSERT(mtx, !MUTEX_OWNED(owner) && - !MUTEX_HAS_WAITERS(owner)); + !MUTEX_HAS_WAITERS(mtx)); } else { MUTEX_ASSERT(mtx, !MUTEX_SPINBIT_LOCKED_P(mtx)); } @@ -677,9 +677,9 @@ mutex_vector_enter(kmutex_t *mtx) continue; } membar_consumer(); - owner = mtx->mtx_owner; - if (!MUTEX_HAS_WAITERS(owner)) { + if (!MUTEX_HAS_WAITERS(mtx)) { turnstile_exit(mtx); + owner = mtx->mtx_owner; continue; } #endif /* MULTIPROCESSOR */ @@ -757,7 +757,7 @@ mutex_vector_exit(kmutex_t *mtx) */ { int s = splhigh(); - if (!MUTEX_HAS_WAITERS(mtx->mtx_owner)) { + if (!MUTEX_HAS_WAITERS(mtx)) { MUTEX_RELEASE(mtx); splx(s); return;