diff options
author | alc <alc@FreeBSD.org> | 2002-07-21 19:06:46 +0000 |
---|---|---|
committer | alc <alc@FreeBSD.org> | 2002-07-21 19:06:46 +0000 |
commit | 412e868886a5e658083f9e688a5ae0708bf4eb97 (patch) | |
tree | 216c744ae9e158a68cc46ad787e4f5184359c00a | |
parent | 25022332651db553076ec3b7404f57f158c9967c (diff) | |
download | FreeBSD-src-412e868886a5e658083f9e688a5ae0708bf4eb97.zip FreeBSD-src-412e868886a5e658083f9e688a5ae0708bf4eb97.tar.gz |
o Lock page queue accesses by vm_page_free().
-rw-r--r-- | sys/kern/kern_subr.c | 2 | ||||
-rw-r--r-- | sys/kern/uipc_jumbo.c | 2 |
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); |