diff options
author | alc <alc@FreeBSD.org> | 2002-04-20 07:23:22 +0000 |
---|---|---|
committer | alc <alc@FreeBSD.org> | 2002-04-20 07:23:22 +0000 |
commit | 80bca30405c2a08b4b1b4e7f4a6d13771870dc98 (patch) | |
tree | ecd9967c03b704767150a51c3172dbb0ece35798 /sys/vm/vm_object.c | |
parent | 4c135df5a2fa28715ba1c65b9499d9ab8d2f808d (diff) | |
download | FreeBSD-src-80bca30405c2a08b4b1b4e7f4a6d13771870dc98.zip FreeBSD-src-80bca30405c2a08b4b1b4e7f4a6d13771870dc98.tar.gz |
Reintroduce locking on accesses to vm_object_list.
Diffstat (limited to 'sys/vm/vm_object.c')
-rw-r--r-- | sys/vm/vm_object.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/sys/vm/vm_object.c b/sys/vm/vm_object.c index 37c329d..5d13cac 100644 --- a/sys/vm/vm_object.c +++ b/sys/vm/vm_object.c @@ -137,7 +137,7 @@ static int vm_object_page_collect_flush(vm_object_t object, vm_page_t p, int cur */ struct object_q vm_object_list; -static struct mtx vm_object_list_mtx; /* lock for object list and count */ +struct mtx vm_object_list_mtx; /* lock for object list and count */ vm_object_t kernel_object; vm_object_t kmem_object; static struct vm_object kernel_object_store; @@ -222,7 +222,9 @@ _vm_object_allocate(objtype_t type, vm_size_t size, vm_object_t object) object->generation++; + mtx_lock(&vm_object_list_mtx); TAILQ_INSERT_TAIL(&vm_object_list, object, object_list); + mtx_unlock(&vm_object_list_mtx); object_hash_rand = object->hash_rand; } @@ -1511,11 +1513,13 @@ vm_object_collapse(vm_object_t object) KASSERT(backing_object->ref_count == 1, ("backing_object %p was somehow re-referenced during collapse!", backing_object)); KASSERT(TAILQ_FIRST(&backing_object->memq) == NULL, ("backing_object %p somehow has left over pages during collapse!", backing_object)); + mtx_lock(&vm_object_list_mtx); TAILQ_REMOVE( &vm_object_list, backing_object, object_list ); + mtx_unlock(&vm_object_list_mtx); uma_zfree(obj_zone, backing_object); |