xref: /openbmc/linux/arch/x86/include/asm/trace/irq_vectors.h (revision 4b4193256c8d3bc3a5397b5cd9494c2ad386317d)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
2cf910e83SSeiji Aguchi #undef TRACE_SYSTEM
3cf910e83SSeiji Aguchi #define TRACE_SYSTEM irq_vectors
4cf910e83SSeiji Aguchi 
5cf910e83SSeiji Aguchi #if !defined(_TRACE_IRQ_VECTORS_H) || defined(TRACE_HEADER_MULTI_READ)
6cf910e83SSeiji Aguchi #define _TRACE_IRQ_VECTORS_H
7cf910e83SSeiji Aguchi 
8cf910e83SSeiji Aguchi #include <linux/tracepoint.h>
92feb1b31SThomas Gleixner #include <asm/trace/common.h>
10cf910e83SSeiji Aguchi 
1173285527SThomas Gleixner #ifdef CONFIG_X86_LOCAL_APIC
1273285527SThomas Gleixner 
13cf910e83SSeiji Aguchi DECLARE_EVENT_CLASS(x86_irq_vector,
14cf910e83SSeiji Aguchi 
15cf910e83SSeiji Aguchi 	TP_PROTO(int vector),
16cf910e83SSeiji Aguchi 
17cf910e83SSeiji Aguchi 	TP_ARGS(vector),
18cf910e83SSeiji Aguchi 
19cf910e83SSeiji Aguchi 	TP_STRUCT__entry(
20cf910e83SSeiji Aguchi 		__field(		int,	vector	)
21cf910e83SSeiji Aguchi 	),
22cf910e83SSeiji Aguchi 
23cf910e83SSeiji Aguchi 	TP_fast_assign(
24cf910e83SSeiji Aguchi 		__entry->vector = vector;
25cf910e83SSeiji Aguchi 	),
26cf910e83SSeiji Aguchi 
27cf910e83SSeiji Aguchi 	TP_printk("vector=%d", __entry->vector) );
28cf910e83SSeiji Aguchi 
29cf910e83SSeiji Aguchi #define DEFINE_IRQ_VECTOR_EVENT(name)		\
30cf910e83SSeiji Aguchi DEFINE_EVENT_FN(x86_irq_vector, name##_entry,	\
31cf910e83SSeiji Aguchi 	TP_PROTO(int vector),			\
3280954747SThomas Gleixner 	TP_ARGS(vector), NULL, NULL);		\
3380954747SThomas Gleixner DEFINE_EVENT_FN(x86_irq_vector, name##_exit,	\
3480954747SThomas Gleixner 	TP_PROTO(int vector),			\
3580954747SThomas Gleixner 	TP_ARGS(vector), NULL, NULL);
3680954747SThomas Gleixner 
37cf910e83SSeiji Aguchi /*
38cf910e83SSeiji Aguchi  * local_timer - called when entering/exiting a local timer interrupt
39cf910e83SSeiji Aguchi  * vector handler
40cf910e83SSeiji Aguchi  */
41cf910e83SSeiji Aguchi DEFINE_IRQ_VECTOR_EVENT(local_timer);
42cf910e83SSeiji Aguchi 
43cf910e83SSeiji Aguchi /*
44cf910e83SSeiji Aguchi  * spurious_apic - called when entering/exiting a spurious apic vector handler
45cf910e83SSeiji Aguchi  */
46cf910e83SSeiji Aguchi DEFINE_IRQ_VECTOR_EVENT(spurious_apic);
47cf910e83SSeiji Aguchi 
48cf910e83SSeiji Aguchi /*
49cf910e83SSeiji Aguchi  * error_apic - called when entering/exiting an error apic vector handler
50cf910e83SSeiji Aguchi  */
51cf910e83SSeiji Aguchi DEFINE_IRQ_VECTOR_EVENT(error_apic);
52cf910e83SSeiji Aguchi 
53cf910e83SSeiji Aguchi /*
54cf910e83SSeiji Aguchi  * x86_platform_ipi - called when entering/exiting a x86 platform ipi interrupt
55cf910e83SSeiji Aguchi  * vector handler
56cf910e83SSeiji Aguchi  */
57cf910e83SSeiji Aguchi DEFINE_IRQ_VECTOR_EVENT(x86_platform_ipi);
58cf910e83SSeiji Aguchi 
5973285527SThomas Gleixner #ifdef CONFIG_IRQ_WORK
60cf910e83SSeiji Aguchi /*
61cf910e83SSeiji Aguchi  * irq_work - called when entering/exiting a irq work interrupt
62cf910e83SSeiji Aguchi  * vector handler
63cf910e83SSeiji Aguchi  */
64cf910e83SSeiji Aguchi DEFINE_IRQ_VECTOR_EVENT(irq_work);
65cf910e83SSeiji Aguchi 
66cf910e83SSeiji Aguchi /*
67d5b5f391SPeter Zijlstra  * We must dis-allow sampling irq_work_exit() because perf event sampling
68d5b5f391SPeter Zijlstra  * itself can cause irq_work, which would lead to an infinite loop;
69d5b5f391SPeter Zijlstra  *
70d5b5f391SPeter Zijlstra  *  1) irq_work_exit happens
71d5b5f391SPeter Zijlstra  *  2) generates perf sample
72d5b5f391SPeter Zijlstra  *  3) generates irq_work
73d5b5f391SPeter Zijlstra  *  4) goto 1
74d5b5f391SPeter Zijlstra  */
75d5b5f391SPeter Zijlstra TRACE_EVENT_PERF_PERM(irq_work_exit, is_sampling_event(p_event) ? -EPERM : 0);
7673285527SThomas Gleixner #endif
7773285527SThomas Gleixner 
7873285527SThomas Gleixner /*
7973285527SThomas Gleixner  * The ifdef is required because that tracepoint macro hell emits tracepoint
8073285527SThomas Gleixner  * code in files which include this header even if the tracepoint is not
8173285527SThomas Gleixner  * enabled. Brilliant stuff that.
8273285527SThomas Gleixner  */
8373285527SThomas Gleixner #ifdef CONFIG_SMP
8473285527SThomas Gleixner /*
8573285527SThomas Gleixner  * reschedule - called when entering/exiting a reschedule vector handler
8673285527SThomas Gleixner  */
87*13cad985SThomas Gleixner DEFINE_IRQ_VECTOR_EVENT(reschedule);
88d5b5f391SPeter Zijlstra 
89d5b5f391SPeter Zijlstra /*
90cf910e83SSeiji Aguchi  * call_function - called when entering/exiting a call function interrupt
91cf910e83SSeiji Aguchi  * vector handler
92cf910e83SSeiji Aguchi  */
93cf910e83SSeiji Aguchi DEFINE_IRQ_VECTOR_EVENT(call_function);
94cf910e83SSeiji Aguchi 
95cf910e83SSeiji Aguchi /*
96cf910e83SSeiji Aguchi  * call_function_single - called when entering/exiting a call function
97cf910e83SSeiji Aguchi  * single interrupt vector handler
98cf910e83SSeiji Aguchi  */
99cf910e83SSeiji Aguchi DEFINE_IRQ_VECTOR_EVENT(call_function_single);
10073285527SThomas Gleixner #endif
101cf910e83SSeiji Aguchi 
10273285527SThomas Gleixner #ifdef CONFIG_X86_MCE_THRESHOLD
103cf910e83SSeiji Aguchi /*
104cf910e83SSeiji Aguchi  * threshold_apic - called when entering/exiting a threshold apic interrupt
105cf910e83SSeiji Aguchi  * vector handler
106cf910e83SSeiji Aguchi  */
107cf910e83SSeiji Aguchi DEFINE_IRQ_VECTOR_EVENT(threshold_apic);
10873285527SThomas Gleixner #endif
109cf910e83SSeiji Aguchi 
11073285527SThomas Gleixner #ifdef CONFIG_X86_MCE_AMD
111cf910e83SSeiji Aguchi /*
11224fd78a8SAravind Gopalakrishnan  * deferred_error_apic - called when entering/exiting a deferred apic interrupt
11324fd78a8SAravind Gopalakrishnan  * vector handler
11424fd78a8SAravind Gopalakrishnan  */
11524fd78a8SAravind Gopalakrishnan DEFINE_IRQ_VECTOR_EVENT(deferred_error_apic);
11673285527SThomas Gleixner #endif
11724fd78a8SAravind Gopalakrishnan 
11873285527SThomas Gleixner #ifdef CONFIG_X86_THERMAL_VECTOR
11924fd78a8SAravind Gopalakrishnan /*
120cf910e83SSeiji Aguchi  * thermal_apic - called when entering/exiting a thermal apic interrupt
121cf910e83SSeiji Aguchi  * vector handler
122cf910e83SSeiji Aguchi  */
123cf910e83SSeiji Aguchi DEFINE_IRQ_VECTOR_EVENT(thermal_apic);
12473285527SThomas Gleixner #endif
12573285527SThomas Gleixner 
1268d1e3dcaSThomas Gleixner TRACE_EVENT(vector_config,
1278d1e3dcaSThomas Gleixner 
1288d1e3dcaSThomas Gleixner 	TP_PROTO(unsigned int irq, unsigned int vector,
1298d1e3dcaSThomas Gleixner 		 unsigned int cpu, unsigned int apicdest),
1308d1e3dcaSThomas Gleixner 
1318d1e3dcaSThomas Gleixner 	TP_ARGS(irq, vector, cpu, apicdest),
1328d1e3dcaSThomas Gleixner 
1338d1e3dcaSThomas Gleixner 	TP_STRUCT__entry(
1348d1e3dcaSThomas Gleixner 		__field(	unsigned int,	irq		)
1358d1e3dcaSThomas Gleixner 		__field(	unsigned int,	vector		)
1368d1e3dcaSThomas Gleixner 		__field(	unsigned int,	cpu		)
1378d1e3dcaSThomas Gleixner 		__field(	unsigned int,	apicdest	)
1388d1e3dcaSThomas Gleixner 	),
1398d1e3dcaSThomas Gleixner 
1408d1e3dcaSThomas Gleixner 	TP_fast_assign(
1418d1e3dcaSThomas Gleixner 		__entry->irq		= irq;
1428d1e3dcaSThomas Gleixner 		__entry->vector		= vector;
1438d1e3dcaSThomas Gleixner 		__entry->cpu		= cpu;
1448d1e3dcaSThomas Gleixner 		__entry->apicdest	= apicdest;
1458d1e3dcaSThomas Gleixner 	),
1468d1e3dcaSThomas Gleixner 
1478d1e3dcaSThomas Gleixner 	TP_printk("irq=%u vector=%u cpu=%u apicdest=0x%08x",
1488d1e3dcaSThomas Gleixner 		  __entry->irq, __entry->vector, __entry->cpu,
1498d1e3dcaSThomas Gleixner 		  __entry->apicdest)
1508d1e3dcaSThomas Gleixner );
1518d1e3dcaSThomas Gleixner 
1528d1e3dcaSThomas Gleixner DECLARE_EVENT_CLASS(vector_mod,
1538d1e3dcaSThomas Gleixner 
1548d1e3dcaSThomas Gleixner 	TP_PROTO(unsigned int irq, unsigned int vector,
1558d1e3dcaSThomas Gleixner 		 unsigned int cpu, unsigned int prev_vector,
1568d1e3dcaSThomas Gleixner 		 unsigned int prev_cpu),
1578d1e3dcaSThomas Gleixner 
1588d1e3dcaSThomas Gleixner 	TP_ARGS(irq, vector, cpu, prev_vector, prev_cpu),
1598d1e3dcaSThomas Gleixner 
1608d1e3dcaSThomas Gleixner 	TP_STRUCT__entry(
1618d1e3dcaSThomas Gleixner 		__field(	unsigned int,	irq		)
1628d1e3dcaSThomas Gleixner 		__field(	unsigned int,	vector		)
1638d1e3dcaSThomas Gleixner 		__field(	unsigned int,	cpu		)
1648d1e3dcaSThomas Gleixner 		__field(	unsigned int,	prev_vector	)
1658d1e3dcaSThomas Gleixner 		__field(	unsigned int,	prev_cpu	)
1668d1e3dcaSThomas Gleixner 	),
1678d1e3dcaSThomas Gleixner 
1688d1e3dcaSThomas Gleixner 	TP_fast_assign(
1698d1e3dcaSThomas Gleixner 		__entry->irq		= irq;
1708d1e3dcaSThomas Gleixner 		__entry->vector		= vector;
1718d1e3dcaSThomas Gleixner 		__entry->cpu		= cpu;
1728d1e3dcaSThomas Gleixner 		__entry->prev_vector	= prev_vector;
1738d1e3dcaSThomas Gleixner 		__entry->prev_cpu	= prev_cpu;
1748d1e3dcaSThomas Gleixner 
1758d1e3dcaSThomas Gleixner 	),
1768d1e3dcaSThomas Gleixner 
1778d1e3dcaSThomas Gleixner 	TP_printk("irq=%u vector=%u cpu=%u prev_vector=%u prev_cpu=%u",
1788d1e3dcaSThomas Gleixner 		  __entry->irq, __entry->vector, __entry->cpu,
1798d1e3dcaSThomas Gleixner 		  __entry->prev_vector, __entry->prev_cpu)
1808d1e3dcaSThomas Gleixner );
1818d1e3dcaSThomas Gleixner 
1828d1e3dcaSThomas Gleixner #define DEFINE_IRQ_VECTOR_MOD_EVENT(name)				\
1838d1e3dcaSThomas Gleixner DEFINE_EVENT_FN(vector_mod, name,					\
1848d1e3dcaSThomas Gleixner 	TP_PROTO(unsigned int irq, unsigned int vector,			\
1858d1e3dcaSThomas Gleixner 		 unsigned int cpu, unsigned int prev_vector,		\
1868d1e3dcaSThomas Gleixner 		 unsigned int prev_cpu),				\
1878d1e3dcaSThomas Gleixner 	TP_ARGS(irq, vector, cpu, prev_vector, prev_cpu), NULL, NULL);	\
1888d1e3dcaSThomas Gleixner 
1898d1e3dcaSThomas Gleixner DEFINE_IRQ_VECTOR_MOD_EVENT(vector_update);
1908d1e3dcaSThomas Gleixner DEFINE_IRQ_VECTOR_MOD_EVENT(vector_clear);
1918d1e3dcaSThomas Gleixner 
1928d1e3dcaSThomas Gleixner DECLARE_EVENT_CLASS(vector_reserve,
1938d1e3dcaSThomas Gleixner 
1948d1e3dcaSThomas Gleixner 	TP_PROTO(unsigned int irq, int ret),
1958d1e3dcaSThomas Gleixner 
1968d1e3dcaSThomas Gleixner 	TP_ARGS(irq, ret),
1978d1e3dcaSThomas Gleixner 
1988d1e3dcaSThomas Gleixner 	TP_STRUCT__entry(
1998d1e3dcaSThomas Gleixner 		__field(	unsigned int,	irq	)
2008d1e3dcaSThomas Gleixner 		__field(	int,		ret	)
2018d1e3dcaSThomas Gleixner 	),
2028d1e3dcaSThomas Gleixner 
2038d1e3dcaSThomas Gleixner 	TP_fast_assign(
2048d1e3dcaSThomas Gleixner 		__entry->irq = irq;
2058d1e3dcaSThomas Gleixner 		__entry->ret = ret;
2068d1e3dcaSThomas Gleixner 	),
2078d1e3dcaSThomas Gleixner 
2088d1e3dcaSThomas Gleixner 	TP_printk("irq=%u ret=%d", __entry->irq, __entry->ret)
2098d1e3dcaSThomas Gleixner );
2108d1e3dcaSThomas Gleixner 
2118d1e3dcaSThomas Gleixner #define DEFINE_IRQ_VECTOR_RESERVE_EVENT(name)	\
2128d1e3dcaSThomas Gleixner DEFINE_EVENT_FN(vector_reserve, name,	\
2138d1e3dcaSThomas Gleixner 	TP_PROTO(unsigned int irq, int ret),	\
2148d1e3dcaSThomas Gleixner 	TP_ARGS(irq, ret), NULL, NULL);		\
2158d1e3dcaSThomas Gleixner 
2168d1e3dcaSThomas Gleixner DEFINE_IRQ_VECTOR_RESERVE_EVENT(vector_reserve_managed);
2178d1e3dcaSThomas Gleixner DEFINE_IRQ_VECTOR_RESERVE_EVENT(vector_reserve);
2188d1e3dcaSThomas Gleixner 
2198d1e3dcaSThomas Gleixner TRACE_EVENT(vector_alloc,
2208d1e3dcaSThomas Gleixner 
2218d1e3dcaSThomas Gleixner 	TP_PROTO(unsigned int irq, unsigned int vector, bool reserved,
2228d1e3dcaSThomas Gleixner 		 int ret),
2238d1e3dcaSThomas Gleixner 
224838d76d6SDou Liyang 	TP_ARGS(irq, vector, reserved, ret),
2258d1e3dcaSThomas Gleixner 
2268d1e3dcaSThomas Gleixner 	TP_STRUCT__entry(
2278d1e3dcaSThomas Gleixner 		__field(	unsigned int,	irq		)
2288d1e3dcaSThomas Gleixner 		__field(	unsigned int,	vector		)
2298d1e3dcaSThomas Gleixner 		__field(	bool,		reserved	)
2308d1e3dcaSThomas Gleixner 		__field(	int,		ret		)
2318d1e3dcaSThomas Gleixner 	),
2328d1e3dcaSThomas Gleixner 
2338d1e3dcaSThomas Gleixner 	TP_fast_assign(
2348d1e3dcaSThomas Gleixner 		__entry->irq		= irq;
2358d1e3dcaSThomas Gleixner 		__entry->vector		= ret < 0 ? 0 : vector;
2368d1e3dcaSThomas Gleixner 		__entry->reserved	= reserved;
2378d1e3dcaSThomas Gleixner 		__entry->ret		= ret > 0 ? 0 : ret;
2388d1e3dcaSThomas Gleixner 	),
2398d1e3dcaSThomas Gleixner 
2408d1e3dcaSThomas Gleixner 	TP_printk("irq=%u vector=%u reserved=%d ret=%d",
2418d1e3dcaSThomas Gleixner 		  __entry->irq, __entry->vector,
2428d1e3dcaSThomas Gleixner 		  __entry->reserved, __entry->ret)
2438d1e3dcaSThomas Gleixner );
2448d1e3dcaSThomas Gleixner 
2458d1e3dcaSThomas Gleixner TRACE_EVENT(vector_alloc_managed,
2468d1e3dcaSThomas Gleixner 
2478d1e3dcaSThomas Gleixner 	TP_PROTO(unsigned int irq, unsigned int vector,
2488d1e3dcaSThomas Gleixner 		 int ret),
2498d1e3dcaSThomas Gleixner 
2508d1e3dcaSThomas Gleixner 	TP_ARGS(irq, vector, ret),
2518d1e3dcaSThomas Gleixner 
2528d1e3dcaSThomas Gleixner 	TP_STRUCT__entry(
2538d1e3dcaSThomas Gleixner 		__field(	unsigned int,	irq		)
2548d1e3dcaSThomas Gleixner 		__field(	unsigned int,	vector		)
2558d1e3dcaSThomas Gleixner 		__field(	int,		ret		)
2568d1e3dcaSThomas Gleixner 	),
2578d1e3dcaSThomas Gleixner 
2588d1e3dcaSThomas Gleixner 	TP_fast_assign(
2598d1e3dcaSThomas Gleixner 		__entry->irq		= irq;
2608d1e3dcaSThomas Gleixner 		__entry->vector		= ret < 0 ? 0 : vector;
2618d1e3dcaSThomas Gleixner 		__entry->ret		= ret > 0 ? 0 : ret;
2628d1e3dcaSThomas Gleixner 	),
2638d1e3dcaSThomas Gleixner 
2648d1e3dcaSThomas Gleixner 	TP_printk("irq=%u vector=%u ret=%d",
2658d1e3dcaSThomas Gleixner 		  __entry->irq, __entry->vector, __entry->ret)
2668d1e3dcaSThomas Gleixner );
2678d1e3dcaSThomas Gleixner 
2688d1e3dcaSThomas Gleixner DECLARE_EVENT_CLASS(vector_activate,
2698d1e3dcaSThomas Gleixner 
2708d1e3dcaSThomas Gleixner 	TP_PROTO(unsigned int irq, bool is_managed, bool can_reserve,
271702cb0a0SThomas Gleixner 		 bool reserve),
2728d1e3dcaSThomas Gleixner 
273702cb0a0SThomas Gleixner 	TP_ARGS(irq, is_managed, can_reserve, reserve),
2748d1e3dcaSThomas Gleixner 
2758d1e3dcaSThomas Gleixner 	TP_STRUCT__entry(
2768d1e3dcaSThomas Gleixner 		__field(	unsigned int,	irq		)
2778d1e3dcaSThomas Gleixner 		__field(	bool,		is_managed	)
2788d1e3dcaSThomas Gleixner 		__field(	bool,		can_reserve	)
279702cb0a0SThomas Gleixner 		__field(	bool,		reserve		)
2808d1e3dcaSThomas Gleixner 	),
2818d1e3dcaSThomas Gleixner 
2828d1e3dcaSThomas Gleixner 	TP_fast_assign(
2838d1e3dcaSThomas Gleixner 		__entry->irq		= irq;
2848d1e3dcaSThomas Gleixner 		__entry->is_managed	= is_managed;
2858d1e3dcaSThomas Gleixner 		__entry->can_reserve	= can_reserve;
286702cb0a0SThomas Gleixner 		__entry->reserve	= reserve;
2878d1e3dcaSThomas Gleixner 	),
2888d1e3dcaSThomas Gleixner 
289702cb0a0SThomas Gleixner 	TP_printk("irq=%u is_managed=%d can_reserve=%d reserve=%d",
2908d1e3dcaSThomas Gleixner 		  __entry->irq, __entry->is_managed, __entry->can_reserve,
291702cb0a0SThomas Gleixner 		  __entry->reserve)
2928d1e3dcaSThomas Gleixner );
2938d1e3dcaSThomas Gleixner 
2948d1e3dcaSThomas Gleixner #define DEFINE_IRQ_VECTOR_ACTIVATE_EVENT(name)				\
2958d1e3dcaSThomas Gleixner DEFINE_EVENT_FN(vector_activate, name,					\
2968d1e3dcaSThomas Gleixner 	TP_PROTO(unsigned int irq, bool is_managed,			\
297702cb0a0SThomas Gleixner 		 bool can_reserve, bool reserve),			\
298702cb0a0SThomas Gleixner 	TP_ARGS(irq, is_managed, can_reserve, reserve), NULL, NULL);	\
2998d1e3dcaSThomas Gleixner 
3008d1e3dcaSThomas Gleixner DEFINE_IRQ_VECTOR_ACTIVATE_EVENT(vector_activate);
3018d1e3dcaSThomas Gleixner DEFINE_IRQ_VECTOR_ACTIVATE_EVENT(vector_deactivate);
3028d1e3dcaSThomas Gleixner 
3038d1e3dcaSThomas Gleixner TRACE_EVENT(vector_teardown,
3048d1e3dcaSThomas Gleixner 
3058d1e3dcaSThomas Gleixner 	TP_PROTO(unsigned int irq, bool is_managed, bool has_reserved),
3068d1e3dcaSThomas Gleixner 
3078d1e3dcaSThomas Gleixner 	TP_ARGS(irq, is_managed, has_reserved),
3088d1e3dcaSThomas Gleixner 
3098d1e3dcaSThomas Gleixner 	TP_STRUCT__entry(
3108d1e3dcaSThomas Gleixner 		__field(	unsigned int,	irq		)
3118d1e3dcaSThomas Gleixner 		__field(	bool,		is_managed	)
3128d1e3dcaSThomas Gleixner 		__field(	bool,		has_reserved	)
3138d1e3dcaSThomas Gleixner 	),
3148d1e3dcaSThomas Gleixner 
3158d1e3dcaSThomas Gleixner 	TP_fast_assign(
3168d1e3dcaSThomas Gleixner 		__entry->irq		= irq;
3178d1e3dcaSThomas Gleixner 		__entry->is_managed	= is_managed;
3188d1e3dcaSThomas Gleixner 		__entry->has_reserved	= has_reserved;
3198d1e3dcaSThomas Gleixner 	),
3208d1e3dcaSThomas Gleixner 
3218d1e3dcaSThomas Gleixner 	TP_printk("irq=%u is_managed=%d has_reserved=%d",
3228d1e3dcaSThomas Gleixner 		  __entry->irq, __entry->is_managed, __entry->has_reserved)
3238d1e3dcaSThomas Gleixner );
3248d1e3dcaSThomas Gleixner 
3258d1e3dcaSThomas Gleixner TRACE_EVENT(vector_setup,
3268d1e3dcaSThomas Gleixner 
3278d1e3dcaSThomas Gleixner 	TP_PROTO(unsigned int irq, bool is_legacy, int ret),
3288d1e3dcaSThomas Gleixner 
3298d1e3dcaSThomas Gleixner 	TP_ARGS(irq, is_legacy, ret),
3308d1e3dcaSThomas Gleixner 
3318d1e3dcaSThomas Gleixner 	TP_STRUCT__entry(
3328d1e3dcaSThomas Gleixner 		__field(	unsigned int,	irq		)
3338d1e3dcaSThomas Gleixner 		__field(	bool,		is_legacy	)
3348d1e3dcaSThomas Gleixner 		__field(	int,		ret		)
3358d1e3dcaSThomas Gleixner 	),
3368d1e3dcaSThomas Gleixner 
3378d1e3dcaSThomas Gleixner 	TP_fast_assign(
3388d1e3dcaSThomas Gleixner 		__entry->irq		= irq;
3398d1e3dcaSThomas Gleixner 		__entry->is_legacy	= is_legacy;
3408d1e3dcaSThomas Gleixner 		__entry->ret		= ret;
3418d1e3dcaSThomas Gleixner 	),
3428d1e3dcaSThomas Gleixner 
3438d1e3dcaSThomas Gleixner 	TP_printk("irq=%u is_legacy=%d ret=%d",
3448d1e3dcaSThomas Gleixner 		  __entry->irq, __entry->is_legacy, __entry->ret)
3458d1e3dcaSThomas Gleixner );
3468d1e3dcaSThomas Gleixner 
3478d1e3dcaSThomas Gleixner TRACE_EVENT(vector_free_moved,
3488d1e3dcaSThomas Gleixner 
3490696d059SThomas Gleixner 	TP_PROTO(unsigned int irq, unsigned int cpu, unsigned int vector,
3500696d059SThomas Gleixner 		 bool is_managed),
3518d1e3dcaSThomas Gleixner 
3520696d059SThomas Gleixner 	TP_ARGS(irq, cpu, vector, is_managed),
3538d1e3dcaSThomas Gleixner 
3548d1e3dcaSThomas Gleixner 	TP_STRUCT__entry(
3558d1e3dcaSThomas Gleixner 		__field(	unsigned int,	irq		)
3560696d059SThomas Gleixner 		__field(	unsigned int,	cpu		)
3578d1e3dcaSThomas Gleixner 		__field(	unsigned int,	vector		)
3588d1e3dcaSThomas Gleixner 		__field(	bool,		is_managed	)
3598d1e3dcaSThomas Gleixner 	),
3608d1e3dcaSThomas Gleixner 
3618d1e3dcaSThomas Gleixner 	TP_fast_assign(
3628d1e3dcaSThomas Gleixner 		__entry->irq		= irq;
3630696d059SThomas Gleixner 		__entry->cpu		= cpu;
3648d1e3dcaSThomas Gleixner 		__entry->vector		= vector;
3658d1e3dcaSThomas Gleixner 		__entry->is_managed	= is_managed;
3668d1e3dcaSThomas Gleixner 	),
3678d1e3dcaSThomas Gleixner 
3680696d059SThomas Gleixner 	TP_printk("irq=%u cpu=%u vector=%u is_managed=%d",
3690696d059SThomas Gleixner 		  __entry->irq, __entry->cpu, __entry->vector,
3700696d059SThomas Gleixner 		  __entry->is_managed)
3718d1e3dcaSThomas Gleixner );
3728d1e3dcaSThomas Gleixner 
3738d1e3dcaSThomas Gleixner 
37473285527SThomas Gleixner #endif /* CONFIG_X86_LOCAL_APIC */
375cf910e83SSeiji Aguchi 
376cf910e83SSeiji Aguchi #undef TRACE_INCLUDE_PATH
377ad3bc25aSBorislav Petkov #undef TRACE_INCLUDE_FILE
378cf910e83SSeiji Aguchi #define TRACE_INCLUDE_PATH .
379cf910e83SSeiji Aguchi #define TRACE_INCLUDE_FILE irq_vectors
380cf910e83SSeiji Aguchi #endif /*  _TRACE_IRQ_VECTORS_H */
381cf910e83SSeiji Aguchi 
382cf910e83SSeiji Aguchi /* This part must be outside protection */
383cf910e83SSeiji Aguchi #include <trace/define_trace.h>
384