1 /* SPDX-License-Identifier: GPL-2.0 */ 1 /* SPDX-License-Identifier: GPL-2.0 */ 2 #undef TRACE_SYSTEM 2 #undef TRACE_SYSTEM 3 #define TRACE_SYSTEM ipi 3 #define TRACE_SYSTEM ipi 4 4 5 #if !defined(_TRACE_IPI_H) || defined(TRACE_HE 5 #if !defined(_TRACE_IPI_H) || defined(TRACE_HEADER_MULTI_READ) 6 #define _TRACE_IPI_H 6 #define _TRACE_IPI_H 7 7 8 #include <linux/tracepoint.h> 8 #include <linux/tracepoint.h> 9 9 10 /** 10 /** 11 * ipi_raise - called when a smp cross call is 11 * ipi_raise - called when a smp cross call is made 12 * 12 * 13 * @mask: mask of recipient CPUs for the IPI 13 * @mask: mask of recipient CPUs for the IPI 14 * @reason: string identifying the IPI purpose 14 * @reason: string identifying the IPI purpose 15 * 15 * 16 * It is necessary for @reason to be a static 16 * It is necessary for @reason to be a static string declared with 17 * __tracepoint_string. 17 * __tracepoint_string. 18 */ 18 */ 19 TRACE_EVENT(ipi_raise, 19 TRACE_EVENT(ipi_raise, 20 20 21 TP_PROTO(const struct cpumask *mask, c 21 TP_PROTO(const struct cpumask *mask, const char *reason), 22 22 23 TP_ARGS(mask, reason), 23 TP_ARGS(mask, reason), 24 24 25 TP_STRUCT__entry( 25 TP_STRUCT__entry( 26 __bitmask(target_cpus, nr_cpum 26 __bitmask(target_cpus, nr_cpumask_bits) 27 __field(const char *, reason) 27 __field(const char *, reason) 28 ), 28 ), 29 29 30 TP_fast_assign( 30 TP_fast_assign( 31 __assign_bitmask(target_cpus, 31 __assign_bitmask(target_cpus, cpumask_bits(mask), nr_cpumask_bits); 32 __entry->reason = reason; 32 __entry->reason = reason; 33 ), 33 ), 34 34 35 TP_printk("target_mask=%s (%s)", __get 35 TP_printk("target_mask=%s (%s)", __get_bitmask(target_cpus), __entry->reason) 36 ); 36 ); 37 37 38 TRACE_EVENT(ipi_send_cpu, 38 TRACE_EVENT(ipi_send_cpu, 39 39 40 TP_PROTO(const unsigned int cpu, unsig 40 TP_PROTO(const unsigned int cpu, unsigned long callsite, void *callback), 41 41 42 TP_ARGS(cpu, callsite, callback), 42 TP_ARGS(cpu, callsite, callback), 43 43 44 TP_STRUCT__entry( 44 TP_STRUCT__entry( 45 __field(unsigned int, cpu) 45 __field(unsigned int, cpu) 46 __field(void *, callsite) 46 __field(void *, callsite) 47 __field(void *, callback) 47 __field(void *, callback) 48 ), 48 ), 49 49 50 TP_fast_assign( 50 TP_fast_assign( 51 __entry->cpu = cpu; 51 __entry->cpu = cpu; 52 __entry->callsite = (void *)ca 52 __entry->callsite = (void *)callsite; 53 __entry->callback = callback; 53 __entry->callback = callback; 54 ), 54 ), 55 55 56 TP_printk("cpu=%u callsite=%pS callbac 56 TP_printk("cpu=%u callsite=%pS callback=%pS", 57 __entry->cpu, __entry->calls 57 __entry->cpu, __entry->callsite, __entry->callback) 58 ); 58 ); 59 59 60 TRACE_EVENT(ipi_send_cpumask, 60 TRACE_EVENT(ipi_send_cpumask, 61 61 62 TP_PROTO(const struct cpumask *cpumask 62 TP_PROTO(const struct cpumask *cpumask, unsigned long callsite, void *callback), 63 63 64 TP_ARGS(cpumask, callsite, callback), 64 TP_ARGS(cpumask, callsite, callback), 65 65 66 TP_STRUCT__entry( 66 TP_STRUCT__entry( 67 __cpumask(cpumask) 67 __cpumask(cpumask) 68 __field(void *, callsite) 68 __field(void *, callsite) 69 __field(void *, callback) 69 __field(void *, callback) 70 ), 70 ), 71 71 72 TP_fast_assign( 72 TP_fast_assign( 73 __assign_cpumask(cpumask, cpum 73 __assign_cpumask(cpumask, cpumask_bits(cpumask)); 74 __entry->callsite = (void *)ca 74 __entry->callsite = (void *)callsite; 75 __entry->callback = callback; 75 __entry->callback = callback; 76 ), 76 ), 77 77 78 TP_printk("cpumask=%s callsite=%pS cal 78 TP_printk("cpumask=%s callsite=%pS callback=%pS", 79 __get_cpumask(cpumask), __en 79 __get_cpumask(cpumask), __entry->callsite, __entry->callback) 80 ); 80 ); 81 81 82 DECLARE_EVENT_CLASS(ipi_handler, 82 DECLARE_EVENT_CLASS(ipi_handler, 83 83 84 TP_PROTO(const char *reason), 84 TP_PROTO(const char *reason), 85 85 86 TP_ARGS(reason), 86 TP_ARGS(reason), 87 87 88 TP_STRUCT__entry( 88 TP_STRUCT__entry( 89 __field(const char *, reason) 89 __field(const char *, reason) 90 ), 90 ), 91 91 92 TP_fast_assign( 92 TP_fast_assign( 93 __entry->reason = reason; 93 __entry->reason = reason; 94 ), 94 ), 95 95 96 TP_printk("(%s)", __entry->reason) 96 TP_printk("(%s)", __entry->reason) 97 ); 97 ); 98 98 99 /** 99 /** 100 * ipi_entry - called immediately before the I 100 * ipi_entry - called immediately before the IPI handler 101 * 101 * 102 * @reason: string identifying the IPI purpose 102 * @reason: string identifying the IPI purpose 103 * 103 * 104 * It is necessary for @reason to be a static 104 * It is necessary for @reason to be a static string declared with 105 * __tracepoint_string, ideally the same as us 105 * __tracepoint_string, ideally the same as used with trace_ipi_raise 106 * for that IPI. 106 * for that IPI. 107 */ 107 */ 108 DEFINE_EVENT(ipi_handler, ipi_entry, 108 DEFINE_EVENT(ipi_handler, ipi_entry, 109 109 110 TP_PROTO(const char *reason), 110 TP_PROTO(const char *reason), 111 111 112 TP_ARGS(reason) 112 TP_ARGS(reason) 113 ); 113 ); 114 114 115 /** 115 /** 116 * ipi_exit - called immediately after the IPI 116 * ipi_exit - called immediately after the IPI handler returns 117 * 117 * 118 * @reason: string identifying the IPI purpose 118 * @reason: string identifying the IPI purpose 119 * 119 * 120 * It is necessary for @reason to be a static 120 * It is necessary for @reason to be a static string declared with 121 * __tracepoint_string, ideally the same as us 121 * __tracepoint_string, ideally the same as used with trace_ipi_raise for 122 * that IPI. 122 * that IPI. 123 */ 123 */ 124 DEFINE_EVENT(ipi_handler, ipi_exit, 124 DEFINE_EVENT(ipi_handler, ipi_exit, 125 125 126 TP_PROTO(const char *reason), 126 TP_PROTO(const char *reason), 127 127 128 TP_ARGS(reason) 128 TP_ARGS(reason) 129 ); 129 ); 130 130 131 #endif /* _TRACE_IPI_H */ 131 #endif /* _TRACE_IPI_H */ 132 132 133 /* This part must be outside protection */ 133 /* This part must be outside protection */ 134 #include <trace/define_trace.h> 134 #include <trace/define_trace.h> 135 135
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.