diff options
author | alc <alc@FreeBSD.org> | 2003-04-28 03:45:35 +0000 |
---|---|---|
committer | alc <alc@FreeBSD.org> | 2003-04-28 03:45:35 +0000 |
commit | 72d436f39acc536214c41cd8862692e290e2f31c (patch) | |
tree | 2946f2b3c5d7a731bb7189b5e1494af66484805c /sys/vm | |
parent | beff3ce21838f1b3cb0e9967a133624d62325aa4 (diff) | |
download | FreeBSD-src-72d436f39acc536214c41cd8862692e290e2f31c.zip FreeBSD-src-72d436f39acc536214c41cd8862692e290e2f31c.tar.gz |
- Define VM_OBJECT_LOCK_INIT().
- Avoid repeatedly mtx_init()ing and mtx_destroy()ing the vm_object's lock
using UMA's uminit callback, in this case, vm_object_zinit().
Diffstat (limited to 'sys/vm')
-rw-r--r-- | sys/vm/vm_object.c | 9 | ||||
-rw-r--r-- | sys/vm/vm_object.h | 2 |
2 files changed, 6 insertions, 5 deletions
diff --git a/sys/vm/vm_object.c b/sys/vm/vm_object.c index 2a79dba..8756c8e 100644 --- a/sys/vm/vm_object.c +++ b/sys/vm/vm_object.c @@ -181,6 +181,7 @@ vm_object_zinit(void *mem, int size) object = (vm_object_t)mem; bzero(&object->mtx, sizeof(object->mtx)); + VM_OBJECT_LOCK_INIT(object); /* These are true for any object that has been freed */ object->paging_in_progress = 0; @@ -193,8 +194,6 @@ _vm_object_allocate(objtype_t type, vm_pindex_t size, vm_object_t object) { int incr; - mtx_init(&object->mtx, "vm object", NULL, MTX_DEF | MTX_DUPOK); - TAILQ_INIT(&object->memq); TAILQ_INIT(&object->shadow_head); @@ -236,12 +235,15 @@ vm_object_init(void) mtx_init(&vm_object_list_mtx, "vm object_list", NULL, MTX_DEF); kernel_object = &kernel_object_store; + VM_OBJECT_LOCK_INIT(&kernel_object_store); _vm_object_allocate(OBJT_DEFAULT, OFF_TO_IDX(VM_MAX_KERNEL_ADDRESS - VM_MIN_KERNEL_ADDRESS), kernel_object); kmem_object = &kmem_object_store; + VM_OBJECT_LOCK_INIT(&kmem_object_store); _vm_object_allocate(OBJT_DEFAULT, OFF_TO_IDX(VM_MAX_KERNEL_ADDRESS - VM_MIN_KERNEL_ADDRESS), kmem_object); + obj_zone = uma_zcreate("VM OBJECT", sizeof (struct vm_object), NULL, #ifdef INVARIANTS vm_object_zdtor, @@ -612,7 +614,6 @@ vm_object_terminate(vm_object_t object) TAILQ_REMOVE(&vm_object_list, object, object_list); mtx_unlock(&vm_object_list_mtx); - mtx_destroy(&object->mtx); wakeup(object); /* @@ -1611,8 +1612,6 @@ vm_object_collapse(vm_object_t object) ); mtx_unlock(&vm_object_list_mtx); - mtx_destroy(&backing_object->mtx); - uma_zfree(obj_zone, backing_object); object_collapses++; diff --git a/sys/vm/vm_object.h b/sys/vm/vm_object.h index b7090c3..8cf9467 100644 --- a/sys/vm/vm_object.h +++ b/sys/vm/vm_object.h @@ -173,6 +173,8 @@ extern vm_object_t kmem_object; #define VM_OBJECT_LOCK(object) mtx_lock(&(object)->mtx) #define VM_OBJECT_LOCK_ASSERT(object, type) \ mtx_assert(&(object)->mtx, (type)) +#define VM_OBJECT_LOCK_INIT(object) mtx_init(&(object)->mtx, "vm object", \ + NULL, MTX_DEF | MTX_DUPOK) #define VM_OBJECT_LOCKED(object) mtx_owned(&(object)->mtx) #define VM_OBJECT_MTX(object) (&(object)->mtx) #define VM_OBJECT_UNLOCK(object) mtx_unlock(&(object)->mtx) |