diff options
author | alc <alc@FreeBSD.org> | 2010-05-08 20:34:01 +0000 |
---|---|---|
committer | alc <alc@FreeBSD.org> | 2010-05-08 20:34:01 +0000 |
commit | 40b44f9713de70170857e6291876dfce94b6ef43 (patch) | |
tree | 55e1683864edab13ef62b5f9fac6a4928f23f506 /sys/vm/vm_object.c | |
parent | 94ac1169df0fe3609aa671582574d421e89b7ff3 (diff) | |
download | FreeBSD-src-40b44f9713de70170857e6291876dfce94b6ef43.zip FreeBSD-src-40b44f9713de70170857e6291876dfce94b6ef43.tar.gz |
Push down the page queues into vm_page_cache(), vm_page_try_to_cache(), and
vm_page_try_to_free(). Consequently, push down the page queues lock into
pmap_enter_quick(), pmap_page_wired_mapped(), pmap_remove_all(), and
pmap_remove_write().
Push down the page queues lock into Xen's pmap_page_is_mapped(). (I
overlooked the Xen pmap in r207702.)
Switch to a per-processor counter for the total number of pages cached.
Diffstat (limited to 'sys/vm/vm_object.c')
-rw-r--r-- | sys/vm/vm_object.c | 15 |
1 files changed, 1 insertions, 14 deletions
diff --git a/sys/vm/vm_object.c b/sys/vm/vm_object.c index 5428c98..185fe2b 100644 --- a/sys/vm/vm_object.c +++ b/sys/vm/vm_object.c @@ -876,13 +876,8 @@ vm_object_page_clean(vm_object_t object, vm_pindex_t start, vm_pindex_t end, int p->oflags |= VPO_CLEANCHK; if ((flags & OBJPC_NOSYNC) && (p->oflags & VPO_NOSYNC)) clearobjflags = 0; - else { - vm_page_lock(p); - vm_page_lock_queues(); + else pmap_remove_write(p); - vm_page_unlock_queues(); - vm_page_unlock(p); - } } if (clearobjflags && (tstart == 0) && (tend == object->size)) @@ -1048,11 +1043,7 @@ vm_object_page_collect_flush(vm_object_t object, vm_page_t p, int curgeneration, vm_pageout_flush(ma, runlen, pagerflags); for (i = 0; i < runlen; i++) { if (ma[i]->dirty) { - vm_page_lock(ma[i]); - vm_page_lock_queues(); pmap_remove_write(ma[i]); - vm_page_unlock_queues(); - vm_page_unlock(ma[i]); ma[i]->oflags |= VPO_CLEANCHK; /* @@ -1968,7 +1959,6 @@ again: * if "clean_only" is FALSE. */ vm_page_lock(p); - vm_page_lock_queues(); if ((wirings = p->wire_count) != 0 && (wirings = pmap_page_wired_mappings(p)) != p->wire_count) { /* Fictitious pages do not have managed mappings. */ @@ -1980,7 +1970,6 @@ again: p->valid = 0; vm_page_undirty(p); } - vm_page_unlock_queues(); vm_page_unlock(p); continue; } @@ -1991,7 +1980,6 @@ again: if (clean_only && p->valid) { pmap_remove_write(p); if (p->dirty) { - vm_page_unlock_queues(); vm_page_unlock(p); continue; } @@ -2001,7 +1989,6 @@ again: if (wirings != 0) p->wire_count -= wirings; vm_page_free(p); - vm_page_unlock_queues(); vm_page_unlock(p); } vm_object_pip_wakeup(object); |