1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifdef CONFIG_PREEMPTIRQ_EVENTS
5 #define TRACE_SYSTEM preemptirq
7 #if !defined(LTTNG_TRACE_PREEMPTIRQ_H) || defined(TRACE_HEADER_MULTI_READ)
8 #define LTTNG_TRACE_PREEMPTIRQ_H
10 #include <linux/ktime.h>
11 #include <linux/string.h>
12 #include <asm/sections.h>
13 #include <probes/lttng-tracepoint-event.h>
16 * The preemptirq probe is built when CONFIG_PREEMPTIRQ_EVENTS is defined.
19 LTTNG_TRACEPOINT_EVENT_CLASS(preemptirq_template
,
21 TP_PROTO(unsigned long ip
, unsigned long parent_ip
),
23 TP_ARGS(ip
, parent_ip
),
26 ctf_integer_hex(unsigned long, caller
, ip
)
27 ctf_integer_hex(unsigned long, parent
, parent_ip
)
32 * Tracing of irq enable / disable events is enabled
33 * on >= 4.19 when CONFIG_TRACE_IRQFLAGS is defined.
34 * on previous kernels when CONFIG_PROVE_LOCKING is NOT defined.
36 #if defined(CONFIG_TRACE_IRQFLAGS)
37 #define LTTNG_TRACE_IRQ
38 #elif (LTTNG_LINUX_VERSION_CODE < LTTNG_KERNEL_VERSION(4,19,0) && \
39 !defined(CONFIG_PROVE_LOCKING))
40 #define LTTNG_TRACE_IRQ
43 #ifdef LTTNG_TRACE_IRQ
44 LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(preemptirq_template
, irq_disable
,
46 preemptirq_irq_disable
,
48 TP_PROTO(unsigned long ip
, unsigned long parent_ip
),
50 TP_ARGS(ip
, parent_ip
)
53 LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(preemptirq_template
, irq_enable
,
55 preemptirq_irq_enable
,
57 TP_PROTO(unsigned long ip
, unsigned long parent_ip
),
59 TP_ARGS(ip
, parent_ip
)
61 #endif /* LTTNG_TRACE_IRQ */
64 * Tracing of preempt enable / disable events is enabled
65 * on >= 4.19 when CONFIG_TRACE_PREEMPT_TOGGLE is defined.
66 * on previous kernels when CONFIG_DEBUG_PREEMPT is defined.
68 #if defined(CONFIG_TRACE_PREEMPT_TOGGLE)
69 #define LTTNG_TRACE_PREEMPT
70 #elif (LTTNG_LINUX_VERSION_CODE < LTTNG_KERNEL_VERSION(4,19,0) && \
71 defined(CONFIG_DEBUG_PREEMPT))
72 #define LTTNG_TRACE_PREEMPT
75 #ifdef LTTNG_TRACE_PREEMPT
76 LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(preemptirq_template
, preempt_disable
,
78 preemptirq_preempt_disable
,
80 TP_PROTO(unsigned long ip
, unsigned long parent_ip
),
82 TP_ARGS(ip
, parent_ip
)
85 LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(preemptirq_template
, preempt_enable
,
87 preemptirq_preempt_enable
,
89 TP_PROTO(unsigned long ip
, unsigned long parent_ip
),
91 TP_ARGS(ip
, parent_ip
)
93 #endif /* LTTNG_TRACE_PREEMPT */
95 #endif /* LTTNG_TRACE_PREEMPTIRQ_H */
97 /* This part must be outside protection */
98 #include <probes/define_trace.h>
100 #endif /* CONFIG_PREEMPTIRQ_EVENTS */