]> CyberLeo.Net >> Repos - FreeBSD/releng/9.2.git/blob - sys/ofed/drivers/infiniband/debug/mtrack.h
- Copy stable/9 to releng/9.2 as part of the 9.2-RELEASE cycle.
[FreeBSD/releng/9.2.git] / sys / ofed / drivers / infiniband / debug / mtrack.h
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