xref: /linux/include/trace/events/timer_migration.h (revision 056a5087d87ead77dedbe9cf5bde53b7cd4b4651)
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #undef TRACE_SYSTEM
4 #define TRACE_SYSTEM timer_migration
5 
6 #if !defined(_TRACE_TIMER_MIGRATION_H) || defined(TRACE_HEADER_MULTI_READ)
7 #define _TRACE_TIMER_MIGRATION_H
8 
9 #include <linux/tracepoint.h>
10 
11 /* Group events */
12 TRACE_EVENT(tmigr_group_set,
13 
14 	TP_PROTO(struct tmigr_group *group),
15 
16 	TP_ARGS(group),
17 
18 	TP_STRUCT__entry(
19 		__field( void *,	group		)
20 		__field( unsigned int,	lvl		)
21 		__field( unsigned int,	numa_node	)
22 	),
23 
24 	TP_fast_assign(
25 		__entry->group		= group;
26 		__entry->lvl		= group->level;
27 		__entry->numa_node	= group->numa_node;
28 	),
29 
30 	TP_printk("group=%p lvl=%d numa=%d",
31 		  __entry->group, __entry->lvl, __entry->numa_node)
32 );
33 
34 TRACE_EVENT(tmigr_connect_child_parent,
35 
36 	TP_PROTO(struct tmigr_hierarchy *hier, struct tmigr_group *child),
37 
38 	TP_ARGS(hier, child),
39 
40 	TP_STRUCT__entry(
41 		__field( void *,	child		)
42 		__field( void *,	parent		)
43 		__field( unsigned int,	lvl		)
44 		__field( unsigned int,	numa_node	)
45 		__field( unsigned int,	capacity	)
46 		__field( unsigned int,	num_children	)
47 		__field( u32,		groupmask	)
48 	),
49 
50 	TP_fast_assign(
51 		__entry->child		= child;
52 		__entry->parent		= child->parent;
53 		__entry->lvl		= child->parent->level;
54 		__entry->numa_node	= child->parent->numa_node;
55 		__entry->capacity	= hier->capacity;
56 		__entry->num_children	= child->parent->num_children;
57 		__entry->groupmask	= child->groupmask;
58 	),
59 
60 	TP_printk("group=%p groupmask=%0x parent=%p lvl=%d numa=%d capacity=%d num_children=%d",
61 		  __entry->child,  __entry->groupmask, __entry->parent, __entry->lvl,
62 		  __entry->numa_node, __entry->capacity, __entry->num_children)
63 );
64 
65 TRACE_EVENT(tmigr_connect_cpu_parent,
66 
67 	TP_PROTO(struct tmigr_hierarchy *hier, struct tmigr_cpu *tmc),
68 
69 	TP_ARGS(hier, tmc),
70 
71 	TP_STRUCT__entry(
72 		__field( void *,	parent		)
73 		__field( unsigned int,	cpu		)
74 		__field( unsigned int,	lvl		)
75 		__field( unsigned int,	numa_node	)
76 		__field( unsigned int,	capacity	)
77 		__field( unsigned int,	num_children	)
78 		__field( u32,		groupmask	)
79 	),
80 
81 	TP_fast_assign(
82 		__entry->parent		= tmc->tmgroup;
83 		__entry->cpu		= tmc->cpuevt.cpu;
84 		__entry->lvl		= tmc->tmgroup->level;
85 		__entry->numa_node	= tmc->tmgroup->numa_node;
86 		__entry->capacity	= hier->capacity;
87 		__entry->num_children	= tmc->tmgroup->num_children;
88 		__entry->groupmask	= tmc->groupmask;
89 	),
90 
91 	TP_printk("cpu=%d groupmask=%0x parent=%p lvl=%d numa=%d capacity=%d num_children=%d",
92 		  __entry->cpu,	 __entry->groupmask, __entry->parent, __entry->lvl,
93 		  __entry->numa_node, __entry->capacity, __entry->num_children)
94 );
95 
96 DECLARE_EVENT_CLASS(tmigr_group_and_cpu,
97 
98 	TP_PROTO(struct tmigr_group *group, union tmigr_state state, u32 childmask),
99 
100 	TP_ARGS(group, state, childmask),
101 
102 	TP_STRUCT__entry(
103 		__field( void *,	group		)
104 		__field( void *,	parent		)
105 		__field( unsigned int,	lvl		)
106 		__field( unsigned int,	numa_node	)
107 		__field( u32,		childmask	)
108 		__field( u8,		active		)
109 		__field( u8,		migrator	)
110 	),
111 
112 	TP_fast_assign(
113 		__entry->group		= group;
114 		__entry->parent		= group->parent;
115 		__entry->lvl		= group->level;
116 		__entry->numa_node	= group->numa_node;
117 		__entry->childmask	= childmask;
118 		__entry->active		= state.active;
119 		__entry->migrator	= state.migrator;
120 	),
121 
122 	TP_printk("group=%p lvl=%d numa=%d active=%0x migrator=%0x "
123 		  "parent=%p childmask=%0x",
124 		  __entry->group, __entry->lvl, __entry->numa_node,
125 		  __entry->active, __entry->migrator,
126 		  __entry->parent, __entry->childmask)
127 );
128 
129 DEFINE_EVENT(tmigr_group_and_cpu, tmigr_group_set_cpu_inactive,
130 
131 	TP_PROTO(struct tmigr_group *group, union tmigr_state state, u32 childmask),
132 
133 	TP_ARGS(group, state, childmask)
134 );
135 
136 DEFINE_EVENT(tmigr_group_and_cpu, tmigr_group_set_cpu_active,
137 
138 	TP_PROTO(struct tmigr_group *group, union tmigr_state state, u32 childmask),
139 
140 	TP_ARGS(group, state, childmask)
141 );
142 
143 /* CPU events*/
144 DECLARE_EVENT_CLASS(tmigr_cpugroup,
145 
146 	TP_PROTO(struct tmigr_cpu *tmc),
147 
148 	TP_ARGS(tmc),
149 
150 	TP_STRUCT__entry(
151 		__field( u64,		wakeup	)
152 		__field( void *,	parent	)
153 		__field( unsigned int,	cpu	)
154 
155 	),
156 
157 	TP_fast_assign(
158 		__entry->wakeup		= tmc->wakeup;
159 		__entry->parent		= tmc->tmgroup;
160 		__entry->cpu		= tmc->cpuevt.cpu;
161 	),
162 
163 	TP_printk("cpu=%d parent=%p wakeup=%llu", __entry->cpu, __entry->parent, __entry->wakeup)
164 );
165 
166 DEFINE_EVENT(tmigr_cpugroup, tmigr_cpu_new_timer,
167 
168 	TP_PROTO(struct tmigr_cpu *tmc),
169 
170 	TP_ARGS(tmc)
171 );
172 
173 DEFINE_EVENT(tmigr_cpugroup, tmigr_cpu_active,
174 
175 	TP_PROTO(struct tmigr_cpu *tmc),
176 
177 	TP_ARGS(tmc)
178 );
179 
180 DEFINE_EVENT(tmigr_cpugroup, tmigr_cpu_available,
181 
182 	TP_PROTO(struct tmigr_cpu *tmc),
183 
184 	TP_ARGS(tmc)
185 );
186 
187 DEFINE_EVENT(tmigr_cpugroup, tmigr_cpu_unavailable,
188 
189 	TP_PROTO(struct tmigr_cpu *tmc),
190 
191 	TP_ARGS(tmc)
192 );
193 
194 DEFINE_EVENT(tmigr_cpugroup, tmigr_handle_remote_cpu,
195 
196 	TP_PROTO(struct tmigr_cpu *tmc),
197 
198 	TP_ARGS(tmc)
199 );
200 
201 DECLARE_EVENT_CLASS(tmigr_idle,
202 
203 	TP_PROTO(struct tmigr_cpu *tmc, u64 nextevt),
204 
205 	TP_ARGS(tmc, nextevt),
206 
207 	TP_STRUCT__entry(
208 		__field( u64,		nextevt)
209 		__field( u64,		wakeup)
210 		__field( void *,	parent)
211 		__field( unsigned int,	cpu)
212 	),
213 
214 	TP_fast_assign(
215 		__entry->nextevt	= nextevt;
216 		__entry->wakeup		= tmc->wakeup;
217 		__entry->parent		= tmc->tmgroup;
218 		__entry->cpu		= tmc->cpuevt.cpu;
219 	),
220 
221 	TP_printk("cpu=%d parent=%p nextevt=%llu wakeup=%llu",
222 		  __entry->cpu, __entry->parent, __entry->nextevt, __entry->wakeup)
223 );
224 
225 DEFINE_EVENT(tmigr_idle, tmigr_cpu_idle,
226 
227 	TP_PROTO(struct tmigr_cpu *tmc, u64 nextevt),
228 
229 	TP_ARGS(tmc, nextevt)
230 );
231 
232 DEFINE_EVENT(tmigr_idle, tmigr_cpu_new_timer_idle,
233 
234 	TP_PROTO(struct tmigr_cpu *tmc, u64 nextevt),
235 
236 	TP_ARGS(tmc, nextevt)
237 );
238 
239 TRACE_EVENT(tmigr_update_events,
240 
241 	TP_PROTO(struct tmigr_group *child, struct tmigr_group *group,
242 		 union tmigr_state childstate,	union tmigr_state groupstate,
243 		 u64 nextevt),
244 
245 	TP_ARGS(child, group, childstate, groupstate, nextevt),
246 
247 	TP_STRUCT__entry(
248 		__field( void *,	child			)
249 		__field( void *,	group			)
250 		__field( u64,		nextevt			)
251 		__field( u64,		group_next_expiry	)
252 		__field( u64,		child_evt_expiry	)
253 		__field( unsigned int,	group_lvl		)
254 		__field( unsigned int,	child_evtcpu		)
255 		__field( u8,		child_active		)
256 		__field( u8,		group_active		)
257 	),
258 
259 	TP_fast_assign(
260 		__entry->child			= child;
261 		__entry->group			= group;
262 		__entry->nextevt		= nextevt;
263 		__entry->group_next_expiry	= group->next_expiry;
264 		__entry->child_evt_expiry	= child ? child->groupevt.nextevt.expires : 0;
265 		__entry->group_lvl		= group->level;
266 		__entry->child_evtcpu		= child ? child->groupevt.cpu : 0;
267 		__entry->child_active		= childstate.active;
268 		__entry->group_active		= groupstate.active;
269 	),
270 
271 	TP_printk("child=%p group=%p group_lvl=%d child_active=%0x group_active=%0x "
272 		  "nextevt=%llu next_expiry=%llu child_evt_expiry=%llu child_evtcpu=%d",
273 		  __entry->child, __entry->group, __entry->group_lvl, __entry->child_active,
274 		  __entry->group_active,
275 		  __entry->nextevt, __entry->group_next_expiry, __entry->child_evt_expiry,
276 		  __entry->child_evtcpu)
277 );
278 
279 TRACE_EVENT(tmigr_handle_remote,
280 
281 	TP_PROTO(struct tmigr_group *group),
282 
283 	TP_ARGS(group),
284 
285 	TP_STRUCT__entry(
286 		__field( void * ,	group	)
287 		__field( unsigned int ,	lvl	)
288 	),
289 
290 	TP_fast_assign(
291 		__entry->group		= group;
292 		__entry->lvl		= group->level;
293 	),
294 
295 	TP_printk("group=%p lvl=%d",
296 		   __entry->group, __entry->lvl)
297 );
298 
299 #endif /*  _TRACE_TIMER_MIGRATION_H */
300 
301 /* This part must be outside protection */
302 #include <trace/define_trace.h>
303