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