From 2d21129db2f1c62575fa3d1900f5df69ee36a49e Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Mon, 25 Nov 2002 04:37:44 +0000 Subject: [PATCH] Acquire and release the page queues lock around pmap_remove_pages() because it updates several of vm_page's fields. --- sys/kern/kern_exec.c | 2 ++ sys/kern/kern_exit.c | 3 +++ 2 files changed, 5 insertions(+) diff --git a/sys/kern/kern_exec.c b/sys/kern/kern_exec.c index e6364bf1770..8f64cf41547 100644 --- a/sys/kern/kern_exec.c +++ b/sys/kern/kern_exec.c @@ -843,8 +843,10 @@ exec_new_vmspace(imgp, sv) vm_map_max(map) == sv->sv_maxuser) { if (vmspace->vm_shm) shmexit(p); + vm_page_lock_queues(); pmap_remove_pages(vmspace_pmap(vmspace), vm_map_min(map), vm_map_max(map)); + vm_page_unlock_queues(); vm_map_remove(map, vm_map_min(map), vm_map_max(map)); } else { vmspace_exec(p, sv->sv_minuser, sv->sv_maxuser); diff --git a/sys/kern/kern_exit.c b/sys/kern/kern_exit.c index 6f745a0717a..0ee27b728e5 100644 --- a/sys/kern/kern_exit.c +++ b/sys/kern/kern_exit.c @@ -76,6 +76,7 @@ #include #include #include +#include #include #include @@ -290,8 +291,10 @@ exit1(td, rv) if (--vm->vm_refcnt == 0) { if (vm->vm_shm) shmexit(p); + vm_page_lock_queues(); pmap_remove_pages(vmspace_pmap(vm), vm_map_min(&vm->vm_map), vm_map_max(&vm->vm_map)); + vm_page_unlock_queues(); (void) vm_map_remove(&vm->vm_map, vm_map_min(&vm->vm_map), vm_map_max(&vm->vm_map)); vm->vm_freer = p;