]>
Commit | Line | Data |
---|---|---|
7ead8b83 LZ |
1 | #undef TRACE_SYSTEM |
2 | #define TRACE_SYSTEM module | |
3 | ||
4 | #if !defined(_TRACE_MODULE_H) || defined(TRACE_HEADER_MULTI_READ) | |
5 | #define _TRACE_MODULE_H | |
6 | ||
7 | #include <linux/tracepoint.h> | |
8 | ||
9 | #ifdef CONFIG_MODULES | |
10 | ||
11 | struct module; | |
12 | ||
13 | #define show_module_flags(flags) __print_flags(flags, "", \ | |
14 | { (1UL << TAINT_PROPRIETARY_MODULE), "P" }, \ | |
15 | { (1UL << TAINT_FORCED_MODULE), "F" }, \ | |
16 | { (1UL << TAINT_CRAP), "C" }) | |
17 | ||
18 | TRACE_EVENT(module_load, | |
19 | ||
20 | TP_PROTO(struct module *mod), | |
21 | ||
22 | TP_ARGS(mod), | |
23 | ||
24 | TP_STRUCT__entry( | |
25 | __field( unsigned int, taints ) | |
26 | __string( name, mod->name ) | |
27 | ), | |
28 | ||
29 | TP_fast_assign( | |
30 | __entry->taints = mod->taints; | |
31 | __assign_str(name, mod->name); | |
32 | ), | |
33 | ||
34 | TP_printk("%s %s", __get_str(name), show_module_flags(__entry->taints)) | |
35 | ); | |
36 | ||
37 | TRACE_EVENT(module_free, | |
38 | ||
39 | TP_PROTO(struct module *mod), | |
40 | ||
41 | TP_ARGS(mod), | |
42 | ||
43 | TP_STRUCT__entry( | |
44 | __string( name, mod->name ) | |
45 | ), | |
46 | ||
47 | TP_fast_assign( | |
48 | __assign_str(name, mod->name); | |
49 | ), | |
50 | ||
51 | TP_printk("%s", __get_str(name)) | |
52 | ); | |
53 | ||
eb0c5377 SR |
54 | #ifdef CONFIG_MODULE_UNLOAD |
55 | /* trace_module_get/put are only used if CONFIG_MODULE_UNLOAD is defined */ | |
56 | ||
925684d6 | 57 | DECLARE_EVENT_CLASS(module_refcnt, |
7ead8b83 | 58 | |
ae832d1e | 59 | TP_PROTO(struct module *mod, unsigned long ip), |
7ead8b83 | 60 | |
ae832d1e | 61 | TP_ARGS(mod, ip), |
7ead8b83 LZ |
62 | |
63 | TP_STRUCT__entry( | |
64 | __field( unsigned long, ip ) | |
65 | __field( int, refcnt ) | |
66 | __string( name, mod->name ) | |
67 | ), | |
68 | ||
69 | TP_fast_assign( | |
70 | __entry->ip = ip; | |
c1ab9cab | 71 | __entry->refcnt = __this_cpu_read(mod->refptr->incs) + __this_cpu_read(mod->refptr->decs); |
7ead8b83 LZ |
72 | __assign_str(name, mod->name); |
73 | ), | |
74 | ||
75 | TP_printk("%s call_site=%pf refcnt=%d", | |
76 | __get_str(name), (void *)__entry->ip, __entry->refcnt) | |
77 | ); | |
78 | ||
925684d6 | 79 | DEFINE_EVENT(module_refcnt, module_get, |
7ead8b83 | 80 | |
ae832d1e | 81 | TP_PROTO(struct module *mod, unsigned long ip), |
7ead8b83 | 82 | |
ae832d1e | 83 | TP_ARGS(mod, ip) |
925684d6 | 84 | ); |
7ead8b83 | 85 | |
925684d6 | 86 | DEFINE_EVENT(module_refcnt, module_put, |
7ead8b83 | 87 | |
ae832d1e | 88 | TP_PROTO(struct module *mod, unsigned long ip), |
7ead8b83 | 89 | |
ae832d1e | 90 | TP_ARGS(mod, ip) |
7ead8b83 | 91 | ); |
eb0c5377 | 92 | #endif /* CONFIG_MODULE_UNLOAD */ |
7ead8b83 LZ |
93 | |
94 | TRACE_EVENT(module_request, | |
95 | ||
96 | TP_PROTO(char *name, bool wait, unsigned long ip), | |
97 | ||
98 | TP_ARGS(name, wait, ip), | |
99 | ||
100 | TP_STRUCT__entry( | |
101 | __field( bool, wait ) | |
102 | __field( unsigned long, ip ) | |
103 | __string( name, name ) | |
104 | ), | |
105 | ||
106 | TP_fast_assign( | |
107 | __entry->wait = wait; | |
108 | __entry->ip = ip; | |
109 | __assign_str(name, name); | |
110 | ), | |
111 | ||
112 | TP_printk("%s wait=%d call_site=%pf", | |
113 | __get_str(name), (int)__entry->wait, (void *)__entry->ip) | |
114 | ); | |
115 | ||
116 | #endif /* CONFIG_MODULES */ | |
117 | ||
118 | #endif /* _TRACE_MODULE_H */ | |
119 | ||
120 | /* This part must be outside protection */ | |
121 | #include <trace/define_trace.h> | |
122 |