summaryrefslogtreecommitdiffstats
path: root/sys/vm/vm_page.c
diff options
context:
space:
mode:
authordyson <dyson@FreeBSD.org>1996-06-17 03:35:40 +0000
committerdyson <dyson@FreeBSD.org>1996-06-17 03:35:40 +0000
commit5cd11c9038b5115e97e2e655cd920bcea58b0f99 (patch)
tree8fc6a057fe853dbb744df6b99c93762955bf2c22 /sys/vm/vm_page.c
parent0839ad4b61f9bff959b4034f24697cdf728e8158 (diff)
downloadFreeBSD-src-5cd11c9038b5115e97e2e655cd920bcea58b0f99.zip
FreeBSD-src-5cd11c9038b5115e97e2e655cd920bcea58b0f99.tar.gz
Several bugfixes/improvements:
1) Make it much less likely to miss a wakeup in vm_page_free_wakeup 2) Create a new entry point into pmap: pmap_ts_referenced, eliminates the need to scan the pv lists twice in many cases. Perhaps there is alot more to do here to work on minimizing pv list manipulation 3) Minor improvements to vm_pageout including the use of pmap_ts_ref. 4) Major changes and code improvement to pmap. This code has had several serious bugs in page table page manipulation. In order to simplify the problem, and hopefully solve it for once and all, page table pages are no longer "managed" with the pv list stuff. Page table pages are only (mapped and held/wired) or (free and unused) now. Page table pages are never inactive, active or cached. These changes have probably fixed the hold count problems, but if they haven't, then the code is simpler anyway for future bugfixing. 5) The pmap code has been sorely in need of re-organization, and I have taken a first (of probably many) steps. Please tell me if you have any ideas.
Diffstat (limited to 'sys/vm/vm_page.c')
-rw-r--r--sys/vm/vm_page.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/sys/vm/vm_page.c b/sys/vm/vm_page.c
index d33495f..445c207 100644
--- a/sys/vm/vm_page.c
+++ b/sys/vm/vm_page.c
@@ -34,7 +34,7 @@
* SUCH DAMAGE.
*
* from: @(#)vm_page.c 7.4 (Berkeley) 5/7/91
- * $Id: vm_page.c,v 1.56 1996/06/12 06:52:06 dyson Exp $
+ * $Id: vm_page.c,v 1.57 1996/06/16 20:37:31 dyson Exp $
*/
/*
@@ -802,12 +802,13 @@ vm_page_free_wakeup()
* high water mark. And wakeup scheduler process if we have
* lots of memory. this process will swapin processes.
*/
- if ((cnt.v_free_count + cnt.v_cache_count) == cnt.v_free_min) {
+ if (vm_pages_needed &&
+ ((cnt.v_free_count + cnt.v_cache_count) >= cnt.v_free_min)) {
wakeup(&cnt.v_free_count);
+ vm_pages_needed = 0;
}
}
-
/*
* vm_page_free:
*
OpenPOWER on IntegriCloud