diff options
author | alc <alc@FreeBSD.org> | 2002-10-20 07:19:25 +0000 |
---|---|---|
committer | alc <alc@FreeBSD.org> | 2002-10-20 07:19:25 +0000 |
commit | 8e471edd4918a64a054f07e0000c6b10e386d22d (patch) | |
tree | c9ee2b6fa43aea1a12901c19806b89fbe4267aad | |
parent | d91408e73a35f283640aeb211acd3dcf87150de1 (diff) | |
download | FreeBSD-src-8e471edd4918a64a054f07e0000c6b10e386d22d.zip FreeBSD-src-8e471edd4918a64a054f07e0000c6b10e386d22d.tar.gz |
- Lock page queue accesses in pmap_release().
-rw-r--r-- | sys/sparc64/sparc64/pmap.c | 4 |
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); } |