Skip to content

Commit

Permalink
tracing: consolidate trace and trace_event headers
Browse files Browse the repository at this point in the history
Impact: clean up

Neil Horman (et. al.) criticized the way the trace events were broken up
into two files. The reason for that was that ftrace needed to separate out
the declarations from where the #include <linux/tracepoint.h> was used.
It then dawned on me that the tracepoint.h header only needs to define the
TRACE_EVENT macro if it is not already defined.

The solution is simply to test if TRACE_EVENT is defined, and if it is not
then the linux/tracepoint.h header can define it. This change consolidates
all the <traces>.h and <traces>_event_types.h into the <traces>.h file.

Reported-by: Neil Horman <nhorman@tuxdriver.com>
Reported-by: Theodore Tso <tytso@mit.edu>
Reported-by: Jiaying Zhang <jiayingz@google.com>
Cc: Zhaolei <zhaolei@cn.fujitsu.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Jason Baron <jbaron@redhat.com>
Cc: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
  • Loading branch information
Steven Rostedt authored and Steven Rostedt committed Apr 14, 2009
1 parent 0a19e53 commit ea20d92
Show file tree
Hide file tree
Showing 15 changed files with 663 additions and 518 deletions.
9 changes: 8 additions & 1 deletion include/linux/tracepoint.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@ struct tracepoint {
* Keep in sync with vmlinux.lds.h.
*/

#ifndef DECLARE_TRACE

#define TP_PROTO(args...) args
#define TP_ARGS(args...) args

Expand Down Expand Up @@ -114,6 +116,7 @@ static inline void tracepoint_update_probe_range(struct tracepoint *begin,
struct tracepoint *end)
{ }
#endif /* CONFIG_TRACEPOINTS */
#endif /* DECLARE_TRACE */

/*
* Connect a probe to a tracepoint.
Expand Down Expand Up @@ -154,10 +157,13 @@ static inline void tracepoint_synchronize_unregister(void)
}

#define PARAMS(args...) args

#ifndef TRACE_FORMAT
#define TRACE_FORMAT(name, proto, args, fmt) \
DECLARE_TRACE(name, PARAMS(proto), PARAMS(args))
#endif


#ifndef TRACE_EVENT
/*
* For use with the TRACE_EVENT macro:
*
Expand Down Expand Up @@ -262,5 +268,6 @@ static inline void tracepoint_synchronize_unregister(void)

#define TRACE_EVENT(name, proto, args, struct, assign, print) \
DECLARE_TRACE(name, PARAMS(proto), PARAMS(args))
#endif

#endif
51 changes: 48 additions & 3 deletions include/trace/irq.h
Original file line number Diff line number Diff line change
@@ -1,9 +1,54 @@
#ifndef _TRACE_IRQ_H
#if !defined(_TRACE_IRQ_H) || defined(TRACE_HEADER_MULTI_READ)
#define _TRACE_IRQ_H

#include <linux/interrupt.h>
#include <linux/tracepoint.h>
#include <linux/interrupt.h>

#undef TRACE_SYSTEM
#define TRACE_SYSTEM irq

/*
* Tracepoint for entry of interrupt handler:
*/
TRACE_FORMAT(irq_handler_entry,
TP_PROTO(int irq, struct irqaction *action),
TP_ARGS(irq, action),
TP_FMT("irq=%d handler=%s", irq, action->name)
);

/*
* Tracepoint for return of an interrupt handler:
*/
TRACE_EVENT(irq_handler_exit,

TP_PROTO(int irq, struct irqaction *action, int ret),

TP_ARGS(irq, action, ret),

TP_STRUCT__entry(
__field( int, irq )
__field( int, ret )
),

TP_fast_assign(
__entry->irq = irq;
__entry->ret = ret;
),

TP_printk("irq=%d return=%s",
__entry->irq, __entry->ret ? "handled" : "unhandled")
);

TRACE_FORMAT(softirq_entry,
TP_PROTO(struct softirq_action *h, struct softirq_action *vec),
TP_ARGS(h, vec),
TP_FMT("softirq=%d action=%s", (int)(h - vec), softirq_to_name[h-vec])
);

#include <trace/irq_event_types.h>
TRACE_FORMAT(softirq_exit,
TP_PROTO(struct softirq_action *h, struct softirq_action *vec),
TP_ARGS(h, vec),
TP_FMT("softirq=%d action=%s", (int)(h - vec), softirq_to_name[h-vec])
);

#endif
55 changes: 0 additions & 55 deletions include/trace/irq_event_types.h

This file was deleted.

189 changes: 186 additions & 3 deletions include/trace/kmem.h
Original file line number Diff line number Diff line change
@@ -1,9 +1,192 @@
#ifndef _TRACE_KMEM_H
#if !defined(_TRACE_KMEM_H) || defined(TRACE_HEADER_MULTI_READ)
#define _TRACE_KMEM_H

#include <linux/types.h>
#include <linux/tracepoint.h>

#include <trace/kmem_event_types.h>
#undef TRACE_SYSTEM
#define TRACE_SYSTEM kmem

#endif /* _TRACE_KMEM_H */
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)
);

#endif
Loading

0 comments on commit ea20d92

Please sign in to comment.