1248590Smm#ifndef __mtrack_h_
2248590Smm#define __mtrack_h_
3248590Smm
4248590Smm#include <memtrack.h>
5248590Smm
6248590Smm#include <linux/slab.h>
7248590Smm#include <linux/vmalloc.h>
8248590Smm#include <linux/version.h>
9248590Smm
10248590Smm#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,14)
11248590Smm#define RDMA_KZALLOC_H
12248590Smm#define kzalloc(size, flags)  ({ \
13248590Smm        void *__memtrack_kz_addr;                 \
14248590Smm                                \
15248590Smm        __memtrack_kz_addr = kmalloc(size, flags); \
16248590Smm        if ( __memtrack_kz_addr ) {                               \
17248590Smm                memset( __memtrack_kz_addr, 0, size) ; \
18248590Smm        }                                                                     \
19248590Smm        __memtrack_kz_addr;                                                                              \
20248590Smm})
21248590Smm
22248590Smm#else
23248590Smm#define kzalloc(size, flags) ({ \
24248590Smm        void *__memtrack_addr;                 \
25248590Smm                                \
26248590Smm        __memtrack_addr = kzalloc(size, flags); \
27248590Smm        if ( __memtrack_addr && (size)) {                               \
28248590Smm                memtrack_alloc(MEMTRACK_KMALLOC, (unsigned long)(__memtrack_addr), size, __FILE__, __LINE__, flags); \
29248590Smm        }                                                                     \
30248590Smm        __memtrack_addr;                                                                              \
31248590Smm})
32248590Smm
33248590Smm#endif
34248590Smm
35248590Smm#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)
36248590Smm#define kcalloc(n, size, flags) kzalloc((n)*(size), flags)
37248590Smm#else
38248590Smm#define kcalloc(n, size, flags) ({ \
39248590Smm        void *__memtrack_addr;                 \
40248590Smm                                \
41248590Smm        __memtrack_addr = kcalloc(n, size, flags); \
42248590Smm        if ( __memtrack_addr && (size)) {                               \
43248590Smm                memtrack_alloc(MEMTRACK_KMALLOC, (unsigned long)(__memtrack_addr), (n)*(size), __FILE__, __LINE__, flags); \
44248590Smm        }                                                                     \
45248590Smm        __memtrack_addr;                                                                              \
46248590Smm})
47248590Smm#endif
48248590Smm
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