diff options
Diffstat (limited to 'include/linux/mempool.h')
-rw-r--r-- | include/linux/mempool.h | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/include/linux/mempool.h b/include/linux/mempool.h new file mode 100644 index 000000000000..4a36edf1c974 --- /dev/null +++ b/include/linux/mempool.h | |||
@@ -0,0 +1,37 @@ | |||
1 | /* | ||
2 | * memory buffer pool support | ||
3 | */ | ||
4 | #ifndef _LINUX_MEMPOOL_H | ||
5 | #define _LINUX_MEMPOOL_H | ||
6 | |||
7 | #include <linux/wait.h> | ||
8 | |||
9 | typedef void * (mempool_alloc_t)(unsigned int __nocast gfp_mask, void *pool_data); | ||
10 | typedef void (mempool_free_t)(void *element, void *pool_data); | ||
11 | |||
12 | typedef struct mempool_s { | ||
13 | spinlock_t lock; | ||
14 | int min_nr; /* nr of elements at *elements */ | ||
15 | int curr_nr; /* Current nr of elements at *elements */ | ||
16 | void **elements; | ||
17 | |||
18 | void *pool_data; | ||
19 | mempool_alloc_t *alloc; | ||
20 | mempool_free_t *free; | ||
21 | wait_queue_head_t wait; | ||
22 | } mempool_t; | ||
23 | extern mempool_t * mempool_create(int min_nr, mempool_alloc_t *alloc_fn, | ||
24 | mempool_free_t *free_fn, void *pool_data); | ||
25 | extern int mempool_resize(mempool_t *pool, int new_min_nr, unsigned int __nocast gfp_mask); | ||
26 | extern void mempool_destroy(mempool_t *pool); | ||
27 | extern void * mempool_alloc(mempool_t *pool, unsigned int __nocast gfp_mask); | ||
28 | extern void mempool_free(void *element, mempool_t *pool); | ||
29 | |||
30 | /* | ||
31 | * A mempool_alloc_t and mempool_free_t that get the memory from | ||
32 | * a slab that is passed in through pool_data. | ||
33 | */ | ||
34 | void *mempool_alloc_slab(unsigned int __nocast gfp_mask, void *pool_data); | ||
35 | void mempool_free_slab(void *element, void *pool_data); | ||
36 | |||
37 | #endif /* _LINUX_MEMPOOL_H */ | ||