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