module.h 2.3 KB

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