Linux Audio

Check our new training course

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