summaryrefslogtreecommitdiffstats
path: root/sys/vm/vm_fault.c
diff options
context:
space:
mode:
authoralc <alc@FreeBSD.org>2010-05-08 20:34:01 +0000
committeralc <alc@FreeBSD.org>2010-05-08 20:34:01 +0000
commit40b44f9713de70170857e6291876dfce94b6ef43 (patch)
tree55e1683864edab13ef62b5f9fac6a4928f23f506 /sys/vm/vm_fault.c
parent94ac1169df0fe3609aa671582574d421e89b7ff3 (diff)
downloadFreeBSD-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.c15
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);
}
}
OpenPOWER on IntegriCloud