diff options
author | alc <alc@FreeBSD.org> | 2003-04-26 18:33:18 +0000 |
---|---|---|
committer | alc <alc@FreeBSD.org> | 2003-04-26 18:33:18 +0000 |
commit | 373b18b5c3e31cb4f3cb8521afee7c1c65ef6143 (patch) | |
tree | 4ade157b5f3c66ff8728aec9733627e223572d47 /sys/vm/vm_object.c | |
parent | 2b96da3888be4bbee530605fb5c59983451840bd (diff) | |
download | FreeBSD-src-373b18b5c3e31cb4f3cb8521afee7c1c65ef6143.zip FreeBSD-src-373b18b5c3e31cb4f3cb8521afee7c1c65ef6143.tar.gz |
- Convert vm_object_pip_wait() from using tsleep() to msleep().
- Make vm_object_pip_sleep() static.
- Lock the vm_object when performing vm_object_pip_wait().
Diffstat (limited to 'sys/vm/vm_object.c')
-rw-r--r-- | sys/vm/vm_object.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/sys/vm/vm_object.c b/sys/vm/vm_object.c index 7aa399a..944d033 100644 --- a/sys/vm/vm_object.c +++ b/sys/vm/vm_object.c @@ -109,6 +109,7 @@ SYSCTL_INT(_vm, OID_AUTO, msync_flush_flags, static void vm_object_qcollapse(vm_object_t object); static int vm_object_page_collect_flush(vm_object_t object, vm_page_t p, int curgeneration, int pagerflags); +static void vm_object_pip_sleep(vm_object_t object, char *waitid); /* * Virtual memory objects maintain the actual data @@ -306,7 +307,7 @@ vm_object_pip_wakeupn(vm_object_t object, short i) } } -void +static void vm_object_pip_sleep(vm_object_t object, char *waitid) { GIANT_REQUIRED; @@ -323,9 +324,12 @@ vm_object_pip_sleep(vm_object_t object, char *waitid) void vm_object_pip_wait(vm_object_t object, char *waitid) { - GIANT_REQUIRED; - while (object->paging_in_progress) - vm_object_pip_sleep(object, waitid); + + VM_OBJECT_LOCK_ASSERT(object, MA_OWNED); + while (object->paging_in_progress) { + object->flags |= OBJ_PIPWNT; + msleep(object, VM_OBJECT_MTX(object), PVM, waitid, 0); + } } /* @@ -537,12 +541,12 @@ vm_object_terminate(vm_object_t object) */ VM_OBJECT_LOCK(object); vm_object_set_flag(object, OBJ_DEAD); - VM_OBJECT_UNLOCK(object); /* * wait for the pageout daemon to be done with the object */ vm_object_pip_wait(object, "objtrm"); + VM_OBJECT_UNLOCK(object); KASSERT(!object->paging_in_progress, ("vm_object_terminate: pageout in progress")); |