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