2 #define TRACE_SYSTEM irq_vectors
4 #if !defined(_TRACE_IRQ_VECTORS_H) || defined(TRACE_HEADER_MULTI_READ)
5 #define _TRACE_IRQ_VECTORS_H
7 #include <linux/tracepoint.h>
8 #include <asm/trace/common.h>
10 #ifdef CONFIG_X86_LOCAL_APIC
12 extern int trace_resched_ipi_reg(void);
13 extern void trace_resched_ipi_unreg(void);
15 DECLARE_EVENT_CLASS(x86_irq_vector,
22 __field( int, vector )
26 __entry->vector = vector;
29 TP_printk("vector=%d", __entry->vector) );
31 #define DEFINE_IRQ_VECTOR_EVENT(name) \
32 DEFINE_EVENT_FN(x86_irq_vector, name##_entry, \
33 TP_PROTO(int vector), \
34 TP_ARGS(vector), NULL, NULL); \
35 DEFINE_EVENT_FN(x86_irq_vector, name##_exit, \
36 TP_PROTO(int vector), \
37 TP_ARGS(vector), NULL, NULL);
39 #define DEFINE_RESCHED_IPI_EVENT(name) \
40 DEFINE_EVENT_FN(x86_irq_vector, name##_entry, \
41 TP_PROTO(int vector), \
43 trace_resched_ipi_reg, \
44 trace_resched_ipi_unreg); \
45 DEFINE_EVENT_FN(x86_irq_vector, name##_exit, \
46 TP_PROTO(int vector), \
48 trace_resched_ipi_reg, \
49 trace_resched_ipi_unreg);
52 * local_timer - called when entering/exiting a local timer interrupt
55 DEFINE_IRQ_VECTOR_EVENT(local_timer);
58 * spurious_apic - called when entering/exiting a spurious apic vector handler
60 DEFINE_IRQ_VECTOR_EVENT(spurious_apic);
63 * error_apic - called when entering/exiting an error apic vector handler
65 DEFINE_IRQ_VECTOR_EVENT(error_apic);
68 * x86_platform_ipi - called when entering/exiting a x86 platform ipi interrupt
71 DEFINE_IRQ_VECTOR_EVENT(x86_platform_ipi);
73 #ifdef CONFIG_IRQ_WORK
75 * irq_work - called when entering/exiting a irq work interrupt
78 DEFINE_IRQ_VECTOR_EVENT(irq_work);
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;
84 * 1) irq_work_exit happens
85 * 2) generates perf sample
86 * 3) generates irq_work
89 TRACE_EVENT_PERF_PERM(irq_work_exit, is_sampling_event(p_event) ? -EPERM : 0);
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.
99 * reschedule - called when entering/exiting a reschedule vector handler
101 DEFINE_RESCHED_IPI_EVENT(reschedule);
104 * call_function - called when entering/exiting a call function interrupt
107 DEFINE_IRQ_VECTOR_EVENT(call_function);
110 * call_function_single - called when entering/exiting a call function
111 * single interrupt vector handler
113 DEFINE_IRQ_VECTOR_EVENT(call_function_single);
116 #ifdef CONFIG_X86_MCE_THRESHOLD
118 * threshold_apic - called when entering/exiting a threshold apic interrupt
121 DEFINE_IRQ_VECTOR_EVENT(threshold_apic);
124 #ifdef CONFIG_X86_MCE_AMD
126 * deferred_error_apic - called when entering/exiting a deferred apic interrupt
129 DEFINE_IRQ_VECTOR_EVENT(deferred_error_apic);
132 #ifdef CONFIG_X86_THERMAL_VECTOR
134 * thermal_apic - called when entering/exiting a thermal apic interrupt
137 DEFINE_IRQ_VECTOR_EVENT(thermal_apic);
140 #endif /* CONFIG_X86_LOCAL_APIC */
142 #undef TRACE_INCLUDE_PATH
143 #define TRACE_INCLUDE_PATH .
144 #define TRACE_INCLUDE_FILE irq_vectors
145 #endif /* _TRACE_IRQ_VECTORS_H */
147 /* This part must be outside protection */
148 #include <trace/define_trace.h>