summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_subr.c
diff options
context:
space:
mode:
authoralc <alc@FreeBSD.org>2003-06-09 19:23:03 +0000
committeralc <alc@FreeBSD.org>2003-06-09 19:23:03 +0000
commit00063a54b272457d9f09f859f5ab2ae9c21a3cf8 (patch)
tree5e7fd086fb9ac7f1ce03f2d36ca113c353c9e1d3 /sys/kern/kern_subr.c
parentf41e5c9c45b4a13abcc0770af2caced3f123112e (diff)
downloadFreeBSD-src-00063a54b272457d9f09f859f5ab2ae9c21a3cf8.zip
FreeBSD-src-00063a54b272457d9f09f859f5ab2ae9c21a3cf8.tar.gz
- Add vm object locking to vm_pgmoveco().
- Add a comment to vm_pgmoveco() describing what remains to be done for vm locking.
Diffstat (limited to 'sys/kern/kern_subr.c')
-rw-r--r--sys/kern/kern_subr.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/sys/kern/kern_subr.c b/sys/kern/kern_subr.c
index 0a3052c..1962ead 100644
--- a/sys/kern/kern_subr.c
+++ b/sys/kern/kern_subr.c
@@ -85,12 +85,15 @@ vm_pgmoveco(vm_map_t mapa, vm_object_t srcobj, vm_offset_t kaddr,
* First lookup the kernel page.
*/
kern_pg = PHYS_TO_VM_PAGE(vtophys(kaddr));
-
+ /*
+ * XXX The vm object containing kern_pg needs locking.
+ */
if ((vm_map_lookup(&map, uaddr,
VM_PROT_WRITE, &entry, &uobject,
&upindex, &prot, &wired)) != KERN_SUCCESS) {
return(EFAULT);
}
+ VM_OBJECT_LOCK(uobject);
if ((user_pg = vm_page_lookup(uobject, upindex)) != NULL) {
do
vm_page_lock_queues();
@@ -117,7 +120,7 @@ vm_pgmoveco(vm_map_t mapa, vm_object_t srcobj, vm_offset_t kaddr,
vm_page_flag_clear(kern_pg, PG_BUSY);
kern_pg->valid = VM_PAGE_BITS_ALL;
vm_page_unlock_queues();
-
+ VM_OBJECT_UNLOCK(uobject);
vm_map_lookup_done(map, entry);
return(KERN_SUCCESS);
}
OpenPOWER on IntegriCloud