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