summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoralc <alc@FreeBSD.org>2002-07-21 19:06:46 +0000
committeralc <alc@FreeBSD.org>2002-07-21 19:06:46 +0000
commit412e868886a5e658083f9e688a5ae0708bf4eb97 (patch)
tree216c744ae9e158a68cc46ad787e4f5184359c00a
parent25022332651db553076ec3b7404f57f158c9967c (diff)
downloadFreeBSD-src-412e868886a5e658083f9e688a5ae0708bf4eb97.zip
FreeBSD-src-412e868886a5e658083f9e688a5ae0708bf4eb97.tar.gz
o Lock page queue accesses by vm_page_free().
-rw-r--r--sys/kern/kern_subr.c2
-rw-r--r--sys/kern/uipc_jumbo.c2
2 files changed, 4 insertions, 0 deletions
diff --git a/sys/kern/kern_subr.c b/sys/kern/kern_subr.c
index 93ef221..addea42 100644
--- a/sys/kern/kern_subr.c
+++ b/sys/kern/kern_subr.c
@@ -105,8 +105,10 @@ vm_pgmoveco(mapa, srcobj, kaddr, uaddr)
if ((user_pg = vm_page_lookup(uobject, upindex)) != NULL) {
vm_page_sleep_busy(user_pg, 1, "vm_pgmoveco");
pmap_remove(map->pmap, uaddr, uaddr+PAGE_SIZE);
+ vm_page_lock_queues();
vm_page_busy(user_pg);
vm_page_free(user_pg);
+ vm_page_unlock_queues();
}
if (kern_pg->busy || ((kern_pg->queue - kern_pg->pc) == PQ_FREE) ||
diff --git a/sys/kern/uipc_jumbo.c b/sys/kern/uipc_jumbo.c
index 05be7fb..de2f7f1 100644
--- a/sys/kern/uipc_jumbo.c
+++ b/sys/kern/uipc_jumbo.c
@@ -228,8 +228,10 @@ jumbo_pg_free(vm_offset_t addr)
atop(addr - jumbo_basekva), paddr);
*/
} else {
+ vm_page_lock_queues();
vm_page_busy(pg); /* vm_page_free wants pages to be busy*/
vm_page_free(pg);
+ vm_page_unlock_queues();
}
mtx_lock(&jumbo_mutex);
OpenPOWER on IntegriCloud