radix tree test suite: track preempt_count
[muen/linux.git] / tools / testing / radix-tree / linux.c
1 #include <stdlib.h>
2 #include <string.h>
3 #include <malloc.h>
4 #include <unistd.h>
5 #include <assert.h>
6
7 #include <linux/mempool.h>
8 #include <linux/slab.h>
9 #include <urcu/uatomic.h>
10
11 int nr_allocated;
12 int preempt_count;
13
14 void *mempool_alloc(mempool_t *pool, int gfp_mask)
15 {
16         return pool->alloc(gfp_mask, pool->data);
17 }
18
19 void mempool_free(void *element, mempool_t *pool)
20 {
21         pool->free(element, pool->data);
22 }
23
24 mempool_t *mempool_create(int min_nr, mempool_alloc_t *alloc_fn,
25                         mempool_free_t *free_fn, void *pool_data)
26 {
27         mempool_t *ret = malloc(sizeof(*ret));
28
29         ret->alloc = alloc_fn;
30         ret->free = free_fn;
31         ret->data = pool_data;
32         return ret;
33 }
34
35 void *kmem_cache_alloc(struct kmem_cache *cachep, int flags)
36 {
37         void *ret;
38
39         if (flags & __GFP_NOWARN)
40                 return NULL;
41
42         ret = malloc(cachep->size);
43         if (cachep->ctor)
44                 cachep->ctor(ret);
45         uatomic_inc(&nr_allocated);
46         return ret;
47 }
48
49 void kmem_cache_free(struct kmem_cache *cachep, void *objp)
50 {
51         assert(objp);
52         uatomic_dec(&nr_allocated);
53         memset(objp, 0, cachep->size);
54         free(objp);
55 }
56
57 struct kmem_cache *
58 kmem_cache_create(const char *name, size_t size, size_t offset,
59         unsigned long flags, void (*ctor)(void *))
60 {
61         struct kmem_cache *ret = malloc(sizeof(*ret));
62
63         ret->size = size;
64         ret->ctor = ctor;
65         return ret;
66 }