1 /* SPDX-License-Identifier: GPL-2.0 */
2 #undef TRACE_SYSTEM
3 #define TRACE_SYSTEM ipi
4 
5 #if !defined(_TRACE_IPI_H) || defined(TRACE_HEADER_MULTI_READ)
6 #define _TRACE_IPI_H
7 
8 #include <linux/tracepoint.h>
9 
10 /**
11  * ipi_raise - called when a smp cross call is made
12  *
13  * @mask: mask of recipient CPUs for the IPI
14  * @reason: string identifying the IPI purpose
15  *
16  * It is necessary for @reason to be a static string declared with
17  * __tracepoint_string.
18  */
19 TRACE_EVENT(ipi_raise,
20 
21 	TP_PROTO(const struct cpumask *mask, const char *reason),
22 
23 	TP_ARGS(mask, reason),
24 
25 	TP_STRUCT__entry(
26 		__bitmask(target_cpus, nr_cpumask_bits)
27 		__field(const char *, reason)
28 	),
29 
30 	TP_fast_assign(
31 		__assign_bitmask(target_cpus, cpumask_bits(mask), nr_cpumask_bits);
32 		__entry->reason = reason;
33 	),
34 
35 	TP_printk("target_mask=%s (%s)", __get_bitmask(target_cpus), __entry->reason)
36 );
37 
38 DECLARE_EVENT_CLASS(ipi_handler,
39 
40 	TP_PROTO(const char *reason),
41 
42 	TP_ARGS(reason),
43 
44 	TP_STRUCT__entry(
45 		__field(const char *, reason)
46 	),
47 
48 	TP_fast_assign(
49 		__entry->reason = reason;
50 	),
51 
52 	TP_printk("(%s)", __entry->reason)
53 );
54 
55 /**
56  * ipi_entry - called immediately before the IPI handler
57  *
58  * @reason: string identifying the IPI purpose
59  *
60  * It is necessary for @reason to be a static string declared with
61  * __tracepoint_string, ideally the same as used with trace_ipi_raise
62  * for that IPI.
63  */
64 DEFINE_EVENT(ipi_handler, ipi_entry,
65 
66 	TP_PROTO(const char *reason),
67 
68 	TP_ARGS(reason)
69 );
70 
71 /**
72  * ipi_exit - called immediately after the IPI handler returns
73  *
74  * @reason: string identifying the IPI purpose
75  *
76  * It is necessary for @reason to be a static string declared with
77  * __tracepoint_string, ideally the same as used with trace_ipi_raise for
78  * that IPI.
79  */
80 DEFINE_EVENT(ipi_handler, ipi_exit,
81 
82 	TP_PROTO(const char *reason),
83 
84 	TP_ARGS(reason)
85 );
86 
87 #endif /* _TRACE_IPI_H */
88 
89 /* This part must be outside protection */
90 #include <trace/define_trace.h>
91