1#ifndef __mtrack_h_
2#define __mtrack_h_
3
4#include <memtrack.h>
5
6#include <linux/slab.h>
7#include <linux/vmalloc.h>
8#include <linux/version.h>
9
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;                 \
14                                \
15        __memtrack_kz_addr = kmalloc(size, flags); \
16        if ( __memtrack_kz_addr ) {                               \
17                memset( __memtrack_kz_addr, 0, size) ; \
18        }                                                                     \
19        __memtrack_kz_addr;                                                                              \
20})
21
22#else
23#define kzalloc(size, flags) ({ \
24        void *__memtrack_addr;                 \
25                                \
26        __memtrack_addr = kzalloc(size, flags); \
27        if ( __memtrack_addr && (size)) {                               \
28                memtrack_alloc(MEMTRACK_KMALLOC, (unsigned long)(__memtrack_addr), size, __FILE__, __LINE__, flags); \
29        }                                                                     \
30        __memtrack_addr;                                                                              \
31})
32
33#endif
34
35#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)
36#define kcalloc(n, size, flags) kzalloc((n)*(size), flags)
37#else
38#define kcalloc(n, size, flags) ({ \
39        void *__memtrack_addr;                 \
40                                \
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); \
44        }                                                                     \
45        __memtrack_addr;                                                                              \
46})
47#endif
48
49
50
51#ifdef ZERO_OR_NULL_PTR
52#define kmalloc(sz, flgs) ({ \
53        void *__memtrack_addr;                 \
54                                \
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); \
58        }                                                                     \
59        __memtrack_addr;                                                                              \
60})
61#else
62#define kmalloc(sz, flgs) ({ \
63        void *__memtrack_addr;                 \
64                                \
65        __memtrack_addr = kmalloc(sz, flgs); \
66        if ( __memtrack_addr ) {                               \
67                memtrack_alloc(MEMTRACK_KMALLOC, (unsigned long)(__memtrack_addr), sz, __FILE__, __LINE__, flgs); \
68        }                                                                     \
69        __memtrack_addr;                                                                              \
70})
71
72#endif
73
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__); \
79        }                    \
80        kfree(__memtrack_addr); \
81})
82#else
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__); \
87        }                    \
88        kfree(__memtrack_addr); \
89})
90#endif
91
92
93
94
95
96
97#define vmalloc(size) ({ \
98        void *__memtrack_addr;                 \
99                                \
100        __memtrack_addr = vmalloc(size); \
101        if ( __memtrack_addr ) {                               \
102                memtrack_alloc(MEMTRACK_VMALLOC, (unsigned long)(__memtrack_addr), size, __FILE__, __LINE__, GFP_ATOMIC); \
103        }                                                                     \
104        __memtrack_addr;                                                                              \
105})
106
107
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__); \
112        }                    \
113        vfree(__memtrack_addr); \
114})
115
116
117#define kmem_cache_alloc(cache, flags) ({ \
118        void *__memtrack_addr;         \
119                                \
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); \
123        }                                                                     \
124        __memtrack_addr;                                                                              \
125})
126
127
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__); \
132        }                    \
133        kmem_cache_free(cache, __memtrack_addr); \
134})
135
136
137#endif /* __mtrack_h_ */
138
139