preemptirq.h 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. #ifdef CONFIG_PREEMPTIRQ_TRACEPOINTS
  2. #undef TRACE_SYSTEM
  3. #define TRACE_SYSTEM preemptirq
  4. #if !defined(_TRACE_PREEMPTIRQ_H) || defined(TRACE_HEADER_MULTI_READ)
  5. #define _TRACE_PREEMPTIRQ_H
  6. #include <linux/ktime.h>
  7. #include <linux/tracepoint.h>
  8. #include <linux/string.h>
  9. #include <asm/sections.h>
  10. DECLARE_EVENT_CLASS(preemptirq_template,
  11. TP_PROTO(unsigned long ip, unsigned long parent_ip),
  12. TP_ARGS(ip, parent_ip),
  13. TP_STRUCT__entry(
  14. __field(s32, caller_offs)
  15. __field(s32, parent_offs)
  16. ),
  17. TP_fast_assign(
  18. __entry->caller_offs = (s32)(ip - (unsigned long)_stext);
  19. __entry->parent_offs = (s32)(parent_ip - (unsigned long)_stext);
  20. ),
  21. TP_printk("caller=%pS parent=%pS",
  22. (void *)((unsigned long)(_stext) + __entry->caller_offs),
  23. (void *)((unsigned long)(_stext) + __entry->parent_offs))
  24. );
  25. #ifdef CONFIG_TRACE_IRQFLAGS
  26. DEFINE_EVENT(preemptirq_template, irq_disable,
  27. TP_PROTO(unsigned long ip, unsigned long parent_ip),
  28. TP_ARGS(ip, parent_ip));
  29. DEFINE_EVENT(preemptirq_template, irq_enable,
  30. TP_PROTO(unsigned long ip, unsigned long parent_ip),
  31. TP_ARGS(ip, parent_ip));
  32. #else
  33. #define trace_irq_enable(...)
  34. #define trace_irq_disable(...)
  35. #endif
  36. #ifdef CONFIG_TRACE_PREEMPT_TOGGLE
  37. DEFINE_EVENT(preemptirq_template, preempt_disable,
  38. TP_PROTO(unsigned long ip, unsigned long parent_ip),
  39. TP_ARGS(ip, parent_ip));
  40. DEFINE_EVENT(preemptirq_template, preempt_enable,
  41. TP_PROTO(unsigned long ip, unsigned long parent_ip),
  42. TP_ARGS(ip, parent_ip));
  43. #else
  44. #define trace_preempt_enable(...)
  45. #define trace_preempt_disable(...)
  46. #endif
  47. #endif /* _TRACE_PREEMPTIRQ_H */
  48. #include <trace/define_trace.h>
  49. #else /* !CONFIG_PREEMPTIRQ_TRACEPOINTS */
  50. #define trace_irq_enable(...)
  51. #define trace_irq_disable(...)
  52. #define trace_preempt_enable(...)
  53. #define trace_preempt_disable(...)
  54. #endif