git: ca554a7dea3f - main - dev/mem: use sx instead of rw lock

From: Konstantin Belousov <kib_at_FreeBSD.org>
Date: Sat, 05 Jul 2025 08:36:42 UTC
The branch main has been updated by kib:

URL: https://cgit.FreeBSD.org/src/commit/?id=ca554a7dea3f90f39fc2b7d25813d0be944e12e2

commit ca554a7dea3f90f39fc2b7d25813d0be944e12e2
Author:     Konstantin Belousov <kib@FreeBSD.org>
AuthorDate: 2025-06-22 16:35:23 +0000
Commit:     Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2025-07-05 08:35:53 +0000

    dev/mem: use sx instead of rw lock
    
    Some ops require sleepable context to success, like DMAP demotion.
    
    Reviewed by:    alc, markj
    Tested by:      pho
    Sponsored by:   The FreeBSD Foundation
    MFC after:      1 week
    Differential revision:  https://reviews.freebsd.org/D50970
---
 sys/dev/mem/memutil.c | 19 +++++++++----------
 1 file changed, 9 insertions(+), 10 deletions(-)

diff --git a/sys/dev/mem/memutil.c b/sys/dev/mem/memutil.c
index cf9714d6ec8f..20ce337df0ab 100644
--- a/sys/dev/mem/memutil.c
+++ b/sys/dev/mem/memutil.c
@@ -26,15 +26,14 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include <sys/param.h>
+#include <sys/systm.h>
 #include <sys/kernel.h>
 #include <sys/lock.h>
 #include <sys/malloc.h>
 #include <sys/memrange.h>
-#include <sys/rwlock.h>
-#include <sys/systm.h>
+#include <sys/sx.h>
 
-static struct rwlock	mr_lock;
+static struct sx	mr_lock;
 
 /*
  * Implementation-neutral, kernel-callable functions for manipulating
@@ -46,7 +45,7 @@ mem_range_init(void)
 
 	if (mem_range_softc.mr_op == NULL)
 		return;
-	rw_init(&mr_lock, "memrange");
+	sx_init(&mr_lock, "memrange");
 	mem_range_softc.mr_op->init(&mem_range_softc);
 }
 
@@ -56,7 +55,7 @@ mem_range_destroy(void)
 
 	if (mem_range_softc.mr_op == NULL)
 		return;
-	rw_destroy(&mr_lock);
+	sx_destroy(&mr_lock);
 }
 
 int
@@ -67,12 +66,12 @@ mem_range_attr_get(struct mem_range_desc *mrd, int *arg)
 	if (mem_range_softc.mr_op == NULL)
 		return (EOPNOTSUPP);
 	nd = *arg;
-	rw_rlock(&mr_lock);
+	sx_slock(&mr_lock);
 	if (nd == 0)
 		*arg = mem_range_softc.mr_ndesc;
 	else
 		bcopy(mem_range_softc.mr_desc, mrd, nd * sizeof(*mrd));
-	rw_runlock(&mr_lock);
+	sx_sunlock(&mr_lock);
 	return (0);
 }
 
@@ -83,8 +82,8 @@ mem_range_attr_set(struct mem_range_desc *mrd, int *arg)
 
 	if (mem_range_softc.mr_op == NULL)
 		return (EOPNOTSUPP);
-	rw_wlock(&mr_lock);
+	sx_xlock(&mr_lock);
 	ret = mem_range_softc.mr_op->set(&mem_range_softc, mrd, arg);
-	rw_wunlock(&mr_lock);
+	sx_xunlock(&mr_lock);
 	return (ret);
 }