2011-03-21 09:58:24 +00:00

139 lines
5.3 KiB
C

#ifndef __mtrack_h_
#define __mtrack_h_
#include <memtrack.h>
#include <linux/slab.h>
#include <linux/vmalloc.h>
#include <linux/version.h>
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,14)
#define RDMA_KZALLOC_H
#define kzalloc(size, flags) ({ \
void *__memtrack_kz_addr; \
\
__memtrack_kz_addr = kmalloc(size, flags); \
if ( __memtrack_kz_addr ) { \
memset( __memtrack_kz_addr, 0, size) ; \
} \
__memtrack_kz_addr; \
})
#else
#define kzalloc(size, flags) ({ \
void *__memtrack_addr; \
\
__memtrack_addr = kzalloc(size, flags); \
if ( __memtrack_addr && (size)) { \
memtrack_alloc(MEMTRACK_KMALLOC, (unsigned long)(__memtrack_addr), size, __FILE__, __LINE__, flags); \
} \
__memtrack_addr; \
})
#endif
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)
#define kcalloc(n, size, flags) kzalloc((n)*(size), flags)
#else
#define kcalloc(n, size, flags) ({ \
void *__memtrack_addr; \
\
__memtrack_addr = kcalloc(n, size, flags); \
if ( __memtrack_addr && (size)) { \
memtrack_alloc(MEMTRACK_KMALLOC, (unsigned long)(__memtrack_addr), (n)*(size), __FILE__, __LINE__, flags); \
} \
__memtrack_addr; \
})
#endif
#ifdef ZERO_OR_NULL_PTR
#define kmalloc(sz, flgs) ({ \
void *__memtrack_addr; \
\
__memtrack_addr = kmalloc(sz, flgs); \
if ( !ZERO_OR_NULL_PTR(__memtrack_addr)) { \
memtrack_alloc(MEMTRACK_KMALLOC, (unsigned long)(__memtrack_addr), sz, __FILE__, __LINE__, flgs); \
} \
__memtrack_addr; \
})
#else
#define kmalloc(sz, flgs) ({ \
void *__memtrack_addr; \
\
__memtrack_addr = kmalloc(sz, flgs); \
if ( __memtrack_addr ) { \
memtrack_alloc(MEMTRACK_KMALLOC, (unsigned long)(__memtrack_addr), sz, __FILE__, __LINE__, flgs); \
} \
__memtrack_addr; \
})
#endif
#ifdef ZERO_OR_NULL_PTR
#define kfree(addr) ({ \
void *__memtrack_addr = (void *)addr; \
if ( !ZERO_OR_NULL_PTR(__memtrack_addr) ) { \
memtrack_free(MEMTRACK_KMALLOC, (unsigned long)(__memtrack_addr), __FILE__, __LINE__); \
} \
kfree(__memtrack_addr); \
})
#else
#define kfree(addr) ({ \
void *__memtrack_addr = (void *)addr; \
if ( __memtrack_addr ) { \
memtrack_free(MEMTRACK_KMALLOC, (unsigned long)(__memtrack_addr), __FILE__, __LINE__); \
} \
kfree(__memtrack_addr); \
})
#endif
#define vmalloc(size) ({ \
void *__memtrack_addr; \
\
__memtrack_addr = vmalloc(size); \
if ( __memtrack_addr ) { \
memtrack_alloc(MEMTRACK_VMALLOC, (unsigned long)(__memtrack_addr), size, __FILE__, __LINE__, GFP_ATOMIC); \
} \
__memtrack_addr; \
})
#define vfree(addr) ({ \
void *__memtrack_addr = (void *)addr; \
if ( __memtrack_addr ) { \
memtrack_free(MEMTRACK_VMALLOC, (unsigned long)(__memtrack_addr), __FILE__, __LINE__); \
} \
vfree(__memtrack_addr); \
})
#define kmem_cache_alloc(cache, flags) ({ \
void *__memtrack_addr; \
\
__memtrack_addr = kmem_cache_alloc(cache, flags); \
if ( __memtrack_addr ) { \
memtrack_alloc(MEMTRACK_KMEM_OBJ, (unsigned long)(__memtrack_addr), 1, __FILE__, __LINE__, flags); \
} \
__memtrack_addr; \
})
#define kmem_cache_free(cache, addr) ({ \
void *__memtrack_addr = (void *)addr; \
if ( __memtrack_addr ) { \
memtrack_free(MEMTRACK_KMEM_OBJ, (unsigned long)(__memtrack_addr), __FILE__, __LINE__); \
} \
kmem_cache_free(cache, __memtrack_addr); \
})
#endif /* __mtrack_h_ */