diff options
author | dg <dg@FreeBSD.org> | 1995-03-01 23:30:04 +0000 |
---|---|---|
committer | dg <dg@FreeBSD.org> | 1995-03-01 23:30:04 +0000 |
commit | eb198debb87180989f8b19a7edc7eccb01f90fa5 (patch) | |
tree | 939577bd1f960df71501392b5bf83109c6c968b5 /sys/vm/swap_pager.c | |
parent | e8c06a9513ade8cda989aadc92beefcb5596acf0 (diff) | |
download | FreeBSD-src-eb198debb87180989f8b19a7edc7eccb01f90fa5.zip FreeBSD-src-eb198debb87180989f8b19a7edc7eccb01f90fa5.tar.gz |
Various changes from John and myself that do the following:
New functions create - vm_object_pip_wakeup and pagedaemon_wakeup that
are used to reduce the actual number of wakeups.
New function vm_page_protect which is used in conjuction with some new
page flags to reduce the number of calls to pmap_page_protect.
Minor changes to reduce unnecessary spl nesting.
Rewrote vm_page_alloc() to improve readability.
Various other mostly cosmetic changes.
Diffstat (limited to 'sys/vm/swap_pager.c')
-rw-r--r-- | sys/vm/swap_pager.c | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/sys/vm/swap_pager.c b/sys/vm/swap_pager.c index 3189619..9902969 100644 --- a/sys/vm/swap_pager.c +++ b/sys/vm/swap_pager.c @@ -39,7 +39,7 @@ * from: Utah $Hdr: swap_pager.c 1.4 91/04/30$ * * @(#)swap_pager.c 8.9 (Berkeley) 3/21/94 - * $Id: swap_pager.c,v 1.27 1995/02/22 09:15:20 davidg Exp $ + * $Id: swap_pager.c,v 1.28 1995/02/25 17:02:48 davidg Exp $ */ /* @@ -1040,7 +1040,7 @@ swap_pager_input(swp, m, count, reqpage) if (curproc == pageproc) (void) swap_pager_clean(); else - wakeup((caddr_t) &vm_pages_needed); + pagedaemon_wakeup(); while (swap_pager_free.tqh_first == NULL) { swap_pager_needflags |= SWAP_FREE_NEEDED; if (curproc == pageproc) @@ -1050,7 +1050,7 @@ swap_pager_input(swp, m, count, reqpage) if (curproc == pageproc) (void) swap_pager_clean(); else - wakeup((caddr_t) &vm_pages_needed); + pagedaemon_wakeup(); } splx(s); } @@ -1146,7 +1146,7 @@ swap_pager_input(swp, m, count, reqpage) wakeup((caddr_t) &swap_pager_free); } if( swap_pager_needflags & SWAP_FREE_NEEDED_BY_PAGEOUT) - wakeup((caddr_t) &vm_pages_needed); + pagedaemon_wakeup(); swap_pager_needflags &= ~(SWAP_FREE_NEEDED|SWAP_FREE_NEEDED_BY_PAGEOUT); } else { /* @@ -1369,7 +1369,7 @@ swap_pager_output(swp, m, count, flags, rtvals) return VM_PAGER_AGAIN; #endif } else - wakeup((caddr_t) &vm_pages_needed); + pagedaemon_wakeup(); while (swap_pager_free.tqh_first == NULL || swap_pager_free.tqh_first->spc_list.tqe_next == NULL || swap_pager_free.tqh_first->spc_list.tqe_next->spc_list.tqe_next == NULL) { @@ -1385,7 +1385,7 @@ swap_pager_output(swp, m, count, flags, rtvals) if (curproc == pageproc) (void) swap_pager_clean(); else - wakeup((caddr_t) &vm_pages_needed); + pagedaemon_wakeup(); } splx(s); } @@ -1544,7 +1544,7 @@ swap_pager_output(swp, m, count, flags, rtvals) wakeup((caddr_t) &swap_pager_free); } if( swap_pager_needflags & SWAP_FREE_NEEDED_BY_PAGEOUT) - wakeup((caddr_t) &vm_pages_needed); + pagedaemon_wakeup(); swap_pager_needflags &= ~(SWAP_FREE_NEEDED|SWAP_FREE_NEEDED_BY_PAGEOUT); return (rv); } @@ -1592,7 +1592,7 @@ doclean: wakeup((caddr_t) &swap_pager_free); } if( swap_pager_needflags & SWAP_FREE_NEEDED_BY_PAGEOUT) - wakeup((caddr_t) &vm_pages_needed); + pagedaemon_wakeup(); swap_pager_needflags &= ~(SWAP_FREE_NEEDED|SWAP_FREE_NEEDED_BY_PAGEOUT); ++cleandone; splx(s); @@ -1691,7 +1691,7 @@ swap_pager_iodone(bp) if( swap_pager_needflags & SWAP_FREE_NEEDED_BY_PAGEOUT) { swap_pager_needflags &= ~SWAP_FREE_NEEDED_BY_PAGEOUT; - wakeup((caddr_t) &vm_pages_needed); + pagedaemon_wakeup(); } if (vm_pageout_pages_needed) { @@ -1700,8 +1700,8 @@ swap_pager_iodone(bp) } if ((swap_pager_inuse.tqh_first == NULL) || ((cnt.v_free_count + cnt.v_cache_count) < cnt.v_free_min && - nswiodone + cnt.v_free_count + cnt.v_cache_count >= cnt.v_free_min)) { - wakeup((caddr_t) &vm_pages_needed); + nswiodone + cnt.v_free_count + cnt.v_cache_count >= cnt.v_free_min)) { + pagedaemon_wakeup(); } splx(s); } |