The branch main has been updated by kib:

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

commit c5b19cef3609211e692d6b21abcddef877c94af7
Author:     Konstantin Belousov <k...@freebsd.org>
AuthorDate: 2024-12-06 23:51:08 +0000
Commit:     Konstantin Belousov <k...@freebsd.org>
CommitDate: 2024-12-09 03:27:44 +0000

    vm_map: wrap map->system_map checks into wrapper
    
    Reviewed by:    alc
    Sponsored by:   The FreeBSD Foundation
    Differential revision:  https://reviews.freebsd.org/D47934
---
 sys/vm/vm_fault.c   |  2 +-
 sys/vm/vm_map.c     | 49 ++++++++++++++++++++++++-------------------------
 sys/vm/vm_map.h     |  6 ++++++
 sys/vm/vm_pageout.c |  2 +-
 4 files changed, 32 insertions(+), 27 deletions(-)

diff --git a/sys/vm/vm_fault.c b/sys/vm/vm_fault.c
index 6e0415b30600..8c7fe9e37af1 100644
--- a/sys/vm/vm_fault.c
+++ b/sys/vm/vm_fault.c
@@ -1355,7 +1355,7 @@ vm_fault_getpages(struct faultstate *fs, int *behindp, 
int *aheadp)
        MPASS(status == FAULT_CONTINUE || status == FAULT_RESTART);
        if (status == FAULT_RESTART)
                return (status);
-       KASSERT(fs->vp == NULL || !fs->map->system_map,
+       KASSERT(fs->vp == NULL || !vm_map_is_system(fs->map),
            ("vm_fault: vnode-backed object mapped by system map"));
 
        /*
diff --git a/sys/vm/vm_map.c b/sys/vm/vm_map.c
index c3aa499e0dc7..f7847a244586 100644
--- a/sys/vm/vm_map.c
+++ b/sys/vm/vm_map.c
@@ -523,7 +523,7 @@ void
 _vm_map_lock(vm_map_t map, const char *file, int line)
 {
 
-       if (map->system_map)
+       if (vm_map_is_system(map))
                mtx_lock_flags_(&map->system_mtx, 0, file, line);
        else
                sx_xlock_(&map->lock, file, line);
@@ -614,7 +614,7 @@ static void
 _vm_map_assert_locked(vm_map_t map, const char *file, int line)
 {
 
-       if (map->system_map)
+       if (vm_map_is_system(map))
                mtx_assert_(&map->system_mtx, MA_OWNED, file, line);
        else
                sx_assert_(&map->lock, SA_XLOCKED, file, line);
@@ -657,7 +657,7 @@ _vm_map_unlock(vm_map_t map, const char *file, int line)
 {
 
        VM_MAP_UNLOCK_CONSISTENT(map);
-       if (map->system_map) {
+       if (vm_map_is_system(map)) {
 #ifndef UMA_USE_DMAP
                if (map == kernel_map && (map->flags & MAP_REPLENISH) != 0) {
                        uma_prealloc(kmapentzone, 1);
@@ -675,7 +675,7 @@ void
 _vm_map_lock_read(vm_map_t map, const char *file, int line)
 {
 
-       if (map->system_map)
+       if (vm_map_is_system(map))
                mtx_lock_flags_(&map->system_mtx, 0, file, line);
        else
                sx_slock_(&map->lock, file, line);
@@ -685,7 +685,7 @@ void
 _vm_map_unlock_read(vm_map_t map, const char *file, int line)
 {
 
-       if (map->system_map) {
+       if (vm_map_is_system(map)) {
                KASSERT((map->flags & MAP_REPLENISH) == 0,
                    ("%s: MAP_REPLENISH leaked", __func__));
                mtx_unlock_flags_(&map->system_mtx, 0, file, line);
@@ -700,7 +700,7 @@ _vm_map_trylock(vm_map_t map, const char *file, int line)
 {
        int error;
 
-       error = map->system_map ?
+       error = vm_map_is_system(map) ?
            !mtx_trylock_flags_(&map->system_mtx, 0, file, line) :
            !sx_try_xlock_(&map->lock, file, line);
        if (error == 0)
@@ -713,7 +713,7 @@ _vm_map_trylock_read(vm_map_t map, const char *file, int 
line)
 {
        int error;
 
-       error = map->system_map ?
+       error = vm_map_is_system(map) ?
            !mtx_trylock_flags_(&map->system_mtx, 0, file, line) :
            !sx_try_slock_(&map->lock, file, line);
        return (error == 0);
@@ -734,7 +734,7 @@ _vm_map_lock_upgrade(vm_map_t map, const char *file, int 
line)
 {
        unsigned int last_timestamp;
 
-       if (map->system_map) {
+       if (vm_map_is_system(map)) {
                mtx_assert_(&map->system_mtx, MA_OWNED, file, line);
        } else {
                if (!sx_try_upgrade_(&map->lock, file, line)) {
@@ -760,7 +760,7 @@ void
 _vm_map_lock_downgrade(vm_map_t map, const char *file, int line)
 {
 
-       if (map->system_map) {
+       if (vm_map_is_system(map)) {
                KASSERT((map->flags & MAP_REPLENISH) == 0,
                    ("%s: MAP_REPLENISH leaked", __func__));
                mtx_assert_(&map->system_mtx, MA_OWNED, file, line);
@@ -780,10 +780,9 @@ int
 vm_map_locked(vm_map_t map)
 {
 
-       if (map->system_map)
+       if (vm_map_is_system(map))
                return (mtx_owned(&map->system_mtx));
-       else
-               return (sx_xlocked(&map->lock));
+       return (sx_xlocked(&map->lock));
 }
 
 /*
@@ -806,7 +805,7 @@ _vm_map_unlock_and_wait(vm_map_t map, int timo, const char 
*file, int line)
 
        VM_MAP_UNLOCK_CONSISTENT(map);
        mtx_lock(&map_sleep_mtx);
-       if (map->system_map) {
+       if (vm_map_is_system(map)) {
                KASSERT((map->flags & MAP_REPLENISH) == 0,
                    ("%s: MAP_REPLENISH leaked", __func__));
                mtx_unlock_flags_(&map->system_mtx, 0, file, line);
@@ -864,7 +863,7 @@ vm_map_wait_busy(vm_map_t map)
        VM_MAP_ASSERT_LOCKED(map);
        while (map->busy) {
                vm_map_modflags(map, MAP_BUSY_WAKEUP, 0);
-               if (map->system_map)
+               if (vm_map_is_system(map))
                        msleep(&map->busy, &map->system_mtx, 0, "mbusy", 0);
                else
                        sx_sleep(&map->busy, &map->lock, 0, "mbusy", 0);
@@ -927,7 +926,7 @@ vm_map_init_system(vm_map_t map, pmap_t pmap, vm_offset_t 
min, vm_offset_t max)
 static void
 vm_map_entry_dispose(vm_map_t map, vm_map_entry_t entry)
 {
-       uma_zfree(map->system_map ? kmapentzone : mapentzone, entry);
+       uma_zfree(vm_map_is_system(map) ? kmapentzone : mapentzone, entry);
 }
 
 /*
@@ -961,7 +960,7 @@ vm_map_entry_create(vm_map_t map)
                }
        } else
 #endif
-       if (map->system_map) {
+       if (vm_map_is_system(map)) {
                new_entry = uma_zalloc(kmapentzone, M_NOWAIT);
        } else {
                new_entry = uma_zalloc(mapentzone, M_WAITOK);
@@ -2428,7 +2427,7 @@ vm_map_entry_charge_object(vm_map_t map, vm_map_entry_t 
entry)
        VM_MAP_ASSERT_LOCKED(map);
        KASSERT((entry->eflags & MAP_ENTRY_IS_SUB_MAP) == 0,
            ("map entry %p is a submap", entry));
-       if (entry->object.vm_object == NULL && !map->system_map &&
+       if (entry->object.vm_object == NULL && !vm_map_is_system(map) &&
            (entry->eflags & MAP_ENTRY_GUARD) == 0)
                vm_map_entry_back(entry);
        else if (entry->object.vm_object != NULL &&
@@ -2493,7 +2492,7 @@ vm_map_clip_start(vm_map_t map, vm_map_entry_t entry, 
vm_offset_t startaddr)
        vm_map_entry_t new_entry;
        int bdry_idx;
 
-       if (!map->system_map)
+       if (!vm_map_is_system(map))
                WITNESS_WARN(WARN_GIANTOK | WARN_SLEEPOK, NULL,
                    "%s: map %p entry %p start 0x%jx", __func__, map, entry,
                    (uintmax_t)startaddr);
@@ -2536,7 +2535,7 @@ vm_map_lookup_clip_start(vm_map_t map, vm_offset_t start,
        vm_map_entry_t entry;
        int rv;
 
-       if (!map->system_map)
+       if (!vm_map_is_system(map))
                WITNESS_WARN(WARN_GIANTOK | WARN_SLEEPOK, NULL,
                    "%s: map %p start 0x%jx prev %p", __func__, map,
                    (uintmax_t)start, prev_entry);
@@ -2566,7 +2565,7 @@ vm_map_clip_end(vm_map_t map, vm_map_entry_t entry, 
vm_offset_t endaddr)
        vm_map_entry_t new_entry;
        int bdry_idx;
 
-       if (!map->system_map)
+       if (!vm_map_is_system(map))
                WITNESS_WARN(WARN_GIANTOK | WARN_SLEEPOK, NULL,
                    "%s: map %p entry %p end 0x%jx", __func__, map, entry,
                    (uintmax_t)endaddr);
@@ -3936,7 +3935,7 @@ vm_map_entry_delete(vm_map_t map, vm_map_entry_t entry)
                MPASS(entry->cred == NULL);
                MPASS((entry->eflags & MAP_ENTRY_IS_SUB_MAP) == 0);
                MPASS(object == NULL);
-               vm_map_entry_deallocate(entry, map->system_map);
+               vm_map_entry_deallocate(entry, vm_map_is_system(map));
                return;
        }
 
@@ -3987,7 +3986,7 @@ vm_map_entry_delete(vm_map_t map, vm_map_entry_t entry)
                }
                VM_OBJECT_WUNLOCK(object);
        }
-       if (map->system_map)
+       if (vm_map_is_system(map))
                vm_map_entry_deallocate(entry, TRUE);
        else {
                entry->defer_next = curthread->td_map_def_user;
@@ -4710,7 +4709,7 @@ vm_map_growstack(vm_map_t map, vm_offset_t addr, 
vm_map_entry_t gap_entry)
            p->p_textvp == NULL))
                return (KERN_FAILURE);
 
-       MPASS(!map->system_map);
+       MPASS(!vm_map_is_system(map));
 
        lmemlim = lim_cur(curthread, RLIMIT_MEMLOCK);
        stacklim = lim_cur(curthread, RLIMIT_STACK);
@@ -5118,7 +5117,7 @@ RetryLookupLocked:
        /*
         * Create an object if necessary.
         */
-       if (entry->object.vm_object == NULL && !map->system_map) {
+       if (entry->object.vm_object == NULL && !vm_map_is_system(map)) {
                if (vm_map_lock_upgrade(map))
                        goto RetryLookup;
                entry->object.vm_object = vm_object_allocate_anon(atop(size),
@@ -5206,7 +5205,7 @@ vm_map_lookup_locked(vm_map_t *var_map,           /* 
IN/OUT */
        /*
         * Fail if an object should be created.
         */
-       if (entry->object.vm_object == NULL && !map->system_map)
+       if (entry->object.vm_object == NULL && !vm_map_is_system(map))
                return (KERN_FAILURE);
 
        /*
diff --git a/sys/vm/vm_map.h b/sys/vm/vm_map.h
index 5ecec0531e1c..ed1106734951 100644
--- a/sys/vm/vm_map.h
+++ b/sys/vm/vm_map.h
@@ -278,6 +278,12 @@ vm_map_range_valid(vm_map_t map, vm_offset_t start, 
vm_offset_t end)
        return (true);
 }
 
+static inline bool
+vm_map_is_system(vm_map_t map)
+{
+       return ((map->system_map));
+}
+
 #endif /* KLD_MODULE */
 #endif /* _KERNEL */
 
diff --git a/sys/vm/vm_pageout.c b/sys/vm/vm_pageout.c
index f6c5e6291692..28a54a83fd49 100644
--- a/sys/vm/vm_pageout.c
+++ b/sys/vm/vm_pageout.c
@@ -1844,7 +1844,7 @@ vm_pageout_oom_pagecount(struct vmspace *vmspace)
        long res;
 
        map = &vmspace->vm_map;
-       KASSERT(!map->system_map, ("system map"));
+       KASSERT(!vm_map_is_system(map), ("system map"));
        sx_assert(&map->lock, SA_LOCKED);
        res = 0;
        VM_MAP_ENTRY_FOREACH(entry, map) {

Reply via email to