Fix: update module instrumentation for 3.19+ kernels
[lttng-modules.git] / instrumentation / events / lttng-module / module.h
CommitLineData
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
24struct module;
25
b283666f
PW
26#endif
27
3bc29f0a 28LTTNG_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 47LTTNG_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 67LTTNG_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 101LTTNG_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 114LTTNG_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 128LTTNG_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"
This page took 0.033255 seconds and 4 git commands to generate.