lkml.org 
[lkml]   [2009]   [Apr]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: [PATCH 2/2] tracepoint: Make kmem tracepoint use TRACE_EVENT macro
    On Fri, Apr 10, 2009 at 02:27:38PM +0800, Zhaolei wrote:
    > TRACE_EVENT is more unify and generic for define a tracepoint.
    > It also add ftrace support for this tracepoint.
    >
    > Signed-off-by: Zhao Lei <zhaolei@cn.fujitsu.com>
    > ---


    Nice!
    It would be good to also propagate this conversion to some other tracers.
    It think about power, workqueue and block tracers.

    I may have some time to work on the workqueue tracer soon.

    Another idea: I plan to provide an "enable" file per trace event subsystem
    so that we can quickly toggle a whole batch of event tracing for
    any targeted subsystem.

    Ingo also suggested a quick toggle for all events. As an end result, me
    would have a hierarchical level of enable files:

    ./events
    enable
    subsys1/
    enable
    subsys1_event1/
    enable
    ....
    subsys1_event2/
    ...
    subsys2/
    enable
    subsys2_event1/
    subsys2_event2/
    ...
    ...

    I will work on it.
    The root enable file will be only useful for quick regression tests anyway. We will
    have some suprises.... :-)

    Thanks,
    Frederic.



    > include/trace/kmem.h | 39 +-------
    > include/trace/kmem_event_types.h | 193 +++++++++++++++++++++++++++++++++++++
    > include/trace/trace_event_types.h | 1 +
    > include/trace/trace_events.h | 1 +
    > 4 files changed, 197 insertions(+), 37 deletions(-)
    > create mode 100644 include/trace/kmem_event_types.h
    >
    > diff --git a/include/trace/kmem.h b/include/trace/kmem.h
    > index 24d2519..46efc24 100644
    > --- a/include/trace/kmem.h
    > +++ b/include/trace/kmem.h
    > @@ -1,44 +1,9 @@
    > #ifndef _TRACE_KMEM_H
    > #define _TRACE_KMEM_H
    >
    > -#include <linux/tracepoint.h>
    > #include <linux/types.h>
    > +#include <linux/tracepoint.h>
    >
    > -DECLARE_TRACE(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));
    > -DECLARE_TRACE(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));
    > -DECLARE_TRACE(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));
    > -DECLARE_TRACE(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));
    > -DECLARE_TRACE(kfree,
    > - TP_PROTO(unsigned long call_site, const void *ptr),
    > - TP_ARGS(call_site, ptr));
    > -DECLARE_TRACE(kmem_cache_free,
    > - TP_PROTO(unsigned long call_site, const void *ptr),
    > - TP_ARGS(call_site, ptr));
    > +#include <trace/kmem_event_types.h>
    >
    > #endif /* _TRACE_KMEM_H */
    > diff --git a/include/trace/kmem_event_types.h b/include/trace/kmem_event_types.h
    > new file mode 100644
    > index 0000000..4ff420f
    > --- /dev/null
    > +++ b/include/trace/kmem_event_types.h
    > @@ -0,0 +1,193 @@
    > +
    > +/* use <trace/kmem.h> instead */
    > +#ifndef TRACE_EVENT
    > +# error Do not include this file directly.
    > +# error Unless you know what you are doing.
    > +#endif
    > +
    > +#undef TRACE_SYSTEM
    > +#define TRACE_SYSTEM kmem
    > +
    > +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;
    > + ),
    > +
    > + TP_printk("call_site=%lx ptr=%p bytes_req=%zu bytes_alloc=%zu gfp_flags=%08x",
    > + __entry->call_site,
    > + __entry->ptr,
    > + __entry->bytes_req,
    > + __entry->bytes_alloc,
    > + __entry->gfp_flags)
    > +);
    > +
    > +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;
    > + ),
    > +
    > + TP_printk("call_site=%lx ptr=%p bytes_req=%zu bytes_alloc=%zu gfp_flags=%08x",
    > + __entry->call_site,
    > + __entry->ptr,
    > + __entry->bytes_req,
    > + __entry->bytes_alloc,
    > + __entry->gfp_flags)
    > +);
    > +
    > +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;
    > + ),
    > +
    > + TP_printk("call_site=%lx ptr=%p bytes_req=%zu bytes_alloc=%zu gfp_flags=%08x node=%d",
    > + __entry->call_site,
    > + __entry->ptr,
    > + __entry->bytes_req,
    > + __entry->bytes_alloc,
    > + __entry->gfp_flags,
    > + __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;
    > + ),
    > +
    > + TP_printk("call_site=%lx ptr=%p bytes_req=%zu bytes_alloc=%zu gfp_flags=%08x node=%d",
    > + __entry->call_site,
    > + __entry->ptr,
    > + __entry->bytes_req,
    > + __entry->bytes_alloc,
    > + __entry->gfp_flags,
    > + __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)
    > +);
    > +
    > +#undef TRACE_SYSTEM
    > diff --git a/include/trace/trace_event_types.h b/include/trace/trace_event_types.h
    > index 33b6bfc..552a50e 100644
    > --- a/include/trace/trace_event_types.h
    > +++ b/include/trace/trace_event_types.h
    > @@ -4,3 +4,4 @@
    > #include <trace/irq_event_types.h>
    > #include <trace/lockdep_event_types.h>
    > #include <trace/skb_event_types.h>
    > +#include <trace/kmem_event_types.h>
    > diff --git a/include/trace/trace_events.h b/include/trace/trace_events.h
    > index 0e2aa80..13d6b85 100644
    > --- a/include/trace/trace_events.h
    > +++ b/include/trace/trace_events.h
    > @@ -4,3 +4,4 @@
    > #include <trace/irq.h>
    > #include <trace/lockdep.h>
    > #include <trace/skb.h>
    > +#include <trace/kmem.h>
    > --
    > 1.5.5.3
    >
    >


    \
     
     \ /
      Last update: 2009-04-10 15:31    [W:0.078 / U:296.868 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site