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