| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- // SPDX-License-Identifier: GPL-2.0
- #include <stdio.h>
- #include <string.h>
- #include <urcu/uatomic.h>
- #include <linux/slab.h>
- #include <malloc.h>
- #include <linux/gfp.h>
- int kmalloc_nr_allocated;
- int kmalloc_verbose;
- void *kmalloc(size_t size, gfp_t gfp)
- {
- void *ret;
- if (!(gfp & __GFP_DIRECT_RECLAIM))
- return NULL;
- ret = malloc(size);
- uatomic_inc(&kmalloc_nr_allocated);
- if (kmalloc_verbose)
- printf("Allocating %p from malloc\n", ret);
- if (gfp & __GFP_ZERO)
- memset(ret, 0, size);
- return ret;
- }
- void kfree(void *p)
- {
- if (!p)
- return;
- uatomic_dec(&kmalloc_nr_allocated);
- if (kmalloc_verbose)
- printf("Freeing %p to malloc\n", p);
- free(p);
- }
- void *kmalloc_array(size_t n, size_t size, gfp_t gfp)
- {
- void *ret;
- if (!(gfp & __GFP_DIRECT_RECLAIM))
- return NULL;
- ret = calloc(n, size);
- uatomic_inc(&kmalloc_nr_allocated);
- if (kmalloc_verbose)
- printf("Allocating %p from calloc\n", ret);
- if (gfp & __GFP_ZERO)
- memset(ret, 0, n * size);
- return ret;
- }
|