diff options
author | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2025-02-12 01:58:53 +0100 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2025-02-12 02:11:11 +0100 |
commit | ea5ef1b6706dae31b6dc7083d341fda6818d4391 (patch) | |
tree | ac840ef454118f5755ba9ccb1f10e5f04c22ed2c /vm/vm_object.c | |
parent | b163e2a6181c805bb2369458203a6af23bf4669e (diff) |
vm: Add and use vm_object_lock_taken, vm_object_cache_locked, vm_page_locked_queues
to check locking
Diffstat (limited to 'vm/vm_object.c')
-rw-r--r-- | vm/vm_object.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/vm/vm_object.c b/vm/vm_object.c index 9a46149b..a144f348 100644 --- a/vm/vm_object.c +++ b/vm/vm_object.c @@ -191,6 +191,8 @@ def_simple_lock_data(static,vm_object_cached_lock_data) simple_lock_try(&vm_object_cached_lock_data) #define vm_object_cache_unlock() \ simple_unlock(&vm_object_cached_lock_data) +#define vm_object_cache_locked() \ + simple_lock_taken(&vm_object_cached_lock_data) /* * Number of physical pages referenced by cached objects. @@ -359,6 +361,9 @@ void vm_object_init(void) static void vm_object_cache_add( vm_object_t object) { + assert(vm_object_lock_taken(object)); + assert(vm_object_cache_locked()); + assert(!object->cached); queue_enter(&vm_object_cached_list, object, vm_object_t, cached_list); object->cached = TRUE; @@ -367,6 +372,9 @@ static void vm_object_cache_add( static void vm_object_cache_remove( vm_object_t object) { + assert(vm_object_lock_taken(object)); + assert(vm_object_cache_locked()); + assert(object->cached); queue_remove(&vm_object_cached_list, object, vm_object_t, cached_list); object->cached = FALSE; @@ -529,6 +537,9 @@ void vm_object_terminate( vm_page_t p; vm_object_t shadow_object; + assert(vm_object_lock_taken(object)); + assert(vm_object_cache_locked()); + /* * Make sure the object isn't already being terminated */ @@ -732,6 +743,8 @@ static void vm_object_abort_activity( vm_page_t p; vm_page_t next; + assert(vm_object_lock_taken(object)); + /* * Abort all activity that would be waiting * for a result on this memory object. @@ -1031,6 +1044,8 @@ kern_return_t vm_object_copy_slowly( vm_object_t new_object; vm_offset_t new_offset; + assert(vm_object_lock_taken(src_object)); + if (size == 0) { vm_object_unlock(src_object); *_result_object = VM_OBJECT_NULL; @@ -1304,6 +1319,8 @@ static kern_return_t vm_object_copy_call( vm_object_t new_object; vm_page_t p; + assert(vm_object_lock_taken(src_object)); + /* * Create a memory object port to be associated * with this new vm_object. @@ -2155,6 +2172,8 @@ void vm_object_pager_create( { ipc_port_t pager; + assert(vm_object_lock_taken(object)); + if (object->pager_created) { /* * Someone else got to it first... @@ -2249,6 +2268,8 @@ void vm_object_remove( { ipc_port_t port; + assert(vm_object_cache_locked()); + if ((port = object->pager) != IP_NULL) { if (ip_kotype(port) == IKOT_PAGER) ipc_kobject_set(port, IKO_NULL, @@ -2304,6 +2325,8 @@ void vm_object_collapse( vm_page_t p, pp; ipc_port_t old_name_port; + assert(vm_object_lock_taken(object)); + if (!vm_object_collapse_allowed) return; @@ -2654,6 +2677,8 @@ void vm_object_page_remove( { vm_page_t p, next; + assert(vm_object_lock_taken(object)); + /* * One and two page removals are most popular. * The factor of 16 here is somewhat arbitrary. |