summaryrefslogtreecommitdiffstats
path: root/sys/vm/vm_fault.c
diff options
context:
space:
mode:
authordyson <dyson@FreeBSD.org>1996-01-19 04:00:31 +0000
committerdyson <dyson@FreeBSD.org>1996-01-19 04:00:31 +0000
commit8fc8a772af22f6e03233d248fa2dbd9b5c2bdd7d (patch)
tree3c31fd95ea745005a9cd6733db5a16f31bd828a6 /sys/vm/vm_fault.c
parent6755beedbf0ddaa9e66e91c8e74f620ede6bfad5 (diff)
downloadFreeBSD-src-8fc8a772af22f6e03233d248fa2dbd9b5c2bdd7d.zip
FreeBSD-src-8fc8a772af22f6e03233d248fa2dbd9b5c2bdd7d.tar.gz
Eliminated many redundant vm_map_lookup operations for vm_mmap.
Speed up for vfs_bio -- addition of a routine bqrelse to greatly diminish overhead for merged cache. Efficiency improvement for vfs_cluster. It used to do alot of redundant calls to cluster_rbuild. Correct the ordering for vrele of .text and release of credentials. Use the selective tlb update for 486/586/P6. Numerous fixes to the size of objects allocated for files. Additionally, fixes in the various pagers. Fixes for proper positioning of vnode_pager_setsize in msdosfs and ext2fs. Fixes in the swap pager for exhausted resources. The pageout code will not as readily thrash. Change the page queue flags (PG_ACTIVE, PG_INACTIVE, PG_FREE, PG_CACHE) into page queue indices (PQ_ACTIVE, PQ_INACTIVE, PQ_FREE, PQ_CACHE), thereby improving efficiency of several routines. Eliminate even more unnecessary vm_page_protect operations. Significantly speed up process forks. Make vm_object_page_clean more efficient, thereby eliminating the pause that happens every 30seconds. Make sequential clustered writes B_ASYNC instead of B_DELWRI even in the case of filesystems mounted async. Fix a panic with busy pages when write clustering is done for non-VMIO buffers.
Diffstat (limited to 'sys/vm/vm_fault.c')
-rw-r--r--sys/vm/vm_fault.c20
1 files changed, 9 insertions, 11 deletions
diff --git a/sys/vm/vm_fault.c b/sys/vm/vm_fault.c
index 87090a4..771da03 100644
--- a/sys/vm/vm_fault.c
+++ b/sys/vm/vm_fault.c
@@ -66,7 +66,7 @@
* any improvements or extensions that they make and grant Carnegie the
* rights to redistribute these changes.
*
- * $Id: vm_fault.c,v 1.38 1995/12/07 12:48:10 davidg Exp $
+ * $Id: vm_fault.c,v 1.39 1995/12/11 04:58:06 dyson Exp $
*/
/*
@@ -157,7 +157,7 @@ vm_fault(map, vaddr, fault_type, change_wiring)
#define RELEASE_PAGE(m) { \
PAGE_WAKEUP(m); \
- if ((m->flags & PG_ACTIVE) == 0) vm_page_activate(m); \
+ if (m->queue != PQ_ACTIVE) vm_page_activate(m); \
}
#define UNLOCK_MAP { \
@@ -280,7 +280,7 @@ RetryFault:;
* Mark page busy for other processes, and the pagedaemon.
*/
m->flags |= PG_BUSY;
- if ((m->flags & PG_CACHE) &&
+ if ((m->queue == PQ_CACHE) &&
(cnt.v_free_count + cnt.v_cache_count) < cnt.v_free_reserved) {
UNLOCK_AND_DEALLOCATE;
VM_WAIT;
@@ -288,8 +288,9 @@ RetryFault:;
goto RetryFault;
}
- if (m->valid && ((m->valid & VM_PAGE_BITS_ALL) != VM_PAGE_BITS_ALL) &&
- m->object != kernel_object && m->object != kmem_object) {
+ if (m->valid &&
+ ((m->valid & VM_PAGE_BITS_ALL) != VM_PAGE_BITS_ALL) &&
+ m->object != kernel_object && m->object != kmem_object) {
goto readrest;
}
break;
@@ -306,7 +307,7 @@ RetryFault:;
* Allocate a new page for this object/offset pair.
*/
m = vm_page_alloc(object, pindex,
- vp?VM_ALLOC_NORMAL:(VM_ALLOC_NORMAL|VM_ALLOC_ZERO));
+ vp?VM_ALLOC_NORMAL:VM_ALLOC_ZERO);
if (m == NULL) {
UNLOCK_AND_DEALLOCATE;
@@ -504,9 +505,8 @@ readrest:
* call.
*/
- if ((m->flags & PG_ACTIVE) == 0)
+ if (m->queue != PQ_ACTIVE)
vm_page_activate(m);
- vm_page_protect(m, VM_PROT_NONE);
/*
* We no longer need the old page or object.
@@ -642,7 +642,7 @@ readrest:
else
vm_page_unwire(m);
} else {
- if ((m->flags & PG_ACTIVE) == 0)
+ if (m->queue != PQ_ACTIVE)
vm_page_activate(m);
}
@@ -654,8 +654,6 @@ readrest:
}
}
- if ((m->flags & PG_BUSY) == 0)
- printf("page not busy: %d\n", m->pindex);
/*
* Unlock everything, and return
*/
OpenPOWER on IntegriCloud