Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. =================================================================== RCS file: /ftp/cvs/cvsroot/src/sys/kern/subr_pool.c,v retrieving revision 1.93.2.1 retrieving revision 1.94 diff -u -p -r1.93.2.1 -r1.94 --- src/sys/kern/subr_pool.c 2004/06/22 08:58:42 1.93.2.1 +++ src/sys/kern/subr_pool.c 2004/04/25 16:42:41 1.94 @@ -1,4 +1,4 @@ -/* $NetBSD: subr_pool.c,v 1.93.2.1 2004/06/22 08:58:42 tron Exp $ */ +/* $NetBSD: subr_pool.c,v 1.94 2004/04/25 16:42:41 simonb Exp $ */ /*- * Copyright (c) 1997, 1999, 2000 The NetBSD Foundation, Inc. @@ -38,7 +38,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: subr_pool.c,v 1.93.2.1 2004/06/22 08:58:42 tron Exp $"); +__KERNEL_RCSID(0, "$NetBSD: subr_pool.c,v 1.94 2004/04/25 16:42:41 simonb Exp $"); #include "opt_pool.h" #include "opt_poollog.h" @@ -357,6 +357,21 @@ pr_rmpage(struct pool *pp, struct pool_i } /* + * Initialize all the pools listed in the "pools" link set. + */ +void +link_pool_init(void) +{ + __link_set_decl(pools, struct link_pool_init); + struct link_pool_init * const *pi; + + __link_set_foreach(pi, pools) + pool_init((*pi)->pp, (*pi)->size, (*pi)->align, + (*pi)->align_offset, (*pi)->flags, (*pi)->wchan, + (*pi)->palloc); +} + +/* * Initialize the given pool resource structure. * * We export this routine to allow other kernel parts to declare @@ -957,7 +972,8 @@ pool_do_put(struct pool *pp, void *v) * If this page is now empty, do one of two things: * * (1) If we have more pages than the page high water mark, - * free the page back to the system. ONLY CONSIDER + * or if we are flagged as immediately freeing back idle + * pages, free the page back to the system. ONLY CONSIDER * FREEING BACK A PAGE IF WE HAVE MORE THAN OUR MINIMUM PAGE * CLAIM. * @@ -970,6 +986,7 @@ pool_do_put(struct pool *pp, void *v) pp->pr_nidle++; if (pp->pr_npages > pp->pr_minpages && (pp->pr_npages > pp->pr_maxpages || + (pp->pr_roflags & PR_IMMEDRELEASE) != 0 || (pp->pr_alloc->pa_flags & PA_WANT) != 0)) { simple_unlock(&pp->pr_slock); pr_rmpage(pp, ph, NULL);