Commit | Line | Data |
---|---|---|
b283666f PW |
1 | /* |
2 | * Because linux/module.h has tracepoints in the header, and ftrace.h | |
3 | * eventually includes this file, define_trace.h includes linux/module.h | |
4 | * But we do not want the module.h to override the TRACE_SYSTEM macro | |
5 | * variable that define_trace.h is processing, so we only set it | |
6 | * when module events are being processed, which would happen when | |
7 | * CREATE_TRACE_POINTS is defined. | |
8 | */ | |
9 | #ifdef CREATE_TRACE_POINTS | |
10 | #undef TRACE_SYSTEM | |
11 | #define TRACE_SYSTEM module | |
12 | #endif | |
13 | ||
3bc29f0a MD |
14 | #if !defined(LTTNG_TRACE_MODULE_H) || defined(TRACE_HEADER_MULTI_READ) |
15 | #define LTTNG_TRACE_MODULE_H | |
b283666f | 16 | |
3bc29f0a | 17 | #include "../../../probes/lttng-tracepoint-event.h" |
7c68b363 | 18 | #include <linux/version.h> |
b283666f PW |
19 | |
20 | #ifdef CONFIG_MODULES | |
21 | ||
22 | #ifndef _TRACE_MODULE_DEF | |
23 | #define _TRACE_MODULE_DEF | |
24 | struct module; | |
25 | ||
b283666f PW |
26 | #endif |
27 | ||
3bc29f0a | 28 | LTTNG_TRACEPOINT_EVENT(module_load, |
b283666f PW |
29 | |
30 | TP_PROTO(struct module *mod), | |
31 | ||
32 | TP_ARGS(mod), | |
33 | ||
34 | TP_STRUCT__entry( | |
35 | __field( unsigned int, taints ) | |
36 | __string( name, mod->name ) | |
37 | ), | |
38 | ||
39 | TP_fast_assign( | |
d3ac4d63 PW |
40 | tp_assign(taints, mod->taints) |
41 | tp_strcpy(name, mod->name) | |
b283666f PW |
42 | ), |
43 | ||
44 | TP_printk("%s %s", __get_str(name), show_module_flags(__entry->taints)) | |
45 | ) | |
46 | ||
3bc29f0a | 47 | LTTNG_TRACEPOINT_EVENT(module_free, |
b283666f PW |
48 | |
49 | TP_PROTO(struct module *mod), | |
50 | ||
51 | TP_ARGS(mod), | |
52 | ||
53 | TP_STRUCT__entry( | |
54 | __string( name, mod->name ) | |
55 | ), | |
56 | ||
57 | TP_fast_assign( | |
d3ac4d63 | 58 | tp_strcpy(name, mod->name) |
b283666f PW |
59 | ), |
60 | ||
61 | TP_printk("%s", __get_str(name)) | |
62 | ) | |
63 | ||
64 | #ifdef CONFIG_MODULE_UNLOAD | |
65 | /* trace_module_get/put are only used if CONFIG_MODULE_UNLOAD is defined */ | |
66 | ||
3bc29f0a | 67 | LTTNG_TRACEPOINT_EVENT_CLASS(module_refcnt, |
b283666f | 68 | |
7c68b363 | 69 | #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) |
b283666f PW |
70 | TP_PROTO(struct module *mod, unsigned long ip), |
71 | ||
72 | TP_ARGS(mod, ip), | |
7c68b363 AG |
73 | #else |
74 | TP_PROTO(struct module *mod, unsigned long ip, int refcnt), | |
75 | ||
76 | TP_ARGS(mod, ip, refcnt), | |
77 | #endif | |
b283666f PW |
78 | |
79 | TP_STRUCT__entry( | |
80 | __field( unsigned long, ip ) | |
81 | __field( int, refcnt ) | |
82 | __string( name, mod->name ) | |
83 | ), | |
84 | ||
85 | TP_fast_assign( | |
d3ac4d63 | 86 | tp_assign(ip, ip) |
7cb18afa MD |
87 | #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,19,0)) |
88 | tp_assign(refcnt, atomic_read(&mod->refcnt)) | |
89 | #elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) | |
d3ac4d63 | 90 | tp_assign(refcnt, __this_cpu_read(mod->refptr->incs) + __this_cpu_read(mod->refptr->decs)) |
7c68b363 AG |
91 | #else |
92 | tp_assign(refcnt, refcnt) | |
93 | #endif | |
d3ac4d63 | 94 | tp_strcpy(name, mod->name) |
b283666f PW |
95 | ), |
96 | ||
97 | TP_printk("%s call_site=%pf refcnt=%d", | |
98 | __get_str(name), (void *)__entry->ip, __entry->refcnt) | |
99 | ) | |
100 | ||
3bc29f0a | 101 | LTTNG_TRACEPOINT_EVENT_INSTANCE(module_refcnt, module_get, |
b283666f | 102 | |
7c68b363 | 103 | #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) |
b283666f PW |
104 | TP_PROTO(struct module *mod, unsigned long ip), |
105 | ||
106 | TP_ARGS(mod, ip) | |
7c68b363 AG |
107 | #else |
108 | TP_PROTO(struct module *mod, unsigned long ip, int refcnt), | |
109 | ||
110 | TP_ARGS(mod, ip, refcnt) | |
111 | #endif | |
b283666f PW |
112 | ) |
113 | ||
3bc29f0a | 114 | LTTNG_TRACEPOINT_EVENT_INSTANCE(module_refcnt, module_put, |
b283666f | 115 | |
7c68b363 | 116 | #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) |
b283666f PW |
117 | TP_PROTO(struct module *mod, unsigned long ip), |
118 | ||
119 | TP_ARGS(mod, ip) | |
7c68b363 AG |
120 | #else |
121 | TP_PROTO(struct module *mod, unsigned long ip, int refcnt), | |
122 | ||
123 | TP_ARGS(mod, ip, refcnt) | |
124 | #endif | |
b283666f PW |
125 | ) |
126 | #endif /* CONFIG_MODULE_UNLOAD */ | |
127 | ||
3bc29f0a | 128 | LTTNG_TRACEPOINT_EVENT(module_request, |
b283666f PW |
129 | |
130 | TP_PROTO(char *name, bool wait, unsigned long ip), | |
131 | ||
132 | TP_ARGS(name, wait, ip), | |
133 | ||
134 | TP_STRUCT__entry( | |
135 | __field( unsigned long, ip ) | |
136 | __field( bool, wait ) | |
137 | __string( name, name ) | |
138 | ), | |
139 | ||
140 | TP_fast_assign( | |
d3ac4d63 PW |
141 | tp_assign(ip, ip) |
142 | tp_assign(wait, wait) | |
143 | tp_strcpy(name, name) | |
b283666f PW |
144 | ), |
145 | ||
146 | TP_printk("%s wait=%d call_site=%pf", | |
147 | __get_str(name), (int)__entry->wait, (void *)__entry->ip) | |
148 | ) | |
149 | ||
150 | #endif /* CONFIG_MODULES */ | |
151 | ||
3bc29f0a | 152 | #endif /* LTTNG_TRACE_MODULE_H */ |
b283666f PW |
153 | |
154 | /* This part must be outside protection */ | |
155 | #include "../../../probes/define_trace.h" |