]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blame - arch/x86/include/asm/trace/irq_vectors.h
x86/tracing: Build tracepoints only when they are used
[mirror_ubuntu-bionic-kernel.git] / arch / x86 / include / asm / trace / irq_vectors.h
CommitLineData
cf910e83
SA
1#undef TRACE_SYSTEM
2#define TRACE_SYSTEM irq_vectors
3
4#if !defined(_TRACE_IRQ_VECTORS_H) || defined(TRACE_HEADER_MULTI_READ)
5#define _TRACE_IRQ_VECTORS_H
6
7#include <linux/tracepoint.h>
2feb1b31 8#include <asm/trace/common.h>
cf910e83 9
73285527
TG
10#ifdef CONFIG_X86_LOCAL_APIC
11
80954747
TG
12extern int trace_resched_ipi_reg(void);
13extern void trace_resched_ipi_unreg(void);
14
cf910e83
SA
15DECLARE_EVENT_CLASS(x86_irq_vector,
16
17 TP_PROTO(int vector),
18
19 TP_ARGS(vector),
20
21 TP_STRUCT__entry(
22 __field( int, vector )
23 ),
24
25 TP_fast_assign(
26 __entry->vector = vector;
27 ),
28
29 TP_printk("vector=%d", __entry->vector) );
30
31#define DEFINE_IRQ_VECTOR_EVENT(name) \
80954747
TG
32DEFINE_EVENT_FN(x86_irq_vector, name##_entry, \
33 TP_PROTO(int vector), \
34 TP_ARGS(vector), NULL, NULL); \
35DEFINE_EVENT_FN(x86_irq_vector, name##_exit, \
36 TP_PROTO(int vector), \
37 TP_ARGS(vector), NULL, NULL);
38
39#define DEFINE_RESCHED_IPI_EVENT(name) \
cf910e83
SA
40DEFINE_EVENT_FN(x86_irq_vector, name##_entry, \
41 TP_PROTO(int vector), \
42 TP_ARGS(vector), \
80954747
TG
43 trace_resched_ipi_reg, \
44 trace_resched_ipi_unreg); \
cf910e83
SA
45DEFINE_EVENT_FN(x86_irq_vector, name##_exit, \
46 TP_PROTO(int vector), \
47 TP_ARGS(vector), \
80954747
TG
48 trace_resched_ipi_reg, \
49 trace_resched_ipi_unreg);
cf910e83
SA
50
51/*
52 * local_timer - called when entering/exiting a local timer interrupt
53 * vector handler
54 */
55DEFINE_IRQ_VECTOR_EVENT(local_timer);
56
cf910e83
SA
57/*
58 * spurious_apic - called when entering/exiting a spurious apic vector handler
59 */
60DEFINE_IRQ_VECTOR_EVENT(spurious_apic);
61
62/*
63 * error_apic - called when entering/exiting an error apic vector handler
64 */
65DEFINE_IRQ_VECTOR_EVENT(error_apic);
66
67/*
68 * x86_platform_ipi - called when entering/exiting a x86 platform ipi interrupt
69 * vector handler
70 */
71DEFINE_IRQ_VECTOR_EVENT(x86_platform_ipi);
72
73285527 73#ifdef CONFIG_IRQ_WORK
cf910e83
SA
74/*
75 * irq_work - called when entering/exiting a irq work interrupt
76 * vector handler
77 */
78DEFINE_IRQ_VECTOR_EVENT(irq_work);
79
d5b5f391
PZ
80/*
81 * We must dis-allow sampling irq_work_exit() because perf event sampling
82 * itself can cause irq_work, which would lead to an infinite loop;
83 *
84 * 1) irq_work_exit happens
85 * 2) generates perf sample
86 * 3) generates irq_work
87 * 4) goto 1
88 */
89TRACE_EVENT_PERF_PERM(irq_work_exit, is_sampling_event(p_event) ? -EPERM : 0);
73285527
TG
90#endif
91
92/*
93 * The ifdef is required because that tracepoint macro hell emits tracepoint
94 * code in files which include this header even if the tracepoint is not
95 * enabled. Brilliant stuff that.
96 */
97#ifdef CONFIG_SMP
98/*
99 * reschedule - called when entering/exiting a reschedule vector handler
100 */
101DEFINE_RESCHED_IPI_EVENT(reschedule);
d5b5f391 102
cf910e83
SA
103/*
104 * call_function - called when entering/exiting a call function interrupt
105 * vector handler
106 */
107DEFINE_IRQ_VECTOR_EVENT(call_function);
108
109/*
110 * call_function_single - called when entering/exiting a call function
111 * single interrupt vector handler
112 */
113DEFINE_IRQ_VECTOR_EVENT(call_function_single);
73285527 114#endif
cf910e83 115
73285527 116#ifdef CONFIG_X86_MCE_THRESHOLD
cf910e83
SA
117/*
118 * threshold_apic - called when entering/exiting a threshold apic interrupt
119 * vector handler
120 */
121DEFINE_IRQ_VECTOR_EVENT(threshold_apic);
73285527 122#endif
cf910e83 123
73285527 124#ifdef CONFIG_X86_MCE_AMD
24fd78a8
AG
125/*
126 * deferred_error_apic - called when entering/exiting a deferred apic interrupt
127 * vector handler
128 */
129DEFINE_IRQ_VECTOR_EVENT(deferred_error_apic);
73285527 130#endif
24fd78a8 131
73285527 132#ifdef CONFIG_X86_THERMAL_VECTOR
cf910e83
SA
133/*
134 * thermal_apic - called when entering/exiting a thermal apic interrupt
135 * vector handler
136 */
137DEFINE_IRQ_VECTOR_EVENT(thermal_apic);
73285527
TG
138#endif
139
140#endif /* CONFIG_X86_LOCAL_APIC */
cf910e83
SA
141
142#undef TRACE_INCLUDE_PATH
143#define TRACE_INCLUDE_PATH .
144#define TRACE_INCLUDE_FILE irq_vectors
145#endif /* _TRACE_IRQ_VECTORS_H */
146
147/* This part must be outside protection */
148#include <trace/define_trace.h>