Commit | Line | Data |
---|---|---|
61baff6e MJ |
1 | // SPDX-FileCopyrightText: 2012 Paul Woegerer <paul_woegerer@mentor.com> |
2 | // | |
3 | // SPDX-License-Identifier: GPL-2.0-only | |
4 | ||
b283666f PW |
5 | /* |
6 | * Because linux/module.h has tracepoints in the header, and ftrace.h | |
7 | * eventually includes this file, define_trace.h includes linux/module.h | |
8 | * But we do not want the module.h to override the TRACE_SYSTEM macro | |
9 | * variable that define_trace.h is processing, so we only set it | |
10 | * when module events are being processed, which would happen when | |
11 | * CREATE_TRACE_POINTS is defined. | |
12 | */ | |
13 | #ifdef CREATE_TRACE_POINTS | |
14 | #undef TRACE_SYSTEM | |
15 | #define TRACE_SYSTEM module | |
16 | #endif | |
17 | ||
3bc29f0a MD |
18 | #if !defined(LTTNG_TRACE_MODULE_H) || defined(TRACE_HEADER_MULTI_READ) |
19 | #define LTTNG_TRACE_MODULE_H | |
b283666f | 20 | |
3b4aafcb | 21 | #include <lttng/tracepoint-event.h> |
5f4c791e | 22 | #include <lttng/kernel-version.h> |
5f1c794b | 23 | #include <linux/kernel.h> |
b283666f PW |
24 | |
25 | #ifdef CONFIG_MODULES | |
26 | ||
27 | #ifndef _TRACE_MODULE_DEF | |
28 | #define _TRACE_MODULE_DEF | |
29 | struct module; | |
30 | ||
b283666f PW |
31 | #endif |
32 | ||
5f1c794b FD |
33 | LTTNG_TRACEPOINT_ENUM(taint, |
34 | TP_ENUM_VALUES( | |
35 | ctf_enum_value("PROPRIETARY_MODULE", 1UL << TAINT_PROPRIETARY_MODULE) | |
36 | ctf_enum_value("FORCED_MODULE", 1UL << TAINT_FORCED_MODULE) | |
37 | ctf_enum_value("CPU_OUT_OF_SPEC", 1UL << TAINT_CPU_OUT_OF_SPEC) | |
38 | ctf_enum_value("FORCED_RMMOD", 1UL << TAINT_FORCED_RMMOD) | |
39 | ctf_enum_value("MACHINE_CHECK", 1UL << TAINT_MACHINE_CHECK) | |
40 | ctf_enum_value("BAD_PAGE", 1UL << TAINT_BAD_PAGE) | |
41 | ctf_enum_value("USER", 1UL << TAINT_USER) | |
42 | ctf_enum_value("DIE", 1UL << TAINT_DIE) | |
43 | ctf_enum_value("OVERRIDDEN_ACPI_TABLE", 1UL << TAINT_OVERRIDDEN_ACPI_TABLE) | |
44 | ctf_enum_value("WARN", 1UL << TAINT_WARN) | |
45 | ctf_enum_value("CRAP", 1UL << TAINT_CRAP) | |
46 | ctf_enum_value("FIRMWARE_WORKAROUND", 1UL << TAINT_FIRMWARE_WORKAROUND) | |
5f1c794b | 47 | ctf_enum_value("OOT_MODULE", 1UL << TAINT_OOT_MODULE) |
5f1c794b | 48 | ctf_enum_value("UNSIGNED_MODULE", 1UL << TAINT_UNSIGNED_MODULE) |
5f1c794b | 49 | ctf_enum_value("SOFTLOCKUP", 1UL << TAINT_SOFTLOCKUP) |
5f1c794b | 50 | ctf_enum_value("LIVEPATCH", 1UL << TAINT_LIVEPATCH) |
5f4c791e | 51 | #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,15,0)) |
5f1c794b FD |
52 | ctf_enum_value("AUX", 1UL << TAINT_AUX) |
53 | #endif | |
5f4c791e | 54 | #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,17,0)) |
5f1c794b FD |
55 | ctf_enum_value("RANDSTRUCT", 1UL << TAINT_RANDSTRUCT) |
56 | #endif | |
57 | ) | |
58 | ) | |
59 | ||
3bc29f0a | 60 | LTTNG_TRACEPOINT_EVENT(module_load, |
b283666f PW |
61 | |
62 | TP_PROTO(struct module *mod), | |
63 | ||
64 | TP_ARGS(mod), | |
65 | ||
f127e61e | 66 | TP_FIELDS( |
5f1c794b | 67 | ctf_enum(taint, unsigned int, taints, mod->taints) |
f127e61e MD |
68 | ctf_string(name, mod->name) |
69 | ) | |
b283666f PW |
70 | ) |
71 | ||
3bc29f0a | 72 | LTTNG_TRACEPOINT_EVENT(module_free, |
b283666f PW |
73 | |
74 | TP_PROTO(struct module *mod), | |
75 | ||
76 | TP_ARGS(mod), | |
77 | ||
f127e61e MD |
78 | TP_FIELDS( |
79 | ctf_string(name, mod->name) | |
80 | ) | |
b283666f PW |
81 | ) |
82 | ||
83 | #ifdef CONFIG_MODULE_UNLOAD | |
84 | /* trace_module_get/put are only used if CONFIG_MODULE_UNLOAD is defined */ | |
85 | ||
3bc29f0a | 86 | LTTNG_TRACEPOINT_EVENT_CLASS(module_refcnt, |
b283666f PW |
87 | |
88 | TP_PROTO(struct module *mod, unsigned long ip), | |
89 | ||
90 | TP_ARGS(mod, ip), | |
91 | ||
f127e61e | 92 | TP_FIELDS( |
2c054599 | 93 | ctf_integer_hex(unsigned long, ip, ip) |
f127e61e | 94 | ctf_integer(int, refcnt, atomic_read(&mod->refcnt)) |
f127e61e MD |
95 | ctf_string(name, mod->name) |
96 | ) | |
b283666f PW |
97 | ) |
98 | ||
3bc29f0a | 99 | LTTNG_TRACEPOINT_EVENT_INSTANCE(module_refcnt, module_get, |
b283666f PW |
100 | |
101 | TP_PROTO(struct module *mod, unsigned long ip), | |
102 | ||
103 | TP_ARGS(mod, ip) | |
104 | ) | |
105 | ||
3bc29f0a | 106 | LTTNG_TRACEPOINT_EVENT_INSTANCE(module_refcnt, module_put, |
b283666f PW |
107 | |
108 | TP_PROTO(struct module *mod, unsigned long ip), | |
109 | ||
110 | TP_ARGS(mod, ip) | |
111 | ) | |
112 | #endif /* CONFIG_MODULE_UNLOAD */ | |
113 | ||
3bc29f0a | 114 | LTTNG_TRACEPOINT_EVENT(module_request, |
b283666f PW |
115 | |
116 | TP_PROTO(char *name, bool wait, unsigned long ip), | |
117 | ||
118 | TP_ARGS(name, wait, ip), | |
119 | ||
f127e61e | 120 | TP_FIELDS( |
2c054599 | 121 | ctf_integer_hex(unsigned long, ip, ip) |
f127e61e MD |
122 | ctf_integer(bool, wait, wait) |
123 | ctf_string(name, name) | |
124 | ) | |
b283666f PW |
125 | ) |
126 | ||
127 | #endif /* CONFIG_MODULES */ | |
128 | ||
3bc29f0a | 129 | #endif /* LTTNG_TRACE_MODULE_H */ |
b283666f PW |
130 | |
131 | /* This part must be outside protection */ | |
3b4aafcb | 132 | #include <lttng/define_trace.h> |