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.122 retrieving revision 1.122.2.2 diff -u -p -r1.122 -r1.122.2.2 --- src/sys/kern/subr_pool.c 2006/09/03 06:25:19 1.122 +++ src/sys/kern/subr_pool.c 2006/10/20 20:03:56 1.122.2.2 @@ -1,7 +1,7 @@ -/* $NetBSD: subr_pool.c,v 1.122 2006/09/03 06:25:19 christos Exp $ */ +/* $NetBSD: subr_pool.c,v 1.122.2.2 2006/10/20 20:03:56 ad Exp $ */ /*- - * Copyright (c) 1997, 1999, 2000 The NetBSD Foundation, Inc. + * Copyright (c) 1997, 1999, 2000, 2002 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.122 2006/09/03 06:25:19 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: subr_pool.c,v 1.122.2.2 2006/10/20 20:03:56 ad Exp $"); #include "opt_pool.h" #include "opt_poollog.h" @@ -929,7 +929,6 @@ pool_get(struct pool *pp, int flags) #ifdef LOCKDEBUG if (flags & PR_WAITOK) ASSERT_SLEEPABLE(NULL, "pool_get(PR_WAITOK)"); - SCHED_ASSERT_UNLOCKED(); #endif simple_lock(&pp->pr_slock); @@ -1135,6 +1134,7 @@ pool_get(struct pool *pp, int flags) } simple_unlock(&pp->pr_slock); + KASSERT((((vaddr_t)v + pp->pr_itemoffset) & (pp->pr_align - 1)) == 0); return (v); } @@ -1148,7 +1148,6 @@ pool_do_put(struct pool *pp, void *v, st struct pool_item_header *ph; LOCK_ASSERT(simple_lock_held(&pp->pr_slock)); - SCHED_ASSERT_UNLOCKED(); #ifdef DIAGNOSTIC if (__predict_false(pp->pr_nout == 0)) { @@ -1371,8 +1370,8 @@ pool_prime_page(struct pool *pp, caddr_t { struct pool_item *pi; caddr_t cp = storage; - unsigned int align = pp->pr_align; - unsigned int ioff = pp->pr_itemoffset; + const unsigned int align = pp->pr_align; + const unsigned int ioff = pp->pr_itemoffset; int n; LOCK_ASSERT(simple_lock_held(&pp->pr_slock)); @@ -1409,6 +1408,8 @@ 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. */ @@ -1436,6 +1437,8 @@ pool_prime_page(struct pool *pp, caddr_t pi->pi_magic = PI_MAGIC; #endif cp = (caddr_t)(cp + pp->pr_size); + + KASSERT((((vaddr_t)cp + ioff) & (align - 1)) == 0); } } @@ -2068,6 +2071,8 @@ pool_cache_get_paddr(struct pool_cache * return (NULL); } } + KASSERT((((vaddr_t)object + pc->pc_pool->pr_itemoffset) & + (pc->pc_pool->pr_align - 1)) == 0); if (object != NULL && pap != NULL) { #ifdef POOL_VTOPHYS *pap = POOL_VTOPHYS(object); @@ -2088,6 +2093,8 @@ pool_cache_get_paddr(struct pool_cache * } simple_unlock(&pc->pc_slock); + KASSERT((((vaddr_t)object + pc->pc_pool->pr_itemoffset) & + (pc->pc_pool->pr_align - 1)) == 0); return (object); }