2 * memory buffer pool support
4 #ifndef _LINUX_MEMPOOL_H
5 #define _LINUX_MEMPOOL_H
7 #include <linux/compiler.h>
9 #include <linux/slab.h>
13 typedef void * (mempool_alloc_t)(gfp_t gfp_mask, void *pool_data);
14 typedef void (mempool_free_t)(void *element, void *pool_data);
16 typedef struct mempool_s {
19 mempool_alloc_t *alloc;
23 static inline bool mempool_initialized(mempool_t *pool)
28 extern int mempool_resize(mempool_t *pool, int new_min_nr);
30 static inline void mempool_free(void *element, mempool_t *pool)
35 static inline void *mempool_alloc(mempool_t *pool, gfp_t gfp_mask) __malloc
37 BUG_ON(!pool->elem_size);
38 return kmalloc(pool->elem_size, gfp_mask);
41 static inline void mempool_exit(mempool_t *pool) {}
43 static inline void mempool_destroy(mempool_t *pool)
49 mempool_init_slab_pool(mempool_t *pool, int min_nr, struct kmem_cache *kc)
55 static inline mempool_t *
56 mempool_create_slab_pool(int min_nr, struct kmem_cache *kc)
58 mempool_t *pool = malloc(sizeof(*pool));
63 static inline int mempool_init_kmalloc_pool(mempool_t *pool, int min_nr, size_t size)
65 pool->elem_size = size;
69 static inline int mempool_init_page_pool(mempool_t *pool, int min_nr, int order)
71 pool->elem_size = PAGE_SIZE << order;
75 static inline int mempool_init(mempool_t *pool, int min_nr,
76 mempool_alloc_t *alloc_fn,
77 mempool_free_t *free_fn,
80 pool->elem_size = (size_t) pool_data;
81 pool->pool_data = pool_data;
82 pool->alloc = alloc_fn;
87 #endif /* _LINUX_MEMPOOL_H */