2009-04-10 08:54:16 -04:00
# if !defined(_TRACE_KMEM_H) || defined(TRACE_HEADER_MULTI_READ)
2009-04-10 14:26:18 +08:00
# define _TRACE_KMEM_H
2008-08-10 20:14:03 +03:00
# include <linux/types.h>
2009-04-10 14:27:38 +08:00
# include <linux/tracepoint.h>
2008-08-10 20:14:03 +03:00
2009-04-10 08:54:16 -04:00
# undef TRACE_SYSTEM
# define TRACE_SYSTEM kmem
2008-08-10 20:14:03 +03:00
2009-05-15 16:16:30 -04:00
/*
* The order of these masks is important . Matching masks will be seen
* first and the left over flags will end up showing by themselves .
*
* For example , if we have GFP_KERNEL before GFP_USER we wil get :
*
* GFP_KERNEL | GFP_HARDWALL
*
* Thus most bits set go first .
*/
# define show_gfp_flags(flags) \
( flags ) ? __print_flags ( flags , " | " , \
{ ( unsigned long ) GFP_HIGHUSER_MOVABLE , " GFP_HIGHUSER_MOVABLE " } , \
{ ( unsigned long ) GFP_HIGHUSER , " GFP_HIGHUSER " } , \
{ ( unsigned long ) GFP_USER , " GFP_USER " } , \
{ ( unsigned long ) GFP_TEMPORARY , " GFP_TEMPORARY " } , \
{ ( unsigned long ) GFP_KERNEL , " GFP_KERNEL " } , \
{ ( unsigned long ) GFP_NOFS , " GFP_NOFS " } , \
{ ( unsigned long ) GFP_ATOMIC , " GFP_ATOMIC " } , \
{ ( unsigned long ) GFP_NOIO , " GFP_NOIO " } , \
{ ( unsigned long ) __GFP_HIGH , " GFP_HIGH " } , \
{ ( unsigned long ) __GFP_WAIT , " GFP_WAIT " } , \
{ ( unsigned long ) __GFP_IO , " GFP_IO " } , \
{ ( unsigned long ) __GFP_COLD , " GFP_COLD " } , \
{ ( unsigned long ) __GFP_NOWARN , " GFP_NOWARN " } , \
{ ( unsigned long ) __GFP_REPEAT , " GFP_REPEAT " } , \
{ ( unsigned long ) __GFP_NOFAIL , " GFP_NOFAIL " } , \
{ ( unsigned long ) __GFP_NORETRY , " GFP_NORETRY " } , \
{ ( unsigned long ) __GFP_COMP , " GFP_COMP " } , \
{ ( unsigned long ) __GFP_ZERO , " GFP_ZERO " } , \
{ ( unsigned long ) __GFP_NOMEMALLOC , " GFP_NOMEMALLOC " } , \
{ ( unsigned long ) __GFP_HARDWALL , " GFP_HARDWALL " } , \
{ ( unsigned long ) __GFP_THISNODE , " GFP_THISNODE " } , \
{ ( unsigned long ) __GFP_RECLAIMABLE , " GFP_RECLAIMABLE " } , \
{ ( unsigned long ) __GFP_MOVABLE , " GFP_MOVABLE " } \
) : " GFP_NOWAIT "
2009-04-10 08:54:16 -04:00
TRACE_EVENT ( kmalloc ,
TP_PROTO ( unsigned long call_site ,
const void * ptr ,
size_t bytes_req ,
size_t bytes_alloc ,
gfp_t gfp_flags ) ,
TP_ARGS ( call_site , ptr , bytes_req , bytes_alloc , gfp_flags ) ,
TP_STRUCT__entry (
__field ( unsigned long , call_site )
__field ( const void * , ptr )
__field ( size_t , bytes_req )
__field ( size_t , bytes_alloc )
__field ( gfp_t , gfp_flags )
) ,
TP_fast_assign (
__entry - > call_site = call_site ;
__entry - > ptr = ptr ;
__entry - > bytes_req = bytes_req ;
__entry - > bytes_alloc = bytes_alloc ;
__entry - > gfp_flags = gfp_flags ;
) ,
2009-05-15 16:16:30 -04:00
TP_printk ( " call_site=%lx ptr=%p bytes_req=%zu bytes_alloc=%zu gfp_flags=%s " ,
2009-04-10 08:54:16 -04:00
__entry - > call_site ,
__entry - > ptr ,
__entry - > bytes_req ,
__entry - > bytes_alloc ,
2009-05-15 16:16:30 -04:00
show_gfp_flags ( __entry - > gfp_flags ) )
2009-04-10 08:54:16 -04:00
) ;
TRACE_EVENT ( kmem_cache_alloc ,
TP_PROTO ( unsigned long call_site ,
const void * ptr ,
size_t bytes_req ,
size_t bytes_alloc ,
gfp_t gfp_flags ) ,
TP_ARGS ( call_site , ptr , bytes_req , bytes_alloc , gfp_flags ) ,
TP_STRUCT__entry (
__field ( unsigned long , call_site )
__field ( const void * , ptr )
__field ( size_t , bytes_req )
__field ( size_t , bytes_alloc )
__field ( gfp_t , gfp_flags )
) ,
TP_fast_assign (
__entry - > call_site = call_site ;
__entry - > ptr = ptr ;
__entry - > bytes_req = bytes_req ;
__entry - > bytes_alloc = bytes_alloc ;
__entry - > gfp_flags = gfp_flags ;
) ,
2009-05-15 16:16:30 -04:00
TP_printk ( " call_site=%lx ptr=%p bytes_req=%zu bytes_alloc=%zu gfp_flags=%s " ,
2009-04-10 08:54:16 -04:00
__entry - > call_site ,
__entry - > ptr ,
__entry - > bytes_req ,
__entry - > bytes_alloc ,
2009-05-15 16:16:30 -04:00
show_gfp_flags ( __entry - > gfp_flags ) )
2009-04-10 08:54:16 -04:00
) ;
TRACE_EVENT ( kmalloc_node ,
TP_PROTO ( unsigned long call_site ,
const void * ptr ,
size_t bytes_req ,
size_t bytes_alloc ,
gfp_t gfp_flags ,
int node ) ,
TP_ARGS ( call_site , ptr , bytes_req , bytes_alloc , gfp_flags , node ) ,
TP_STRUCT__entry (
__field ( unsigned long , call_site )
__field ( const void * , ptr )
__field ( size_t , bytes_req )
__field ( size_t , bytes_alloc )
__field ( gfp_t , gfp_flags )
__field ( int , node )
) ,
TP_fast_assign (
__entry - > call_site = call_site ;
__entry - > ptr = ptr ;
__entry - > bytes_req = bytes_req ;
__entry - > bytes_alloc = bytes_alloc ;
__entry - > gfp_flags = gfp_flags ;
__entry - > node = node ;
) ,
2009-05-15 16:16:30 -04:00
TP_printk ( " call_site=%lx ptr=%p bytes_req=%zu bytes_alloc=%zu gfp_flags=%s node=%d " ,
2009-04-10 08:54:16 -04:00
__entry - > call_site ,
__entry - > ptr ,
__entry - > bytes_req ,
__entry - > bytes_alloc ,
2009-05-15 16:16:30 -04:00
show_gfp_flags ( __entry - > gfp_flags ) ,
2009-04-10 08:54:16 -04:00
__entry - > node )
) ;
TRACE_EVENT ( kmem_cache_alloc_node ,
TP_PROTO ( unsigned long call_site ,
const void * ptr ,
size_t bytes_req ,
size_t bytes_alloc ,
gfp_t gfp_flags ,
int node ) ,
TP_ARGS ( call_site , ptr , bytes_req , bytes_alloc , gfp_flags , node ) ,
TP_STRUCT__entry (
__field ( unsigned long , call_site )
__field ( const void * , ptr )
__field ( size_t , bytes_req )
__field ( size_t , bytes_alloc )
__field ( gfp_t , gfp_flags )
__field ( int , node )
) ,
TP_fast_assign (
__entry - > call_site = call_site ;
__entry - > ptr = ptr ;
__entry - > bytes_req = bytes_req ;
__entry - > bytes_alloc = bytes_alloc ;
__entry - > gfp_flags = gfp_flags ;
__entry - > node = node ;
) ,
2009-05-15 16:16:30 -04:00
TP_printk ( " call_site=%lx ptr=%p bytes_req=%zu bytes_alloc=%zu gfp_flags=%s node=%d " ,
2009-04-10 08:54:16 -04:00
__entry - > call_site ,
__entry - > ptr ,
__entry - > bytes_req ,
__entry - > bytes_alloc ,
2009-05-15 16:16:30 -04:00
show_gfp_flags ( __entry - > gfp_flags ) ,
2009-04-10 08:54:16 -04:00
__entry - > node )
) ;
TRACE_EVENT ( kfree ,
TP_PROTO ( unsigned long call_site , const void * ptr ) ,
TP_ARGS ( call_site , ptr ) ,
TP_STRUCT__entry (
__field ( unsigned long , call_site )
__field ( const void * , ptr )
) ,
TP_fast_assign (
__entry - > call_site = call_site ;
__entry - > ptr = ptr ;
) ,
TP_printk ( " call_site=%lx ptr=%p " , __entry - > call_site , __entry - > ptr )
) ;
TRACE_EVENT ( kmem_cache_free ,
TP_PROTO ( unsigned long call_site , const void * ptr ) ,
TP_ARGS ( call_site , ptr ) ,
TP_STRUCT__entry (
__field ( unsigned long , call_site )
__field ( const void * , ptr )
) ,
TP_fast_assign (
__entry - > call_site = call_site ;
__entry - > ptr = ptr ;
) ,
TP_printk ( " call_site=%lx ptr=%p " , __entry - > call_site , __entry - > ptr )
) ;
2009-04-10 09:36:00 -04:00
# endif /* _TRACE_KMEM_H */
2009-04-10 08:54:16 -04:00
2009-04-10 09:36:00 -04:00
/* This part must be outside protection */
# include <trace/define_trace.h>