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 11struct 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 18TRACE_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 37TRACE_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 54#ifdef CONFIG_MODULE_UNLOAD 55/* trace_module_get/put are only used if CONFIG_MODULE_UNLOAD is defined */ 56 57DECLARE_EVENT_CLASS(module_refcnt, 58 59 TP_PROTO(struct module *mod, unsigned long ip), 60 61 TP_ARGS(mod, ip), 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; 71 __entry->refcnt = __this_cpu_read(mod->refptr->incs) + __this_cpu_read(mod->refptr->decs); 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 79DEFINE_EVENT(module_refcnt, module_get, 80 81 TP_PROTO(struct module *mod, unsigned long ip), 82 83 TP_ARGS(mod, ip) 84); 85 86DEFINE_EVENT(module_refcnt, module_put, 87 88 TP_PROTO(struct module *mod, unsigned long ip), 89 90 TP_ARGS(mod, ip) 91); 92#endif /* CONFIG_MODULE_UNLOAD */ 93 94TRACE_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