diff options
author | jasone <jasone@FreeBSD.org> | 2000-10-04 01:29:17 +0000 |
---|---|---|
committer | jasone <jasone@FreeBSD.org> | 2000-10-04 01:29:17 +0000 |
commit | 4e290e67b7310d906f113850fddfdf1017a9d15b (patch) | |
tree | bae3e99c848c6e38aee34a7cf61ffa9ca55b0095 /sys/vm | |
parent | bea51a4aa1bf67a183bd1d4a6227fa891345af60 (diff) | |
download | FreeBSD-src-4e290e67b7310d906f113850fddfdf1017a9d15b.zip FreeBSD-src-4e290e67b7310d906f113850fddfdf1017a9d15b.tar.gz |
Convert lockmgr locks from using simple locks to using mutexes.
Add lockdestroy() and appropriate invocations, which corresponds to
lockinit() and must be called to clean up after a lockmgr lock is no
longer needed.
Diffstat (limited to 'sys/vm')
-rw-r--r-- | sys/vm/vm_map.c | 8 | ||||
-rw-r--r-- | sys/vm/vm_map.h | 10 |
2 files changed, 14 insertions, 4 deletions
diff --git a/sys/vm/vm_map.c b/sys/vm/vm_map.c index 4eea821..e5b50d2 100644 --- a/sys/vm/vm_map.c +++ b/sys/vm/vm_map.c @@ -215,6 +215,7 @@ vmspace_free(vm) vm_map_unlock(&vm->vm_map); pmap_release(vmspace_pmap(vm)); + vm_map_destroy(&vm->vm_map); zfree(vmspace_zone, vm); } } @@ -261,6 +262,13 @@ vm_map_init(map, min, max) lockinit(&map->lock, PVM, "thrd_sleep", 0, LK_NOPAUSE); } +void +vm_map_destroy(map) + struct vm_map *map; +{ + lockdestroy(&map->lock); +} + /* * vm_map_entry_dispose: [ internal use only ] * diff --git a/sys/vm/vm_map.h b/sys/vm/vm_map.h index f290b2c..d238488 100644 --- a/sys/vm/vm_map.h +++ b/sys/vm/vm_map.h @@ -203,6 +203,7 @@ struct vmspace { * as unbraced elements in a higher level statement. */ +/* XXX This macro is not called anywhere, and (map)->ref_lock doesn't exist. */ #define vm_map_lock_drain_interlock(map) \ do { \ lockmgr(&(map)->lock, LK_DRAIN|LK_INTERLOCK, \ @@ -290,15 +291,15 @@ _vm_map_lock_upgrade(vm_map_t map, struct proc *p) { #define vm_map_set_recursive(map) \ do { \ - simple_lock(&(map)->lock.lk_interlock); \ + mtx_enter(&(map)->lock.lk_interlock, MTX_DEF); \ (map)->lock.lk_flags |= LK_CANRECURSE; \ - simple_unlock(&(map)->lock.lk_interlock); \ + mtx_exit(&(map)->lock.lk_interlock, MTX_DEF); \ } while(0) #define vm_map_clear_recursive(map) \ do { \ - simple_lock(&(map)->lock.lk_interlock); \ + mtx_enter(&(map)->lock.lk_interlock, MTX_DEF); \ (map)->lock.lk_flags &= ~LK_CANRECURSE; \ - simple_unlock(&(map)->lock.lk_interlock); \ + mtx_exit(&(map)->lock.lk_interlock, MTX_DEF); \ } while(0) /* @@ -355,6 +356,7 @@ int vm_map_find __P((vm_map_t, vm_object_t, vm_ooffset_t, vm_offset_t *, vm_size int vm_map_findspace __P((vm_map_t, vm_offset_t, vm_size_t, vm_offset_t *)); int vm_map_inherit __P((vm_map_t, vm_offset_t, vm_offset_t, vm_inherit_t)); void vm_map_init __P((struct vm_map *, vm_offset_t, vm_offset_t)); +void vm_map_destroy __P((struct vm_map *)); int vm_map_insert __P((vm_map_t, vm_object_t, vm_ooffset_t, vm_offset_t, vm_offset_t, vm_prot_t, vm_prot_t, int)); int vm_map_lookup __P((vm_map_t *, vm_offset_t, vm_prot_t, vm_map_entry_t *, vm_object_t *, vm_pindex_t *, vm_prot_t *, boolean_t *)); |