summaryrefslogtreecommitdiffstats
path: root/sys/vm/vm_page.c
diff options
context:
space:
mode:
authordyson <dyson@FreeBSD.org>1996-06-16 20:37:31 +0000
committerdyson <dyson@FreeBSD.org>1996-06-16 20:37:31 +0000
commit4e8ccabc814c59d749b8668436e88de78f3c617d (patch)
tree6b39f5a681da400b6143dac6540e8218547a46e6 /sys/vm/vm_page.c
parent787546bf1d9334d1251577ad85443d07dd86f971 (diff)
downloadFreeBSD-src-4e8ccabc814c59d749b8668436e88de78f3c617d.zip
FreeBSD-src-4e8ccabc814c59d749b8668436e88de78f3c617d.tar.gz
Various bugfixes/cleanups from me and others:
1) Remove potential race conditions on waking up in vm_page_free_wakeup by making sure that it is at splvm(). 2) Fix another bug in vm_map_simplify_entry. 3) Be more complete about converting from default to swap pager when an object grows to be large enough that there can be a problem with data structure allocation under low memory conditions. 4) Make some madvise code more efficient. 5) Added some comments.
Diffstat (limited to 'sys/vm/vm_page.c')
-rw-r--r--sys/vm/vm_page.c19
1 files changed, 6 insertions, 13 deletions
diff --git a/sys/vm/vm_page.c b/sys/vm/vm_page.c
index b0b755f..d33495f 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.55 1996/06/08 06:48:34 dyson Exp $
+ * $Id: vm_page.c,v 1.56 1996/06/12 06:52:06 dyson Exp $
*/
/*
@@ -797,7 +797,6 @@ vm_page_free_wakeup()
wakeup(&vm_pageout_pages_needed);
vm_pageout_pages_needed = 0;
}
- cnt.v_free_count++;
/*
* wakeup processes that are waiting on memory if we hit a
* high water mark. And wakeup scheduler process if we have
@@ -846,8 +845,9 @@ vm_page_free(m)
TAILQ_INSERT_HEAD(&vm_page_queue_free, m, pageq);
}
- splx(s);
+ cnt.v_free_count++;
vm_page_free_wakeup();
+ splx(s);
}
void
@@ -869,9 +869,9 @@ vm_page_free_zero(m)
TAILQ_INSERT_HEAD(&vm_page_queue_zero, m, pageq);
++vm_page_zero_count;
-
- splx(s);
+ cnt.v_free_count++;
vm_page_free_wakeup();
+ splx(s);
}
/*
@@ -992,14 +992,7 @@ vm_page_cache(m)
TAILQ_INSERT_TAIL(&vm_page_queue_cache, m, pageq);
m->queue = PQ_CACHE;
cnt.v_cache_count++;
- if ((cnt.v_free_count + cnt.v_cache_count) == cnt.v_free_min) {
- wakeup(&cnt.v_free_count);
- wakeup(&proc0);
- }
- if (vm_pageout_pages_needed) {
- wakeup(&vm_pageout_pages_needed);
- vm_pageout_pages_needed = 0;
- }
+ vm_page_free_wakeup();
splx(s);
}
OpenPOWER on IntegriCloud