summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authoralc <alc@FreeBSD.org>2002-07-14 23:51:55 +0000
committeralc <alc@FreeBSD.org>2002-07-14 23:51:55 +0000
commitec8a106e8a10401d462de8ab256aea0a8f824f53 (patch)
tree99936febc42223e68e46d00c4751ee062499b1e8 /sys
parentd3091fc32b111ebce3d5248653807320512d3ad5 (diff)
downloadFreeBSD-src-ec8a106e8a10401d462de8ab256aea0a8f824f53.zip
FreeBSD-src-ec8a106e8a10401d462de8ab256aea0a8f824f53.tar.gz
o Lock page queue accesses by vm_page_wire() that aren't
within a critical section. o Assert that the page queues lock is held in vm_page_wire() unless an Alpha.
Diffstat (limited to 'sys')
-rw-r--r--sys/alpha/alpha/pmap.c2
-rw-r--r--sys/vm/vm_page.c3
2 files changed, 5 insertions, 0 deletions
diff --git a/sys/alpha/alpha/pmap.c b/sys/alpha/alpha/pmap.c
index 30d7901..9bc5884 100644
--- a/sys/alpha/alpha/pmap.c
+++ b/sys/alpha/alpha/pmap.c
@@ -1070,9 +1070,11 @@ pmap_swapin_thread(td)
m = vm_page_lookup(ksobj, i);
m->valid = VM_PAGE_BITS_ALL;
}
+ vm_page_lock_queues();
vm_page_wire(m);
vm_page_wakeup(m);
vm_page_flag_set(m, PG_MAPPED | PG_WRITEABLE);
+ vm_page_unlock_queues();
}
/*
diff --git a/sys/vm/vm_page.c b/sys/vm/vm_page.c
index 6e08ec1..7dd2300 100644
--- a/sys/vm/vm_page.c
+++ b/sys/vm/vm_page.c
@@ -1241,6 +1241,9 @@ vm_page_wire(vm_page_t m)
* it is already off the queues).
*/
s = splvm();
+#ifndef __alpha__
+ mtx_assert(&vm_page_queue_mtx, MA_OWNED);
+#endif
if (m->wire_count == 0) {
if ((m->flags & PG_UNMANAGED) == 0)
vm_pageq_remove(m);
OpenPOWER on IntegriCloud