The branch main has been updated by wulf:

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

commit 29d5f0c148059806d8f0d9e55acdd072994fa450
Author:     Vladimir Kondratyev <[email protected]>
AuthorDate: 2022-05-17 12:10:20 +0000
Commit:     Vladimir Kondratyev <[email protected]>
CommitDate: 2022-05-17 12:10:20 +0000

    LinuxKPI: Convert lkpi-shrinker lock to sx.
    
    This fixes "might_sleep() with the following non-sleepable locks held:
    exclusive sleep mutex lkpi-shrinker" warnings.
    
    MFC after:      1 week
    Reviewed by:    hselasky, manu
    Differential Revision:  https://reviews.freebsd.org/D35047
---
 sys/compat/linuxkpi/common/src/linux_shrinker.c | 21 ++++++++++-----------
 1 file changed, 10 insertions(+), 11 deletions(-)

diff --git a/sys/compat/linuxkpi/common/src/linux_shrinker.c 
b/sys/compat/linuxkpi/common/src/linux_shrinker.c
index b66316c22013..b48e491a4e2f 100644
--- a/sys/compat/linuxkpi/common/src/linux_shrinker.c
+++ b/sys/compat/linuxkpi/common/src/linux_shrinker.c
@@ -34,13 +34,13 @@ __FBSDID("$FreeBSD$");
 #include <sys/kernel.h>
 #include <sys/queue.h>
 #include <sys/eventhandler.h>
-#include <sys/mutex.h>
+#include <sys/sx.h>
 
 #include <linux/compat.h>
 #include <linux/shrinker.h>
 
 TAILQ_HEAD(, shrinker) lkpi_shrinkers = TAILQ_HEAD_INITIALIZER(lkpi_shrinkers);
-static struct mtx mtx_shrinker;
+static struct sx sx_shrinker;
 
 int
 linuxkpi_register_shrinker(struct shrinker *s)
@@ -49,9 +49,9 @@ linuxkpi_register_shrinker(struct shrinker *s)
        KASSERT(s != NULL, ("NULL shrinker"));
        KASSERT(s->count_objects != NULL, ("NULL shrinker"));
        KASSERT(s->scan_objects != NULL, ("NULL shrinker"));
-       mtx_lock(&mtx_shrinker);
+       sx_xlock(&sx_shrinker);
        TAILQ_INSERT_TAIL(&lkpi_shrinkers, s, next);
-       mtx_unlock(&mtx_shrinker);
+       sx_xunlock(&sx_shrinker);
        return (0);
 }
 
@@ -59,9 +59,9 @@ void
 linuxkpi_unregister_shrinker(struct shrinker *s)
 {
 
-       mtx_lock(&mtx_shrinker);
+       sx_xlock(&sx_shrinker);
        TAILQ_REMOVE(&lkpi_shrinkers, s, next);
-       mtx_unlock(&mtx_shrinker);
+       sx_xunlock(&sx_shrinker);
 }
 
 #define        SHRINKER_BATCH  512
@@ -94,12 +94,11 @@ linuxkpi_vm_lowmem(void *arg __unused)
 {
        struct shrinker *s;
 
-       linux_set_current(curthread);
-       mtx_lock(&mtx_shrinker);
+       sx_xlock(&sx_shrinker);
        TAILQ_FOREACH(s, &lkpi_shrinkers, next) {
                shrinker_shrink(s);
        }
-       mtx_unlock(&mtx_shrinker);
+       sx_xunlock(&sx_shrinker);
 }
 
 static eventhandler_tag lowmem_tag;
@@ -108,7 +107,7 @@ static void
 linuxkpi_sysinit_shrinker(void *arg __unused)
 {
 
-       mtx_init(&mtx_shrinker, "lkpi-shrinker", NULL, MTX_DEF);
+       sx_init(&sx_shrinker, "lkpi-shrinker");
        lowmem_tag = EVENTHANDLER_REGISTER(vm_lowmem, linuxkpi_vm_lowmem,
            NULL, EVENTHANDLER_PRI_FIRST);
 }
@@ -117,7 +116,7 @@ static void
 linuxkpi_sysuninit_shrinker(void *arg __unused)
 {
 
-       mtx_destroy(&mtx_shrinker);
+       sx_destroy(&sx_shrinker);
        EVENTHANDLER_DEREGISTER(vm_lowmem, lowmem_tag);
 }
 

Reply via email to