Blame view
include/trace/events/module.h
2.79 KB
c94fbe1d9
|
1 2 |
/* * Because linux/module.h has tracepoints in the header, and ftrace.h |
de4772542
|
3 |
* used to include this file, define_trace.h includes linux/module.h |
c94fbe1d9
|
4 5 6 7 8 9 |
* But we do not want the module.h to override the TRACE_SYSTEM macro * variable that define_trace.h is processing, so we only set it * when module events are being processed, which would happen when * CREATE_TRACE_POINTS is defined. */ #ifdef CREATE_TRACE_POINTS |
7ead8b831
|
10 11 |
#undef TRACE_SYSTEM #define TRACE_SYSTEM module |
c94fbe1d9
|
12 |
#endif |
7ead8b831
|
13 14 15 16 17 18 19 20 21 22 23 24 |
#if !defined(_TRACE_MODULE_H) || defined(TRACE_HEADER_MULTI_READ) #define _TRACE_MODULE_H #include <linux/tracepoint.h> #ifdef CONFIG_MODULES struct module; #define show_module_flags(flags) __print_flags(flags, "", \ { (1UL << TAINT_PROPRIETARY_MODULE), "P" }, \ |
66cc69e34
|
25 |
{ (1UL << TAINT_OOT_MODULE), "O" }, \ |
7ead8b831
|
26 |
{ (1UL << TAINT_FORCED_MODULE), "F" }, \ |
66cc69e34
|
27 |
{ (1UL << TAINT_CRAP), "C" }, \ |
132e9a68a
|
28 |
{ (1UL << TAINT_UNSIGNED_MODULE), "E" }) |
7ead8b831
|
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
TRACE_EVENT(module_load, TP_PROTO(struct module *mod), TP_ARGS(mod), TP_STRUCT__entry( __field( unsigned int, taints ) __string( name, mod->name ) ), TP_fast_assign( __entry->taints = mod->taints; __assign_str(name, mod->name); ), TP_printk("%s %s", __get_str(name), show_module_flags(__entry->taints)) ); TRACE_EVENT(module_free, TP_PROTO(struct module *mod), TP_ARGS(mod), TP_STRUCT__entry( __string( name, mod->name ) ), TP_fast_assign( __assign_str(name, mod->name); ), TP_printk("%s", __get_str(name)) ); |
eb0c53771
|
65 66 |
#ifdef CONFIG_MODULE_UNLOAD /* trace_module_get/put are only used if CONFIG_MODULE_UNLOAD is defined */ |
925684d6d
|
67 |
DECLARE_EVENT_CLASS(module_refcnt, |
7ead8b831
|
68 |
|
ae832d1e0
|
69 |
TP_PROTO(struct module *mod, unsigned long ip), |
7ead8b831
|
70 |
|
ae832d1e0
|
71 |
TP_ARGS(mod, ip), |
7ead8b831
|
72 73 74 75 76 77 78 79 80 |
TP_STRUCT__entry( __field( unsigned long, ip ) __field( int, refcnt ) __string( name, mod->name ) ), TP_fast_assign( __entry->ip = ip; |
098507ae3
|
81 |
__entry->refcnt = __this_cpu_read(mod->refptr->incs) - __this_cpu_read(mod->refptr->decs); |
7ead8b831
|
82 83 84 85 86 87 |
__assign_str(name, mod->name); ), TP_printk("%s call_site=%pf refcnt=%d", __get_str(name), (void *)__entry->ip, __entry->refcnt) ); |
925684d6d
|
88 |
DEFINE_EVENT(module_refcnt, module_get, |
7ead8b831
|
89 |
|
ae832d1e0
|
90 |
TP_PROTO(struct module *mod, unsigned long ip), |
7ead8b831
|
91 |
|
ae832d1e0
|
92 |
TP_ARGS(mod, ip) |
925684d6d
|
93 |
); |
7ead8b831
|
94 |
|
925684d6d
|
95 |
DEFINE_EVENT(module_refcnt, module_put, |
7ead8b831
|
96 |
|
ae832d1e0
|
97 |
TP_PROTO(struct module *mod, unsigned long ip), |
7ead8b831
|
98 |
|
ae832d1e0
|
99 |
TP_ARGS(mod, ip) |
7ead8b831
|
100 |
); |
eb0c53771
|
101 |
#endif /* CONFIG_MODULE_UNLOAD */ |
7ead8b831
|
102 103 104 105 106 107 108 109 |
TRACE_EVENT(module_request, TP_PROTO(char *name, bool wait, unsigned long ip), TP_ARGS(name, wait, ip), TP_STRUCT__entry( |
7ead8b831
|
110 |
__field( unsigned long, ip ) |
b5e3008e4
|
111 |
__field( bool, wait ) |
7ead8b831
|
112 113 114 115 |
__string( name, name ) ), TP_fast_assign( |
7ead8b831
|
116 |
__entry->ip = ip; |
b5e3008e4
|
117 |
__entry->wait = wait; |
7ead8b831
|
118 119 120 121 122 123 124 125 126 127 128 129 130 |
__assign_str(name, name); ), TP_printk("%s wait=%d call_site=%pf", __get_str(name), (int)__entry->wait, (void *)__entry->ip) ); #endif /* CONFIG_MODULES */ #endif /* _TRACE_MODULE_H */ /* This part must be outside protection */ #include <trace/define_trace.h> |