summaryrefslogtreecommitdiffstats
path: root/sys/vm
diff options
context:
space:
mode:
authoralc <alc@FreeBSD.org>2010-05-06 18:58:32 +0000
committeralc <alc@FreeBSD.org>2010-05-06 18:58:32 +0000
commitfecc56fac19c93c470f79d1f557c149bd3c1e9b0 (patch)
treebd69226428af1da2a0d4fb0ab151f30836763046 /sys/vm
parentf26ccb52af3d824a0efc9843c9a039e07fcdcb8c (diff)
downloadFreeBSD-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.c4
-rw-r--r--sys/vm/sg_pager.c2
-rw-r--r--sys/vm/vm_fault.c12
-rw-r--r--sys/vm/vm_glue.c4
-rw-r--r--sys/vm/vm_object.c2
-rw-r--r--sys/vm/vnode_pager.c18
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);
OpenPOWER on IntegriCloud