summaryrefslogtreecommitdiffstats
path: root/sys/vm
diff options
context:
space:
mode:
authoralc <alc@FreeBSD.org>2002-07-09 18:02:03 +0000
committeralc <alc@FreeBSD.org>2002-07-09 18:02:03 +0000
commit692553edd75da36e165e4b3e89a96dfa2c91b69e (patch)
tree5857cda65f88369328b12b1409935501ea13ce68 /sys/vm
parent57bb0b6ca49cdd01098ab04fda81a87197188825 (diff)
downloadFreeBSD-src-692553edd75da36e165e4b3e89a96dfa2c91b69e.zip
FreeBSD-src-692553edd75da36e165e4b3e89a96dfa2c91b69e.tar.gz
o Lock accesses to the page queues in vm_object_terminate().
o Eliminate some unnecessary 64-bit arithmetic in vm_object_split().
Diffstat (limited to 'sys/vm')
-rw-r--r--sys/vm/vm_object.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/sys/vm/vm_object.c b/sys/vm/vm_object.c
index 1f6a2b5..da77d7f 100644
--- a/sys/vm/vm_object.c
+++ b/sys/vm/vm_object.c
@@ -590,6 +590,7 @@ vm_object_terminate(vm_object_t object)
* remove them from the object.
*/
s = splvm();
+ vm_page_lock_queues();
while ((p = TAILQ_FIRST(&object->memq)) != NULL) {
KASSERT(!p->busy && (p->flags & PG_BUSY) == 0,
("vm_object_terminate: freeing busy page %p "
@@ -603,6 +604,7 @@ vm_object_terminate(vm_object_t object)
vm_page_remove(p);
}
}
+ vm_page_unlock_queues();
splx(s);
/*
@@ -1240,7 +1242,7 @@ vm_object_split(vm_map_entry_t entry)
new_object, shadow_list);
vm_object_clear_flag(source, OBJ_ONEMAPPING);
new_object->backing_object_offset =
- orig_object->backing_object_offset + IDX_TO_OFF(offidxstart);
+ orig_object->backing_object_offset + offset;
new_object->backing_object = source;
source->shadow_count++;
source->generation++;
OpenPOWER on IntegriCloud