xref: /openbmc/linux/tools/testing/radix-tree/linux.c (revision 293d5b43)
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 
13 void *mempool_alloc(mempool_t *pool, int gfp_mask)
14 {
15 	return pool->alloc(gfp_mask, pool->data);
16 }
17 
18 void mempool_free(void *element, mempool_t *pool)
19 {
20 	pool->free(element, pool->data);
21 }
22 
23 mempool_t *mempool_create(int min_nr, mempool_alloc_t *alloc_fn,
24 			mempool_free_t *free_fn, void *pool_data)
25 {
26 	mempool_t *ret = malloc(sizeof(*ret));
27 
28 	ret->alloc = alloc_fn;
29 	ret->free = free_fn;
30 	ret->data = pool_data;
31 	return ret;
32 }
33 
34 void *kmem_cache_alloc(struct kmem_cache *cachep, int flags)
35 {
36 	void *ret = malloc(cachep->size);
37 	if (cachep->ctor)
38 		cachep->ctor(ret);
39 	uatomic_inc(&nr_allocated);
40 	return ret;
41 }
42 
43 void kmem_cache_free(struct kmem_cache *cachep, void *objp)
44 {
45 	assert(objp);
46 	uatomic_dec(&nr_allocated);
47 	memset(objp, 0, cachep->size);
48 	free(objp);
49 }
50 
51 struct kmem_cache *
52 kmem_cache_create(const char *name, size_t size, size_t offset,
53 	unsigned long flags, void (*ctor)(void *))
54 {
55 	struct kmem_cache *ret = malloc(sizeof(*ret));
56 
57 	ret->size = size;
58 	ret->ctor = ctor;
59 	return ret;
60 }
61