6 #include <linux/slab.h>
7 #include <linux/vmalloc.h>
8 #include <linux/version.h>
10 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,14)
11 #define RDMA_KZALLOC_H
12 #define kzalloc(size, flags) ({ \
13 void *__memtrack_kz_addr; \
15 __memtrack_kz_addr = kmalloc(size, flags); \
16 if ( __memtrack_kz_addr ) { \
17 memset( __memtrack_kz_addr, 0, size) ; \
23 #define kzalloc(size, flags) ({ \
24 void *__memtrack_addr; \
26 __memtrack_addr = kzalloc(size, flags); \
27 if ( __memtrack_addr && (size)) { \
28 memtrack_alloc(MEMTRACK_KMALLOC, (unsigned long)(__memtrack_addr), size, __FILE__, __LINE__, flags); \
35 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)
36 #define kcalloc(n, size, flags) kzalloc((n)*(size), flags)
38 #define kcalloc(n, size, flags) ({ \
39 void *__memtrack_addr; \
41 __memtrack_addr = kcalloc(n, size, flags); \
42 if ( __memtrack_addr && (size)) { \
43 memtrack_alloc(MEMTRACK_KMALLOC, (unsigned long)(__memtrack_addr), (n)*(size), __FILE__, __LINE__, flags); \
51 #ifdef ZERO_OR_NULL_PTR
52 #define kmalloc(sz, flgs) ({ \
53 void *__memtrack_addr; \
55 __memtrack_addr = kmalloc(sz, flgs); \
56 if ( !ZERO_OR_NULL_PTR(__memtrack_addr)) { \
57 memtrack_alloc(MEMTRACK_KMALLOC, (unsigned long)(__memtrack_addr), sz, __FILE__, __LINE__, flgs); \
62 #define kmalloc(sz, flgs) ({ \
63 void *__memtrack_addr; \
65 __memtrack_addr = kmalloc(sz, flgs); \
66 if ( __memtrack_addr ) { \
67 memtrack_alloc(MEMTRACK_KMALLOC, (unsigned long)(__memtrack_addr), sz, __FILE__, __LINE__, flgs); \
74 #ifdef ZERO_OR_NULL_PTR
75 #define kfree(addr) ({ \
76 void *__memtrack_addr = (void *)addr; \
77 if ( !ZERO_OR_NULL_PTR(__memtrack_addr) ) { \
78 memtrack_free(MEMTRACK_KMALLOC, (unsigned long)(__memtrack_addr), __FILE__, __LINE__); \
80 kfree(__memtrack_addr); \
83 #define kfree(addr) ({ \
84 void *__memtrack_addr = (void *)addr; \
85 if ( __memtrack_addr ) { \
86 memtrack_free(MEMTRACK_KMALLOC, (unsigned long)(__memtrack_addr), __FILE__, __LINE__); \
88 kfree(__memtrack_addr); \
97 #define vmalloc(size) ({ \
98 void *__memtrack_addr; \
100 __memtrack_addr = vmalloc(size); \
101 if ( __memtrack_addr ) { \
102 memtrack_alloc(MEMTRACK_VMALLOC, (unsigned long)(__memtrack_addr), size, __FILE__, __LINE__, GFP_ATOMIC); \
108 #define vfree(addr) ({ \
109 void *__memtrack_addr = (void *)addr; \
110 if ( __memtrack_addr ) { \
111 memtrack_free(MEMTRACK_VMALLOC, (unsigned long)(__memtrack_addr), __FILE__, __LINE__); \
113 vfree(__memtrack_addr); \
117 #define kmem_cache_alloc(cache, flags) ({ \
118 void *__memtrack_addr; \
120 __memtrack_addr = kmem_cache_alloc(cache, flags); \
121 if ( __memtrack_addr ) { \
122 memtrack_alloc(MEMTRACK_KMEM_OBJ, (unsigned long)(__memtrack_addr), 1, __FILE__, __LINE__, flags); \
128 #define kmem_cache_free(cache, addr) ({ \
129 void *__memtrack_addr = (void *)addr; \
130 if ( __memtrack_addr ) { \
131 memtrack_free(MEMTRACK_KMEM_OBJ, (unsigned long)(__memtrack_addr), __FILE__, __LINE__); \
133 kmem_cache_free(cache, __memtrack_addr); \
137 #endif /* __mtrack_h_ */