Lines Matching refs:pool
263 struct xmem_pool *pool) in ADD_REGION() argument
273 INSERT_BLOCK(b, pool, fl, sl); in ADD_REGION()
278 pool->used_size += BHDR_OVERHEAD; /* only sentinel block is "used" */ in ADD_REGION()
279 pool->num_regions++; in ADD_REGION()
294 struct xmem_pool *pool; in xmem_pool_create() local
299 pool_bytes = ROUNDUP_SIZE(sizeof(*pool)); in xmem_pool_create()
302 pool = (void *)alloc_xenheap_pages(pool_order, 0); in xmem_pool_create()
303 if ( pool == NULL ) in xmem_pool_create()
305 memset(pool, 0, pool_bytes); in xmem_pool_create()
313 pool->used_size = 0; in xmem_pool_create()
315 pool->init_size = init_size; in xmem_pool_create()
316 pool->max_size = max_size; in xmem_pool_create()
317 pool->grow_size = grow_size; in xmem_pool_create()
318 pool->get_mem = get_mem; in xmem_pool_create()
319 pool->put_mem = put_mem; in xmem_pool_create()
320 strlcpy(pool->name, name, sizeof(pool->name)); in xmem_pool_create()
325 spin_lock_init(&pool->lock); in xmem_pool_create()
328 list_add_tail(&pool->list, &pool_list_head); in xmem_pool_create()
331 return pool; in xmem_pool_create()
334 unsigned long xmem_pool_get_used_size(struct xmem_pool *pool) in xmem_pool_get_used_size() argument
336 return pool->used_size; in xmem_pool_get_used_size()
339 unsigned long xmem_pool_get_total_size(struct xmem_pool *pool) in xmem_pool_get_total_size() argument
342 total = ROUNDUP_SIZE(sizeof(*pool)) in xmem_pool_get_total_size()
343 + pool->init_size in xmem_pool_get_total_size()
344 + (pool->num_regions - 1) * pool->grow_size; in xmem_pool_get_total_size()
348 void xmem_pool_destroy(struct xmem_pool *pool) in xmem_pool_destroy() argument
352 if ( pool == NULL ) in xmem_pool_destroy()
356 if ( xmem_pool_get_used_size(pool) == BHDR_OVERHEAD ) in xmem_pool_destroy()
358 ASSERT(!pool->init_region); in xmem_pool_destroy()
359 pool->used_size -= BHDR_OVERHEAD; in xmem_pool_destroy()
363 if ( xmem_pool_get_used_size(pool) ) in xmem_pool_destroy()
366 pool->name, pool, xmem_pool_get_used_size(pool)); in xmem_pool_destroy()
369 list_del_init(&pool->list); in xmem_pool_destroy()
372 pool_bytes = ROUNDUP_SIZE(sizeof(*pool)); in xmem_pool_destroy()
374 free_xenheap_pages(pool,pool_order); in xmem_pool_destroy()
377 void *xmem_pool_alloc(unsigned long size, struct xmem_pool *pool) in xmem_pool_alloc() argument
383 if ( pool->init_region == NULL ) in xmem_pool_alloc()
385 if ( (region = pool->get_mem(pool->init_size)) == NULL ) in xmem_pool_alloc()
387 ADD_REGION(region, pool->init_size, pool); in xmem_pool_alloc()
388 pool->init_region = region; in xmem_pool_alloc()
394 spin_lock(&pool->lock); in xmem_pool_alloc()
399 if ( !(b = FIND_SUITABLE_BLOCK(pool, &fl, &sl)) ) in xmem_pool_alloc()
402 if ( size > (pool->grow_size - 2 * BHDR_OVERHEAD) ) in xmem_pool_alloc()
404 if ( pool->max_size && (pool->init_size + in xmem_pool_alloc()
405 pool->num_regions * pool->grow_size in xmem_pool_alloc()
406 > pool->max_size) ) in xmem_pool_alloc()
408 spin_unlock(&pool->lock); in xmem_pool_alloc()
409 if ( (region = pool->get_mem(pool->grow_size)) == NULL ) in xmem_pool_alloc()
411 spin_lock(&pool->lock); in xmem_pool_alloc()
412 ADD_REGION(region, pool->grow_size, pool); in xmem_pool_alloc()
415 EXTRACT_BLOCK_HDR(b, pool, fl, sl); in xmem_pool_alloc()
432 INSERT_BLOCK(b2, pool, fl, sl); in xmem_pool_alloc()
442 pool->used_size += (b->size & BLOCK_SIZE_MASK) + BHDR_OVERHEAD; in xmem_pool_alloc()
444 spin_unlock(&pool->lock); in xmem_pool_alloc()
449 spin_unlock(&pool->lock); in xmem_pool_alloc()
455 void xmem_pool_free(void *ptr, struct xmem_pool *pool) in xmem_pool_free() argument
465 spin_lock(&pool->lock); in xmem_pool_free()
467 pool->used_size -= (b->size & BLOCK_SIZE_MASK) + BHDR_OVERHEAD; in xmem_pool_free()
473 EXTRACT_BLOCK(tmp_b, pool, fl, sl); in xmem_pool_free()
480 EXTRACT_BLOCK(tmp_b, pool, fl, sl); in xmem_pool_free()
491 pool->put_mem(b); in xmem_pool_free()
492 pool->num_regions--; in xmem_pool_free()
493 pool->used_size -= BHDR_OVERHEAD; /* sentinel block header */ in xmem_pool_free()
497 INSERT_BLOCK(b, pool, fl, sl); in xmem_pool_free()
502 spin_unlock(&pool->lock); in xmem_pool_free()
505 int xmem_pool_maxalloc(struct xmem_pool *pool) in xmem_pool_maxalloc() argument
507 return pool->grow_size - (2 * BHDR_OVERHEAD); in xmem_pool_maxalloc()