LCOV - code coverage report
Current view: top level - lkbce/include/linux - mempool.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 5 5 100.0 %
Date: 2017-01-25 Functions: 1 1 100.0 %

          Line data    Source code
       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             : struct kmem_cache;
      10             : 
      11           1 : typedef void * (mempool_alloc_t)(gfp_t gfp_mask, void *pool_data);
      12           1 : typedef void (mempool_free_t)(void *element, void *pool_data);
      13           1 : 
      14             : typedef struct mempool_s {
      15             :         spinlock_t lock;
      16             :         int min_nr;             /* nr of elements at *elements */
      17             :         int curr_nr;            /* Current nr of elements at *elements */
      18             :         void **elements;
      19             : 
      20             :         void *pool_data;
      21             :         mempool_alloc_t *alloc;
      22             :         mempool_free_t *free;
      23             :         wait_queue_head_t wait;
      24           1 : } mempool_t;
      25             : 
      26             : extern mempool_t *mempool_create(int min_nr, mempool_alloc_t *alloc_fn,
      27             :                         mempool_free_t *free_fn, void *pool_data);
      28             : extern mempool_t *mempool_create_node(int min_nr, mempool_alloc_t *alloc_fn,
      29             :                         mempool_free_t *free_fn, void *pool_data, int nid);
      30             : 
      31             : extern int mempool_resize(mempool_t *pool, int new_min_nr, gfp_t gfp_mask);
      32             : extern void mempool_destroy(mempool_t *pool);
      33             : extern void * mempool_alloc(mempool_t *pool, gfp_t gfp_mask);
      34             : extern void mempool_free(void *element, mempool_t *pool);
      35             : 
      36             : /*
      37             :  * A mempool_alloc_t and mempool_free_t that get the memory from
      38             :  * a slab that is passed in through pool_data.
      39             :  */
      40             : void *mempool_alloc_slab(gfp_t gfp_mask, void *pool_data);
      41             : void mempool_free_slab(void *element, void *pool_data);
      42             : static inline mempool_t *
      43             : mempool_create_slab_pool(int min_nr, struct kmem_cache *kc)
      44             : {
      45           3 :         return mempool_create(min_nr, mempool_alloc_slab, mempool_free_slab,
      46             :                               (void *) kc);
      47             : }
      48             : 
      49             : /*
      50             :  * a mempool_alloc_t and a mempool_free_t to kmalloc and kfree the
      51             :  * amount of memory specified by pool_data
      52             :  */
      53             : void *mempool_kmalloc(gfp_t gfp_mask, void *pool_data);
      54             : void mempool_kfree(void *element, void *pool_data);
      55             : static inline mempool_t *mempool_create_kmalloc_pool(int min_nr, size_t size)
      56             : {
      57             :         return mempool_create(min_nr, mempool_kmalloc, mempool_kfree,
      58             :                               (void *) size);
      59             : }
      60             : 
      61             : /*
      62             :  * A mempool_alloc_t and mempool_free_t for a simple page allocator that
      63             :  * allocates pages of the order specified by pool_data
      64             :  */
      65             : void *mempool_alloc_pages(gfp_t gfp_mask, void *pool_data);
      66             : void mempool_free_pages(void *element, void *pool_data);
      67             : static inline mempool_t *mempool_create_page_pool(int min_nr, int order)
      68             : {
      69             :         return mempool_create(min_nr, mempool_alloc_pages, mempool_free_pages,
      70             :                               (void *)(long)order);
      71             : }
      72             : 
      73             : #endif /* _LINUX_MEMPOOL_H */

Generated by: LCOV version 1.10