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 rcsdiff: /ftp/cvs/cvsroot/src/sys/kern/subr_pool.c,v: warning: Unknown phrases like `commitid ...;' are present. retrieving revision 1.74.2.2 retrieving revision 1.85 diff -u -p -r1.74.2.2 -r1.85 --- src/sys/kern/subr_pool.c 2002/03/12 15:54:04 1.74.2.2 +++ src/sys/kern/subr_pool.c 2003/02/23 21:25:19 1.85 @@ -1,7 +1,7 @@ -/* $NetBSD: subr_pool.c,v 1.74.2.2 2002/03/12 15:54:04 thorpej Exp $ */ +/* $NetBSD: subr_pool.c,v 1.85 2003/02/23 21:25:19 pk Exp $ */ /*- - * Copyright (c) 1997, 1999, 2000, 2002 The NetBSD Foundation, Inc. + * Copyright (c) 1997, 1999, 2000 The NetBSD Foundation, Inc. * All rights reserved. * * This code is derived from software contributed to The NetBSD Foundation @@ -38,7 +38,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: subr_pool.c,v 1.74.2.2 2002/03/12 15:54:04 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: subr_pool.c,v 1.85 2003/02/23 21:25:19 pk Exp $"); #include "opt_pool.h" #include "opt_poollog.h" @@ -94,7 +94,7 @@ struct pool_item_header { TAILQ_HEAD(,pool_item) ph_itemlist; /* chunk list for this page */ LIST_ENTRY(pool_item_header) ph_hashlist; /* Off-page page headers */ - int ph_nmissing; /* # of chunks in use */ + unsigned int ph_nmissing; /* # of chunks in use */ caddr_t ph_page; /* this page's address */ struct timeval ph_time; /* last referenced */ }; @@ -102,9 +102,9 @@ TAILQ_HEAD(pool_pagelist,pool_item_heade struct pool_item { #ifdef DIAGNOSTIC - int pi_magic; + u_int pi_magic; #endif -#define PI_MAGIC 0xdeadbeef +#define PI_MAGIC 0xdeadbeefU /* Other entries use only this list entry */ TAILQ_ENTRY(pool_item) pi_list; }; @@ -145,16 +145,6 @@ struct pool_item { /* The cache group pool. */ static struct pool pcgpool; -/* The pool cache group. */ -#define PCG_NOBJECTS 16 -struct pool_cache_group { - TAILQ_ENTRY(pool_cache_group) - pcg_list; /* link in the pool cache's group list */ - u_int pcg_avail; /* # available objects */ - /* pointers to the objects */ - void *pcg_objects[PCG_NOBJECTS]; -}; - static void pool_cache_reclaim(struct pool_cache *); static int pool_catchup(struct pool *); @@ -339,7 +329,7 @@ pr_rmpage(struct pool *pp, struct pool_i pool_allocator_free(pp, ph->ph_page); if ((pp->pr_roflags & PR_PHINPAGE) == 0) { LIST_REMOVE(ph, ph_hashlist); - s = splhigh(); + s = splvm(); pool_put(&phpool, ph); splx(s); } @@ -574,7 +564,7 @@ pool_destroy(struct pool *pp) #ifdef DIAGNOSTIC if (pp->pr_nout != 0) { pr_printlog(pp, NULL, printf); - panic("pool_destroy: pool busy: still out: %u\n", + panic("pool_destroy: pool busy: still out: %u", pp->pr_nout); } #endif @@ -621,7 +611,7 @@ pool_alloc_item_header(struct pool *pp, if ((pp->pr_roflags & PR_PHINPAGE) != 0) ph = (struct pool_item_header *) (storage + pp->pr_phoffset); else { - s = splhigh(); + s = splvm(); ph = pool_get(&phpool, flags); splx(s); } @@ -644,9 +634,9 @@ pool_get(struct pool *pp, int flags) void *v; #ifdef DIAGNOSTIC - if (__predict_false(curproc == NULL && doing_shutdown == 0 && + if (__predict_false(curlwp == NULL && doing_shutdown == 0 && (flags & PR_WAITOK) != 0)) - panic("pool_get: must have NOWAIT"); + panic("pool_get: %s: must have NOWAIT", pp->pr_wchan); #ifdef LOCKDEBUG if (flags & PR_WAITOK) @@ -725,7 +715,7 @@ pool_get(struct pool *pp, int flags) simple_unlock(&pp->pr_slock); printf("pool_get: %s: curpage NULL, nitems %u\n", pp->pr_wchan, pp->pr_nitems); - panic("pool_get: nitems inconsistent\n"); + panic("pool_get: nitems inconsistent"); } #endif @@ -795,7 +785,7 @@ pool_get(struct pool *pp, int flags) simple_unlock(&pp->pr_slock); printf("pool_get: %s: items on itemlist, nitems %u\n", pp->pr_wchan, pp->pr_nitems); - panic("pool_get: nitems inconsistent\n"); + panic("pool_get: nitems inconsistent"); } #endif @@ -871,7 +861,6 @@ pool_get(struct pool *pp, int flags) pr_leave(pp); simple_unlock(&pp->pr_slock); - KASSERT((((vaddr_t)v + pp->pr_itemoffset) & (pp->pr_align - 1)) == 0); return (v); } @@ -927,6 +916,7 @@ pool_do_put(struct pool *pp, void *v) #endif TAILQ_INSERT_HEAD(&ph->ph_itemlist, pi, pi_list); + KDASSERT(ph->ph_nmissing != 0); ph->ph_nmissing--; pp->pr_nput++; pp->pr_nitems++; @@ -1047,9 +1037,9 @@ pool_put(struct pool *pp, void *v) int pool_prime(struct pool *pp, int n) { - struct pool_item_header *ph; + struct pool_item_header *ph = NULL; caddr_t cp; - int newpages, error = 0; + int newpages; simple_lock(&pp->pr_slock); @@ -1063,7 +1053,6 @@ pool_prime(struct pool *pp, int n) simple_lock(&pp->pr_slock); if (__predict_false(cp == NULL || ph == NULL)) { - error = ENOMEM; if (cp != NULL) pool_allocator_free(pp, cp); break; @@ -1091,8 +1080,8 @@ pool_prime_page(struct pool *pp, caddr_t { struct pool_item *pi; caddr_t cp = storage; - const unsigned int align = pp->pr_align; - const unsigned int ioff = pp->pr_itemoffset; + unsigned int align = pp->pr_align; + unsigned int ioff = pp->pr_itemoffset; int n; #ifdef DIAGNOSTIC @@ -1128,8 +1117,6 @@ pool_prime_page(struct pool *pp, caddr_t if (ioff != 0) cp = (caddr_t)(cp + (align - ioff)); - KASSERT((((vaddr_t)cp + ioff) & (align - 1)) == 0); - /* * Insert remaining chunks on the bucket list. */ @@ -1139,14 +1126,14 @@ pool_prime_page(struct pool *pp, caddr_t while (n--) { pi = (struct pool_item *)cp; + KASSERT(((((vaddr_t)pi) + ioff) & (align - 1)) == 0); + /* Insert on page list */ TAILQ_INSERT_TAIL(&ph->ph_itemlist, pi, pi_list); #ifdef DIAGNOSTIC pi->pi_magic = PI_MAGIC; #endif cp = (caddr_t)(cp + pp->pr_size); - - KASSERT((((vaddr_t)cp + ioff) & (align - 1)) == 0); } /* @@ -1171,7 +1158,7 @@ pool_prime_page(struct pool *pp, caddr_t static int pool_catchup(struct pool *pp) { - struct pool_item_header *ph; + struct pool_item_header *ph = NULL; caddr_t cp; int error = 0; @@ -1203,7 +1190,6 @@ pool_catchup(struct pool *pp) void pool_setlowat(struct pool *pp, int n) { - int error; simple_lock(&pp->pr_slock); @@ -1213,7 +1199,7 @@ pool_setlowat(struct pool *pp, int n) : roundup(n, pp->pr_itemsperpage) / pp->pr_itemsperpage; /* Make sure we're caught up with the newly-set low water mark. */ - if (POOL_NEEDS_CATCHUP(pp) && (error = pool_catchup(pp) != 0)) { + if (POOL_NEEDS_CATCHUP(pp) && pool_catchup(pp) != 0) { /* * XXX: Should we log a warning? Should we set up a timeout * to try again in a second or so? The latter could break @@ -1336,7 +1322,7 @@ pool_reclaim(struct pool *pp) continue; } LIST_REMOVE(ph, ph_hashlist); - s = splhigh(); + s = splvm(); pool_put(&phpool, ph); splx(s); } @@ -1439,7 +1425,6 @@ pool_print1(struct pool *pp, const char print_pagelist = 1; if (c == 'c') print_cache = 1; - modif++; } (*pr)("POOL %s: size %u, align %u, ioff %u, roflags 0x%08x\n", @@ -1702,8 +1687,6 @@ pool_cache_get(struct pool_cache *pc, in return (NULL); } } - KASSERT((((vaddr_t)object + pc->pc_pool->pr_itemoffset) & - (pc->pc_pool->pr_align - 1)) == 0); return (object); } @@ -1717,8 +1700,6 @@ pool_cache_get(struct pool_cache *pc, in simple_unlock(&pc->pc_slock); - KASSERT((((vaddr_t)object + pc->pc_pool->pr_itemoffset) & - (pc->pc_pool->pr_align - 1)) == 0); return (object); }