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_fault.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_fault.c')
-rw-r--r-- | sys/vm/vm_fault.c | 15 |
1 files changed, 3 insertions, 12 deletions
diff --git a/sys/vm/vm_fault.c b/sys/vm/vm_fault.c index 05c3228..e5673de 100644 --- a/sys/vm/vm_fault.c +++ b/sys/vm/vm_fault.c @@ -487,20 +487,16 @@ readrest: (mt->oflags & VPO_BUSY)) continue; vm_page_lock(mt); - vm_page_lock_queues(); if (mt->hold_count || mt->wire_count) { - vm_page_unlock_queues(); vm_page_unlock(mt); continue; } pmap_remove_all(mt); - if (mt->dirty) { + if (mt->dirty != 0) vm_page_deactivate(mt); - } else { + else vm_page_cache(mt); - } - vm_page_unlock_queues(); vm_page_unlock(mt); } ahead += behind; @@ -1025,13 +1021,8 @@ vm_fault_prefault(pmap_t pmap, vm_offset_t addra, vm_map_entry_t entry) break; } if (m->valid == VM_PAGE_BITS_ALL && - (m->flags & PG_FICTITIOUS) == 0) { - vm_page_lock(m); - vm_page_lock_queues(); + (m->flags & PG_FICTITIOUS) == 0) pmap_enter_quick(pmap, addr, m, entry->protection); - vm_page_unlock_queues(); - vm_page_unlock(m); - } VM_OBJECT_UNLOCK(lobject); } } |