| version 1.112.4.1, 2006/04/19 05:14:00 |
version 1.113, 2006/03/17 10:09:25 |
|
|
| pool_init(struct pool *pp, size_t size, u_int align, u_int ioff, int flags, |
pool_init(struct pool *pp, size_t size, u_int align, u_int ioff, int flags, |
| const char *wchan, struct pool_allocator *palloc) |
const char *wchan, struct pool_allocator *palloc) |
| { |
{ |
| #ifdef DEBUG |
int off, slack; |
| struct pool *pp1; |
|
| #endif |
|
| size_t trysize, phsize; |
size_t trysize, phsize; |
| int off, slack, s; |
int s; |
| |
|
| KASSERT((1UL << (CHAR_BIT * sizeof(pool_item_freelist_t))) - 2 >= |
KASSERT((1UL << (CHAR_BIT * sizeof(pool_item_freelist_t))) - 2 >= |
| PHPOOL_FREELIST_NELEM(PHPOOL_MAX - 1)); |
PHPOOL_FREELIST_NELEM(PHPOOL_MAX - 1)); |
| |
|
| #ifdef DEBUG |
|
| /* |
|
| * Check that the pool hasn't already been initialised and |
|
| * added to the list of all pools. |
|
| */ |
|
| LIST_FOREACH(pp1, &pool_head, pr_poollist) { |
|
| if (pp == pp1) |
|
| panic("pool_init: pool %s already initialised", |
|
| wchan); |
|
| } |
|
| #endif |
|
| |
|
| #ifdef POOL_DIAGNOSTIC |
#ifdef POOL_DIAGNOSTIC |
| /* |
/* |
| * Always log if POOL_DIAGNOSTIC is defined. |
* Always log if POOL_DIAGNOSTIC is defined. |
| Line 1234 pool_grow(struct pool *pp, int flags) |
|
| Line 1220 pool_grow(struct pool *pp, int flags) |
|
| simple_lock(&pp->pr_slock); |
simple_lock(&pp->pr_slock); |
| pool_prime_page(pp, cp, ph); |
pool_prime_page(pp, cp, ph); |
| pp->pr_npagealloc++; |
pp->pr_npagealloc++; |
| |
pp->pr_minpages++; |
| return 0; |
return 0; |
| } |
} |
| |
|
| Line 1543 pool_drain(void *arg) |
|
| Line 1530 pool_drain(void *arg) |
|
| drainpp = LIST_NEXT(pp, pr_poollist); |
drainpp = LIST_NEXT(pp, pr_poollist); |
| } |
} |
| simple_unlock(&pool_head_slock); |
simple_unlock(&pool_head_slock); |
| if (pp) |
pool_reclaim(pp); |
| pool_reclaim(pp); |
|
| splx(s); |
splx(s); |
| } |
} |
| |
|