diff options
author | alc <alc@FreeBSD.org> | 2010-05-06 18:58:32 +0000 |
---|---|---|
committer | alc <alc@FreeBSD.org> | 2010-05-06 18:58:32 +0000 |
commit | fecc56fac19c93c470f79d1f557c149bd3c1e9b0 (patch) | |
tree | bd69226428af1da2a0d4fb0ab151f30836763046 /sys/vm | |
parent | f26ccb52af3d824a0efc9843c9a039e07fcdcb8c (diff) | |
download | FreeBSD-src-fecc56fac19c93c470f79d1f557c149bd3c1e9b0.zip FreeBSD-src-fecc56fac19c93c470f79d1f557c149bd3c1e9b0.tar.gz |
Eliminate page queues locking around most calls to vm_page_free().
Diffstat (limited to 'sys/vm')
-rw-r--r-- | sys/vm/device_pager.c | 4 | ||||
-rw-r--r-- | sys/vm/sg_pager.c | 2 | ||||
-rw-r--r-- | sys/vm/vm_fault.c | 12 | ||||
-rw-r--r-- | sys/vm/vm_glue.c | 4 | ||||
-rw-r--r-- | sys/vm/vm_object.c | 2 | ||||
-rw-r--r-- | sys/vm/vnode_pager.c | 18 |
6 files changed, 1 insertions, 41 deletions
diff --git a/sys/vm/device_pager.c b/sys/vm/device_pager.c index 996f740..7d8d361 100644 --- a/sys/vm/device_pager.c +++ b/sys/vm/device_pager.c @@ -255,9 +255,7 @@ dev_pager_getpages(object, m, count, reqpage) for (i = 0; i < count; i++) { if (i != reqpage) { vm_page_lock(m[i]); - vm_page_lock_queues(); vm_page_free(m[i]); - vm_page_unlock_queues(); vm_page_unlock(m[i]); } } @@ -272,9 +270,7 @@ dev_pager_getpages(object, m, count, reqpage) TAILQ_INSERT_TAIL(&object->un_pager.devp.devp_pglist, page, pageq); for (i = 0; i < count; i++) { vm_page_lock(m[i]); - vm_page_lock_queues(); vm_page_free(m[i]); - vm_page_unlock_queues(); vm_page_unlock(m[i]); } vm_page_insert(page, object, offset); diff --git a/sys/vm/sg_pager.c b/sys/vm/sg_pager.c index 845401a..a7b3736 100644 --- a/sys/vm/sg_pager.c +++ b/sys/vm/sg_pager.c @@ -200,9 +200,7 @@ sg_pager_getpages(vm_object_t object, vm_page_t *m, int count, int reqpage) /* Free the original pages and insert this fake page into the object. */ for (i = 0; i < count; i++) { vm_page_lock(m[i]); - vm_page_lock_queues(); vm_page_free(m[i]); - vm_page_unlock_queues(); vm_page_unlock(m[i]); } vm_page_insert(page, object, offset); diff --git a/sys/vm/vm_fault.c b/sys/vm/vm_fault.c index 2978f7f..ae1ee29 100644 --- a/sys/vm/vm_fault.c +++ b/sys/vm/vm_fault.c @@ -164,9 +164,7 @@ unlock_and_deallocate(struct faultstate *fs) if (fs->object != fs->first_object) { VM_OBJECT_LOCK(fs->first_object); vm_page_lock(fs->first_m); - vm_page_lock_queues(); vm_page_free(fs->first_m); - vm_page_unlock_queues(); vm_page_unlock(fs->first_m); vm_object_pip_wakeup(fs->first_object); VM_OBJECT_UNLOCK(fs->first_object); @@ -348,9 +346,7 @@ RetryFault:; if (fs.object != fs.first_object) { VM_OBJECT_LOCK(fs.first_object); vm_page_lock(fs.first_m); - vm_page_lock_queues(); vm_page_free(fs.first_m); - vm_page_unlock_queues(); vm_page_unlock(fs.first_m); vm_object_pip_wakeup(fs.first_object); VM_OBJECT_UNLOCK(fs.first_object); @@ -638,9 +634,7 @@ vnode_locked: if (((fs.map != kernel_map) && (rv == VM_PAGER_ERROR)) || (rv == VM_PAGER_BAD)) { vm_page_lock(fs.m); - vm_page_lock_queues(); vm_page_free(fs.m); - vm_page_unlock_queues(); vm_page_unlock(fs.m); fs.m = NULL; unlock_and_deallocate(&fs); @@ -648,9 +642,7 @@ vnode_locked: } if (fs.object != fs.first_object) { vm_page_lock(fs.m); - vm_page_lock_queues(); vm_page_free(fs.m); - vm_page_unlock_queues(); vm_page_unlock(fs.m); fs.m = NULL; /* @@ -764,13 +756,11 @@ vnode_locked: * We don't chase down the shadow chain */ fs.object == fs.first_object->backing_object) { - vm_page_lock(fs.first_m); - vm_page_lock_queues(); /* * get rid of the unnecessary page */ + vm_page_lock(fs.first_m); vm_page_free(fs.first_m); - vm_page_unlock_queues(); vm_page_unlock(fs.first_m); /* * grab the page and put it into the diff --git a/sys/vm/vm_glue.c b/sys/vm/vm_glue.c index f86212f..0b9d92a 100644 --- a/sys/vm/vm_glue.c +++ b/sys/vm/vm_glue.c @@ -258,9 +258,7 @@ vm_imgact_hold_page(vm_object_t object, vm_ooffset_t offset) goto out; if (rv != VM_PAGER_OK) { vm_page_lock(m); - vm_page_lock_queues(); vm_page_free(m); - vm_page_unlock_queues(); vm_page_unlock(m); m = NULL; goto out; @@ -437,10 +435,8 @@ vm_thread_stack_dispose(vm_object_t ksobj, vm_offset_t ks, int pages) if (m == NULL) panic("vm_thread_dispose: kstack already missing?"); vm_page_lock(m); - vm_page_lock_queues(); vm_page_unwire(m, 0); vm_page_free(m); - vm_page_unlock_queues(); vm_page_unlock(m); } VM_OBJECT_UNLOCK(ksobj); diff --git a/sys/vm/vm_object.c b/sys/vm/vm_object.c index f8c50bc..3986d14 100644 --- a/sys/vm/vm_object.c +++ b/sys/vm/vm_object.c @@ -2046,9 +2046,7 @@ vm_object_populate(vm_object_t object, vm_pindex_t start, vm_pindex_t end) break; if (rv != VM_PAGER_OK) { vm_page_lock(m); - vm_page_lock_queues(); vm_page_free(m); - vm_page_unlock_queues(); vm_page_unlock(m); break; } diff --git a/sys/vm/vnode_pager.c b/sys/vm/vnode_pager.c index eb21c60..69fd5d1 100644 --- a/sys/vm/vnode_pager.c +++ b/sys/vm/vnode_pager.c @@ -725,9 +725,7 @@ vnode_pager_generic_getpages(vp, m, bytecount, reqpage) for (i = 0; i < count; i++) if (i != reqpage) { vm_page_lock(m[i]); - vm_page_lock_queues(); vm_page_free(m[i]); - vm_page_unlock_queues(); vm_page_unlock(m[i]); } PCPU_INC(cnt.v_vnodein); @@ -740,9 +738,7 @@ vnode_pager_generic_getpages(vp, m, bytecount, reqpage) for (i = 0; i < count; i++) if (i != reqpage) { vm_page_lock(m[i]); - vm_page_lock_queues(); vm_page_free(m[i]); - vm_page_unlock_queues(); vm_page_unlock(m[i]); } VM_OBJECT_UNLOCK(object); @@ -759,9 +755,7 @@ vnode_pager_generic_getpages(vp, m, bytecount, reqpage) for (i = 0; i < count; i++) if (i != reqpage) { vm_page_lock(m[i]); - vm_page_lock_queues(); vm_page_free(m[i]); - vm_page_unlock_queues(); vm_page_unlock(m[i]); } VM_OBJECT_UNLOCK(object); @@ -780,9 +774,7 @@ vnode_pager_generic_getpages(vp, m, bytecount, reqpage) for (i = 0; i < count; i++) if (i != reqpage) { vm_page_lock(m[i]); - vm_page_lock_queues(); vm_page_free(m[i]); - vm_page_unlock_queues(); vm_page_unlock(m[i]); } VM_OBJECT_UNLOCK(object); @@ -795,9 +787,7 @@ vnode_pager_generic_getpages(vp, m, bytecount, reqpage) for (i = 0; i < count; i++) if (i != reqpage) { vm_page_lock(m[i]); - vm_page_lock_queues(); vm_page_free(m[i]); - vm_page_unlock_queues(); vm_page_unlock(m[i]); } VM_OBJECT_UNLOCK(object); @@ -821,9 +811,7 @@ vnode_pager_generic_getpages(vp, m, bytecount, reqpage) for (; i < count; i++) if (i != reqpage) { vm_page_lock(m[i]); - vm_page_lock_queues(); vm_page_free(m[i]); - vm_page_unlock_queues(); vm_page_unlock(m[i]); } VM_OBJECT_UNLOCK(object); @@ -840,9 +828,7 @@ vnode_pager_generic_getpages(vp, m, bytecount, reqpage) (uintmax_t)object->un_pager.vnp.vnp_size); } vm_page_lock(m[i]); - vm_page_lock_queues(); vm_page_free(m[i]); - vm_page_unlock_queues(); vm_page_unlock(m[i]); VM_OBJECT_UNLOCK(object); runend = i + 1; @@ -854,9 +840,7 @@ vnode_pager_generic_getpages(vp, m, bytecount, reqpage) VM_OBJECT_LOCK(object); for (j = i; j < runend; j++) { vm_page_lock(m[j]); - vm_page_lock_queues(); vm_page_free(m[j]); - vm_page_unlock_queues(); vm_page_unlock(m[j]); } VM_OBJECT_UNLOCK(object); @@ -865,9 +849,7 @@ vnode_pager_generic_getpages(vp, m, bytecount, reqpage) VM_OBJECT_LOCK(object); for (i = first + runpg; i < count; i++) { vm_page_lock(m[i]); - vm_page_lock_queues(); vm_page_free(m[i]); - vm_page_unlock_queues(); vm_page_unlock(m[i]); } VM_OBJECT_UNLOCK(object); |