diff options
-rw-r--r-- | include/linux/mempool.h | 12 | ||||
-rw-r--r-- | mm/mempool.c | 18 |
2 files changed, 30 insertions, 0 deletions
diff --git a/include/linux/mempool.h b/include/linux/mempool.h index f2427d7394b0..9787572e0ae7 100644 --- a/include/linux/mempool.h +++ b/include/linux/mempool.h | |||
@@ -38,4 +38,16 @@ extern void mempool_free(void *element, mempool_t *pool); | |||
38 | void *mempool_alloc_slab(gfp_t gfp_mask, void *pool_data); | 38 | void *mempool_alloc_slab(gfp_t gfp_mask, void *pool_data); |
39 | void mempool_free_slab(void *element, void *pool_data); | 39 | void mempool_free_slab(void *element, void *pool_data); |
40 | 40 | ||
41 | /* | ||
42 | * A mempool_alloc_t and mempool_free_t for a simple page allocator that | ||
43 | * allocates pages of the order specified by pool_data | ||
44 | */ | ||
45 | void *mempool_alloc_pages(gfp_t gfp_mask, void *pool_data); | ||
46 | void mempool_free_pages(void *element, void *pool_data); | ||
47 | static inline mempool_t *mempool_create_page_pool(int min_nr, int order) | ||
48 | { | ||
49 | return mempool_create(min_nr, mempool_alloc_pages, mempool_free_pages, | ||
50 | (void *)(long)order); | ||
51 | } | ||
52 | |||
41 | #endif /* _LINUX_MEMPOOL_H */ | 53 | #endif /* _LINUX_MEMPOOL_H */ |
diff --git a/mm/mempool.c b/mm/mempool.c index f71893ed3543..45c0112ca7b2 100644 --- a/mm/mempool.c +++ b/mm/mempool.c | |||
@@ -289,3 +289,21 @@ void mempool_free_slab(void *element, void *pool_data) | |||
289 | kmem_cache_free(mem, element); | 289 | kmem_cache_free(mem, element); |
290 | } | 290 | } |
291 | EXPORT_SYMBOL(mempool_free_slab); | 291 | EXPORT_SYMBOL(mempool_free_slab); |
292 | |||
293 | /* | ||
294 | * A simple mempool-backed page allocator that allocates pages | ||
295 | * of the order specified by pool_data. | ||
296 | */ | ||
297 | void *mempool_alloc_pages(gfp_t gfp_mask, void *pool_data) | ||
298 | { | ||
299 | int order = (int)(long)pool_data; | ||
300 | return alloc_pages(gfp_mask, order); | ||
301 | } | ||
302 | EXPORT_SYMBOL(mempool_alloc_pages); | ||
303 | |||
304 | void mempool_free_pages(void *element, void *pool_data) | ||
305 | { | ||
306 | int order = (int)(long)pool_data; | ||
307 | __free_pages(element, order); | ||
308 | } | ||
309 | EXPORT_SYMBOL(mempool_free_pages); | ||