diff options
author | alc <alc@FreeBSD.org> | 2002-07-14 23:51:55 +0000 |
---|---|---|
committer | alc <alc@FreeBSD.org> | 2002-07-14 23:51:55 +0000 |
commit | ec8a106e8a10401d462de8ab256aea0a8f824f53 (patch) | |
tree | 99936febc42223e68e46d00c4751ee062499b1e8 /sys | |
parent | d3091fc32b111ebce3d5248653807320512d3ad5 (diff) | |
download | FreeBSD-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.c | 2 | ||||
-rw-r--r-- | sys/vm/vm_page.c | 3 |
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); |