1 // SPDX-FileCopyrightText: 2017 Michael Jeanson <mjeanson@efficios.com>
3 // SPDX-License-Identifier: GPL-2.0-only
5 #ifdef CONFIG_PREEMPTIRQ_EVENTS
8 #define TRACE_SYSTEM preemptirq
10 #if !defined(LTTNG_TRACE_PREEMPTIRQ_H) || defined(TRACE_HEADER_MULTI_READ)
11 #define LTTNG_TRACE_PREEMPTIRQ_H
13 #include <linux/ktime.h>
14 #include <linux/string.h>
15 #include <asm/sections.h>
16 #include <lttng/tracepoint-event.h>
19 * The preemptirq probe is built when CONFIG_PREEMPTIRQ_EVENTS is defined.
22 LTTNG_TRACEPOINT_EVENT_CLASS(preemptirq_template
,
24 TP_PROTO(unsigned long ip
, unsigned long parent_ip
),
26 TP_ARGS(ip
, parent_ip
),
29 ctf_integer_hex(unsigned long, caller
, ip
)
30 ctf_integer_hex(unsigned long, parent
, parent_ip
)
35 * Tracing of irq enable / disable events is enabled
36 * on >= 4.19 when CONFIG_TRACE_IRQFLAGS is defined.
37 * on previous kernels when CONFIG_PROVE_LOCKING is NOT defined.
39 #if defined(CONFIG_TRACE_IRQFLAGS)
40 #define LTTNG_TRACE_IRQ
41 #elif (LTTNG_LINUX_VERSION_CODE < LTTNG_KERNEL_VERSION(4,19,0) && \
42 !defined(CONFIG_PROVE_LOCKING))
43 #define LTTNG_TRACE_IRQ
46 #ifdef LTTNG_TRACE_IRQ
47 LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(preemptirq_template
, irq_disable
,
49 preemptirq_irq_disable
,
51 TP_PROTO(unsigned long ip
, unsigned long parent_ip
),
53 TP_ARGS(ip
, parent_ip
)
56 LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(preemptirq_template
, irq_enable
,
58 preemptirq_irq_enable
,
60 TP_PROTO(unsigned long ip
, unsigned long parent_ip
),
62 TP_ARGS(ip
, parent_ip
)
64 #endif /* LTTNG_TRACE_IRQ */
67 * Tracing of preempt enable / disable events is enabled
68 * on >= 4.19 when CONFIG_TRACE_PREEMPT_TOGGLE is defined.
69 * on previous kernels when CONFIG_DEBUG_PREEMPT is defined.
71 #if defined(CONFIG_TRACE_PREEMPT_TOGGLE)
72 #define LTTNG_TRACE_PREEMPT
73 #elif (LTTNG_LINUX_VERSION_CODE < LTTNG_KERNEL_VERSION(4,19,0) && \
74 defined(CONFIG_DEBUG_PREEMPT))
75 #define LTTNG_TRACE_PREEMPT
78 #ifdef LTTNG_TRACE_PREEMPT
79 LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(preemptirq_template
, preempt_disable
,
81 preemptirq_preempt_disable
,
83 TP_PROTO(unsigned long ip
, unsigned long parent_ip
),
85 TP_ARGS(ip
, parent_ip
)
88 LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(preemptirq_template
, preempt_enable
,
90 preemptirq_preempt_enable
,
92 TP_PROTO(unsigned long ip
, unsigned long parent_ip
),
94 TP_ARGS(ip
, parent_ip
)
96 #endif /* LTTNG_TRACE_PREEMPT */
98 #endif /* LTTNG_TRACE_PREEMPTIRQ_H */
100 /* This part must be outside protection */
101 #include <lttng/define_trace.h>
103 #endif /* CONFIG_PREEMPTIRQ_EVENTS */