diff options
| author | Alan Cox <alc@FreeBSD.org> | 2002-04-20 07:23:22 +0000 |
|---|---|---|
| committer | Alan Cox <alc@FreeBSD.org> | 2002-04-20 07:23:22 +0000 |
| commit | a569838764665c3655d359e414236ca8ca7e8a38 (patch) | |
| tree | ecd9967c03b704767150a51c3172dbb0ece35798 /sys/vm | |
| parent | 32eb065e64cb21aa2eec47d29d7f8356591948d1 (diff) | |
Notes
Diffstat (limited to 'sys/vm')
| -rw-r--r-- | sys/vm/vm_meter.c | 4 | ||||
| -rw-r--r-- | sys/vm/vm_object.c | 6 | ||||
| -rw-r--r-- | sys/vm/vm_object.h | 1 |
3 files changed, 10 insertions, 1 deletions
diff --git a/sys/vm/vm_meter.c b/sys/vm/vm_meter.c index fde1f49833476..935979ae017d9 100644 --- a/sys/vm/vm_meter.c +++ b/sys/vm/vm_meter.c @@ -95,8 +95,10 @@ vmtotal(SYSCTL_HANDLER_ARGS) * Mark all objects as inactive. */ GIANT_REQUIRED; + mtx_lock(&vm_object_list_mtx); TAILQ_FOREACH(object, &vm_object_list, object_list) vm_object_clear_flag(object, OBJ_ACTIVE); + mtx_unlock(&vm_object_list_mtx); /* * Calculate process statistics. */ @@ -164,6 +166,7 @@ vmtotal(SYSCTL_HANDLER_ARGS) /* * Calculate object memory usage statistics. */ + mtx_lock(&vm_object_list_mtx); TAILQ_FOREACH(object, &vm_object_list, object_list) { /* * devices, like /dev/mem, will badly skew our totals @@ -186,6 +189,7 @@ vmtotal(SYSCTL_HANDLER_ARGS) } } } + mtx_unlock(&vm_object_list_mtx); totalp->t_free = cnt.v_free_count + cnt.v_cache_count; return (sysctl_handle_opaque(oidp, totalp, sizeof total, req)); } diff --git a/sys/vm/vm_object.c b/sys/vm/vm_object.c index 37c329d85fcac..5d13cac63575e 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); diff --git a/sys/vm/vm_object.h b/sys/vm/vm_object.h index 1256e850c0630..62244a91a8f02 100644 --- a/sys/vm/vm_object.h +++ b/sys/vm/vm_object.h @@ -160,6 +160,7 @@ struct vm_object { TAILQ_HEAD(object_q, vm_object); extern struct object_q vm_object_list; /* list of allocated objects */ +extern struct mtx vm_object_list_mtx; /* lock for object list and count */ extern vm_object_t kernel_object; /* the single kernel object */ extern vm_object_t kmem_object; |
