diff options
author | alc <alc@FreeBSD.org> | 2003-04-21 06:33:52 +0000 |
---|---|---|
committer | alc <alc@FreeBSD.org> | 2003-04-21 06:33:52 +0000 |
commit | 134bc2259f1501018c4ac5a44240271b9de953a9 (patch) | |
tree | b158f900820e1744cedbe4459ed3af6f2421fcd1 /sys/vm | |
parent | 037b7ed6756daa719b5a4bd2ed504620694c0342 (diff) | |
download | FreeBSD-src-134bc2259f1501018c4ac5a44240271b9de953a9.zip FreeBSD-src-134bc2259f1501018c4ac5a44240271b9de953a9.tar.gz |
- Assert that the vm_object is locked in vm_object_clear_flag(),
vm_object_pip_add() and vm_object_pip_wakeup().
- Remove GIANT_REQUIRED from vm_object_pip_subtract() and
vm_object_pip_subtract().
- Lock the vm_object when performing vm_object_page_remove().
Diffstat (limited to 'sys/vm')
-rw-r--r-- | sys/vm/vm_object.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/sys/vm/vm_object.c b/sys/vm/vm_object.c index d583849..1baf834 100644 --- a/sys/vm/vm_object.c +++ b/sys/vm/vm_object.c @@ -261,7 +261,7 @@ void vm_object_clear_flag(vm_object_t object, u_short bits) { - mtx_assert(object == kmem_object ? &object->mtx : &Giant, MA_OWNED); + VM_OBJECT_LOCK_ASSERT(object, MA_OWNED); object->flags &= ~bits; } @@ -269,14 +269,14 @@ void vm_object_pip_add(vm_object_t object, short i) { - mtx_assert(object == kmem_object ? &object->mtx : &Giant, MA_OWNED); + VM_OBJECT_LOCK_ASSERT(object, MA_OWNED); object->paging_in_progress += i; } void vm_object_pip_subtract(vm_object_t object, short i) { - GIANT_REQUIRED; + VM_OBJECT_LOCK_ASSERT(object, MA_OWNED); object->paging_in_progress -= i; } @@ -285,7 +285,7 @@ void vm_object_pip_wakeup(vm_object_t object) { - mtx_assert(object == kmem_object ? &object->mtx : &Giant, MA_OWNED); + VM_OBJECT_LOCK_ASSERT(object, MA_OWNED); object->paging_in_progress--; if ((object->flags & OBJ_PIPWNT) && object->paging_in_progress == 0) { vm_object_clear_flag(object, OBJ_PIPWNT); @@ -296,7 +296,7 @@ vm_object_pip_wakeup(vm_object_t object) void vm_object_pip_wakeupn(vm_object_t object, short i) { - GIANT_REQUIRED; + VM_OBJECT_LOCK_ASSERT(object, MA_OWNED); if (i) object->paging_in_progress -= i; @@ -1797,9 +1797,11 @@ vm_object_coalesce(vm_object_t prev_object, vm_pindex_t prev_pindex, * deallocation. */ if (next_pindex < prev_object->size) { + VM_OBJECT_LOCK(prev_object); vm_object_page_remove(prev_object, next_pindex, next_pindex + next_size, FALSE); + VM_OBJECT_UNLOCK(prev_object); if (prev_object->type == OBJT_SWAP) swap_pager_freespace(prev_object, next_pindex, next_size); |