| // 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); |
| } |