summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authoralc <alc@FreeBSD.org>2002-10-20 07:19:25 +0000
committeralc <alc@FreeBSD.org>2002-10-20 07:19:25 +0000
commit8e471edd4918a64a054f07e0000c6b10e386d22d (patch)
treec9ee2b6fa43aea1a12901c19806b89fbe4267aad /sys
parentd91408e73a35f283640aeb211acd3dcf87150de1 (diff)
downloadFreeBSD-src-8e471edd4918a64a054f07e0000c6b10e386d22d.zip
FreeBSD-src-8e471edd4918a64a054f07e0000c6b10e386d22d.tar.gz
- Lock page queue accesses in pmap_release().
Diffstat (limited to 'sys')
-rw-r--r--sys/sparc64/sparc64/pmap.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/sys/sparc64/sparc64/pmap.c b/sys/sparc64/sparc64/pmap.c
index 8897a48..586435e 100644
--- a/sys/sparc64/sparc64/pmap.c
+++ b/sys/sparc64/sparc64/pmap.c
@@ -1233,7 +1233,8 @@ pmap_release(pmap_t pm)
pmap_resident_count(pm)));
while (!TAILQ_EMPTY(&obj->memq)) {
m = TAILQ_FIRST(&obj->memq);
- if (vm_page_sleep_busy(m, FALSE, "pmaprl"))
+ vm_page_lock_queues();
+ if (vm_page_sleep_if_busy(m, FALSE, "pmaprl"))
continue;
vm_page_busy(m);
KASSERT(m->hold_count == 0,
@@ -1241,6 +1242,7 @@ pmap_release(pmap_t pm)
m->wire_count--;
cnt.v_wire_count--;
vm_page_free_zero(m);
+ vm_page_unlock_queues();
}
pmap_qremove((vm_offset_t)pm->pm_tsb, TSB_PAGES);
}
OpenPOWER on IntegriCloud