diff options
author | dyson <dyson@FreeBSD.org> | 1996-06-16 20:37:31 +0000 |
---|---|---|
committer | dyson <dyson@FreeBSD.org> | 1996-06-16 20:37:31 +0000 |
commit | 4e8ccabc814c59d749b8668436e88de78f3c617d (patch) | |
tree | 6b39f5a681da400b6143dac6540e8218547a46e6 /sys/vm/vm_page.c | |
parent | 787546bf1d9334d1251577ad85443d07dd86f971 (diff) | |
download | FreeBSD-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.c | 19 |
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); } |