Module Name: src Committed By: martin Date: Mon Jul 31 14:48:07 UTC 2023
Modified Files: src/sys/kern [netbsd-9]: kern_rwlock.c Log Message: Pull up following revision(s) (requested by riastradh in ticket #1678): sys/kern/kern_rwlock.c: revision 1.68 (patch) rwlock(9): Fix membars. rw_downgrade must be a release operation, and rw_tryupgrade must be an acquire operation. membar_producer is not enough -- need to use membar_release and membar_acquire. Discussed on tech-kern: https://mail-index.netbsd.org/tech-kern/2023/02/22/msg028726.html To generate a diff of this commit: cvs rdiff -u -r1.54.2.1 -r1.54.2.2 src/sys/kern/kern_rwlock.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_rwlock.c diff -u src/sys/kern/kern_rwlock.c:1.54.2.1 src/sys/kern/kern_rwlock.c:1.54.2.2 --- src/sys/kern/kern_rwlock.c:1.54.2.1 Mon Jul 31 14:40:04 2023 +++ src/sys/kern/kern_rwlock.c Mon Jul 31 14:48:07 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: kern_rwlock.c,v 1.54.2.1 2023/07/31 14:40:04 martin Exp $ */ +/* $NetBSD: kern_rwlock.c,v 1.54.2.2 2023/07/31 14:48:07 martin Exp $ */ /*- * Copyright (c) 2002, 2006, 2007, 2008, 2009 The NetBSD Foundation, Inc. @@ -38,7 +38,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: kern_rwlock.c,v 1.54.2.1 2023/07/31 14:40:04 martin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: kern_rwlock.c,v 1.54.2.2 2023/07/31 14:48:07 martin Exp $"); #define __RWLOCK_PRIVATE @@ -594,8 +594,7 @@ rw_downgrade(krwlock_t *rw) __USE(curthread); #endif - - membar_producer(); + membar_exit(); owner = rw->rw_owner; if ((owner & RW_HAS_WAITERS) == 0) { /* @@ -691,7 +690,7 @@ rw_tryupgrade(krwlock_t *rw) newown = curthread | RW_WRITE_LOCKED | (owner & ~RW_THREAD); next = rw_cas(rw, owner, newown); if (__predict_true(next == owner)) { - membar_producer(); + membar_enter(); /* XXX membar_acquire */ break; } }