blob: cb8455b3ac9adeaae3dd32ce0cf7a71bf6443e9a [file] [log] [blame]
Steven Rostedtb77e38a2009-02-24 10:21:36 -05001#ifndef _LINUX_KERNEL_TRACE_EVENTS_H
2#define _LINUX_KERNEL_TRACE_EVENTS_H
3
Steven Rostedt1473e442009-02-24 14:15:08 -05004#include <linux/debugfs.h>
Steven Rostedtb77e38a2009-02-24 10:21:36 -05005#include <linux/ftrace.h>
6#include "trace.h"
7
8struct ftrace_event_call {
9 char *name;
Steven Rostedt1473e442009-02-24 14:15:08 -050010 struct dentry *dir;
Steven Rostedtb77e38a2009-02-24 10:21:36 -050011 int enabled;
12 int (*regfunc)(void);
13 void (*unregfunc)(void);
14};
15
16
17#undef TPFMT
18#define TPFMT(fmt, args...) fmt "\n", ##args
19
20#undef DEFINE_TRACE_FMT
21#define DEFINE_TRACE_FMT(call, proto, args, fmt) \
22static void ftrace_event_##call(proto) \
23{ \
24 event_trace_printk(_RET_IP_, "(" #call ") " fmt); \
25} \
26 \
27static int ftrace_reg_event_##call(void) \
28{ \
29 int ret; \
30 \
31 ret = register_trace_##call(ftrace_event_##call); \
32 if (!ret) \
33 pr_info("event trace: Could not activate trace point " \
34 "probe to " #call); \
35 return ret; \
36} \
37 \
38static void ftrace_unreg_event_##call(void) \
39{ \
40 unregister_trace_##call(ftrace_event_##call); \
41} \
42 \
43static struct ftrace_event_call __used \
Steven Rostedt1473e442009-02-24 14:15:08 -050044__attribute__((__aligned__(4))) \
Steven Rostedtb77e38a2009-02-24 10:21:36 -050045__attribute__((section("_ftrace_events"))) event_##call = { \
46 .name = #call, \
47 .regfunc = ftrace_reg_event_##call, \
48 .unregfunc = ftrace_unreg_event_##call, \
49}
50
51void event_trace_printk(unsigned long ip, const char *fmt, ...);
Steven Rostedt1473e442009-02-24 14:15:08 -050052extern struct ftrace_event_call __start_ftrace_events[];
53extern struct ftrace_event_call __stop_ftrace_events[];
Steven Rostedtb77e38a2009-02-24 10:21:36 -050054
55#endif /* _LINUX_KERNEL_TRACE_EVENTS_H */