lock.h 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. #undef TRACE_SYSTEM
  2. #define TRACE_SYSTEM lock
  3. #if !defined(_TRACE_LOCK_H) || defined(TRACE_HEADER_MULTI_READ)
  4. #define _TRACE_LOCK_H
  5. #include <linux/lockdep.h>
  6. #include <linux/tracepoint.h>
  7. #ifdef CONFIG_LOCKDEP
  8. TRACE_EVENT(lock_acquire,
  9. TP_PROTO(struct lockdep_map *lock, unsigned int subclass,
  10. int trylock, int read, int check,
  11. struct lockdep_map *next_lock, unsigned long ip),
  12. TP_ARGS(lock, subclass, trylock, read, check, next_lock, ip),
  13. TP_STRUCT__entry(
  14. __field(unsigned int, flags)
  15. __string(name, lock->name)
  16. __field(void *, lockdep_addr)
  17. ),
  18. TP_fast_assign(
  19. __entry->flags = (trylock ? 1 : 0) | (read ? 2 : 0);
  20. __assign_str(name, lock->name);
  21. __entry->lockdep_addr = lock;
  22. ),
  23. TP_printk("%p %s%s%s", __entry->lockdep_addr,
  24. (__entry->flags & 1) ? "try " : "",
  25. (__entry->flags & 2) ? "read " : "",
  26. __get_str(name))
  27. );
  28. TRACE_EVENT(lock_release,
  29. TP_PROTO(struct lockdep_map *lock, int nested, unsigned long ip),
  30. TP_ARGS(lock, nested, ip),
  31. TP_STRUCT__entry(
  32. __string(name, lock->name)
  33. __field(void *, lockdep_addr)
  34. ),
  35. TP_fast_assign(
  36. __assign_str(name, lock->name);
  37. __entry->lockdep_addr = lock;
  38. ),
  39. TP_printk("%p %s",
  40. __entry->lockdep_addr, __get_str(name))
  41. );
  42. #ifdef CONFIG_LOCK_STAT
  43. TRACE_EVENT(lock_contended,
  44. TP_PROTO(struct lockdep_map *lock, unsigned long ip),
  45. TP_ARGS(lock, ip),
  46. TP_STRUCT__entry(
  47. __string(name, lock->name)
  48. __field(void *, lockdep_addr)
  49. ),
  50. TP_fast_assign(
  51. __assign_str(name, lock->name);
  52. __entry->lockdep_addr = lock;
  53. ),
  54. TP_printk("%p %s",
  55. __entry->lockdep_addr, __get_str(name))
  56. );
  57. TRACE_EVENT(lock_acquired,
  58. TP_PROTO(struct lockdep_map *lock, unsigned long ip, s64 waittime),
  59. TP_ARGS(lock, ip, waittime),
  60. TP_STRUCT__entry(
  61. __string(name, lock->name)
  62. __field(s64, wait_nsec)
  63. __field(void *, lockdep_addr)
  64. ),
  65. TP_fast_assign(
  66. __assign_str(name, lock->name);
  67. __entry->wait_nsec = waittime;
  68. __entry->lockdep_addr = lock;
  69. ),
  70. TP_printk("%p %s (%llu ns)", __entry->lockdep_addr,
  71. __get_str(name),
  72. __entry->wait_nsec)
  73. );
  74. #endif
  75. #endif
  76. #endif /* _TRACE_LOCK_H */
  77. /* This part must be outside protection */
  78. #include <trace/define_trace.h>