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