xref: /linux/drivers/hv/mshv_trace.h (revision 80acc80ea25dad5f8f71bafcadca6258efec6236)
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  * Copyright (c) 2026, Microsoft Corporation.
4  *
5  * Tracepoint declarations for mshv driver.
6  */
7 
8 #undef TRACE_SYSTEM
9 #define TRACE_SYSTEM mshv
10 
11 #if !defined(__MSHV_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
12 #define _MSHV_TRACE_H_
13 
14 #include <linux/tracepoint.h>
15 
16 #undef TRACE_INCLUDE_PATH
17 #define TRACE_INCLUDE_PATH ../../drivers/hv
18 
19 #undef TRACE_INCLUDE_FILE
20 #define TRACE_INCLUDE_FILE mshv_trace
21 
22 TRACE_EVENT(mshv_create_partition,
23 	    TP_PROTO(u64 partition_id, int vm_fd),
24 	    TP_ARGS(partition_id, vm_fd),
25 	    TP_STRUCT__entry(
26 		    __field(u64, partition_id)
27 		    __field(int, vm_fd)
28 	    ),
29 	    TP_fast_assign(
30 		    __entry->partition_id = partition_id;
31 		    __entry->vm_fd = vm_fd;
32 	    ),
33 	    TP_printk("partition_id=%llu vm_fd=%d",
34 		    __entry->partition_id,
35 		    __entry->vm_fd
36 	    )
37 );
38 
39 TRACE_EVENT(mshv_hvcall_create_partition,
40 	    TP_PROTO(u64 flags, s64 partition_id),
41 	    TP_ARGS(flags, partition_id),
42 	    TP_STRUCT__entry(
43 		    __field(u64, flags)
44 		    __field(s64, partition_id)
45 	    ),
46 	    TP_fast_assign(
47 		    __entry->flags = flags;
48 		    __entry->partition_id = partition_id;
49 	    ),
50 	    TP_printk("flags=%#llx partition_id=%lld",
51 		    __entry->flags,
52 		    __entry->partition_id
53 	    )
54 );
55 
56 TRACE_EVENT(mshv_hvcall_initialize_partition,
57 	    TP_PROTO(u64 partition_id, u64 status),
58 	    TP_ARGS(partition_id, status),
59 	    TP_STRUCT__entry(
60 		    __field(u64, partition_id)
61 		    __field(u64, status)
62 	    ),
63 	    TP_fast_assign(
64 		    __entry->partition_id = partition_id;
65 		    __entry->status = status;
66 	    ),
67 	    TP_printk("partition_id=%llu status=%#llx",
68 		    __entry->partition_id,
69 		    __entry->status
70 	    )
71 );
72 
73 TRACE_EVENT(mshv_partition_release,
74 	    TP_PROTO(u64 partition_id),
75 	    TP_ARGS(partition_id),
76 	    TP_STRUCT__entry(
77 		    __field(u64, partition_id)
78 	    ),
79 	    TP_fast_assign(
80 		    __entry->partition_id = partition_id;
81 	    ),
82 	    TP_printk("partition_id=%llu",
83 		    __entry->partition_id
84 	    )
85 );
86 
87 TRACE_EVENT(mshv_destroy_partition,
88 	    TP_PROTO(u64 partition_id),
89 	    TP_ARGS(partition_id),
90 	    TP_STRUCT__entry(
91 		    __field(u64, partition_id)
92 	    ),
93 	    TP_fast_assign(
94 		    __entry->partition_id = partition_id;
95 	    ),
96 	    TP_printk("partition_id=%llu",
97 		    __entry->partition_id
98 	    )
99 );
100 
101 TRACE_EVENT(mshv_hvcall_finalize_partition,
102 	    TP_PROTO(u64 partition_id, u64 status),
103 	    TP_ARGS(partition_id, status),
104 	    TP_STRUCT__entry(
105 		    __field(u64, partition_id)
106 		    __field(u64, status)
107 	    ),
108 	    TP_fast_assign(
109 		    __entry->partition_id = partition_id;
110 		    __entry->status = status;
111 	    ),
112 	    TP_printk("partition_id=%llu status=%#llx ",
113 		    __entry->partition_id,
114 		    __entry->status
115 	    )
116 );
117 
118 TRACE_EVENT(mshv_hvcall_withdraw_memory,
119 	    TP_PROTO(u64 partition_id, u64 withdrawn, u64 status),
120 	    TP_ARGS(partition_id, withdrawn, status),
121 	    TP_STRUCT__entry(
122 		    __field(u64, partition_id)
123 		    __field(u64, withdrawn)
124 		    __field(u64, status)
125 	    ),
126 	    TP_fast_assign(
127 		    __entry->partition_id = partition_id;
128 		    __entry->withdrawn = withdrawn;
129 		    __entry->status = status;
130 	    ),
131 	    TP_printk("partition_id=%llu withdrawn=%llu status=%#llx",
132 		    __entry->partition_id,
133 		    __entry->withdrawn,
134 		    __entry->status
135 	    )
136 );
137 
138 TRACE_EVENT(mshv_hvcall_delete_partition,
139 	    TP_PROTO(u64 partition_id, u64 status),
140 	    TP_ARGS(partition_id, status),
141 	    TP_STRUCT__entry(
142 		    __field(u64, partition_id)
143 		    __field(u64, status)
144 	    ),
145 	    TP_fast_assign(
146 		    __entry->partition_id = partition_id;
147 		    __entry->status = status;
148 	    ),
149 	    TP_printk("partition_id=%llu status=%#llx",
150 		    __entry->partition_id,
151 		    __entry->status
152 	    )
153 );
154 
155 TRACE_EVENT(mshv_create_vp,
156 	    TP_PROTO(u64 partition_id, u32 vp_index, long vp_fd),
157 	    TP_ARGS(partition_id, vp_index, vp_fd),
158 	    TP_STRUCT__entry(
159 		    __field(u64, partition_id)
160 		    __field(u32, vp_index)
161 		    __field(long, vp_fd)
162 	    ),
163 	    TP_fast_assign(
164 		    __entry->partition_id = partition_id;
165 		    __entry->vp_index = vp_index;
166 		    __entry->vp_fd = vp_fd;
167 	    ),
168 	    TP_printk("partition_id=%llu vp_index=%u vp_fd=%ld",
169 		    __entry->partition_id,
170 		    __entry->vp_index,
171 		    __entry->vp_fd
172 	    )
173 );
174 
175 TRACE_EVENT(mshv_hvcall_map_vp_state_page,
176 	    TP_PROTO(u64 partition_id, u32 vp_index, u32 page_type, u64 status),
177 	    TP_ARGS(partition_id, vp_index, page_type, status),
178 	    TP_STRUCT__entry(
179 		    __field(u64, partition_id)
180 		    __field(u32, vp_index)
181 		    __field(u32, page_type)
182 		    __field(u64, status)
183 	    ),
184 	    TP_fast_assign(
185 		    __entry->partition_id = partition_id;
186 		    __entry->vp_index = vp_index;
187 		    __entry->page_type = page_type;
188 		    __entry->status = status;
189 	    ),
190 	    TP_printk("partition_id=%llu vp_index=%u page_type=%u status=%#llx",
191 		    __entry->partition_id,
192 		    __entry->vp_index,
193 		    __entry->page_type,
194 		    __entry->status
195 	    )
196 );
197 
198 TRACE_EVENT(mshv_drain_vp_signals,
199 	    TP_PROTO(u64 partition_id, u32 vp_index),
200 	    TP_ARGS(partition_id, vp_index),
201 	    TP_STRUCT__entry(
202 		    __field(u64, partition_id)
203 		    __field(u32, vp_index)
204 	    ),
205 	    TP_fast_assign(
206 		    __entry->partition_id = partition_id;
207 		    __entry->vp_index = vp_index;
208 	    ),
209 	    TP_printk("partition_id=%llu vp_index=%u",
210 		    __entry->partition_id,
211 		    __entry->vp_index
212 	    )
213 );
214 
215 TRACE_EVENT(mshv_disable_vp_dispatch,
216 	    TP_PROTO(u64 partition_id, u32 vp_index, int ret),
217 	    TP_ARGS(partition_id, vp_index, ret),
218 	    TP_STRUCT__entry(
219 		    __field(u64, partition_id)
220 		    __field(u32, vp_index)
221 		    __field(int, ret)
222 	    ),
223 	    TP_fast_assign(
224 		    __entry->partition_id = partition_id;
225 		    __entry->vp_index = vp_index;
226 		    __entry->ret = ret;
227 	    ),
228 	    TP_printk("partition_id=%llu vp_index=%u ret=%d",
229 		    __entry->partition_id,
230 		    __entry->vp_index,
231 		    __entry->ret
232 	    )
233 );
234 
235 TRACE_EVENT(mshv_vp_release,
236 	    TP_PROTO(u64 partition_id, u32 vp_index),
237 	    TP_ARGS(partition_id, vp_index),
238 	    TP_STRUCT__entry(
239 		    __field(u64, partition_id)
240 		    __field(u32, vp_index)
241 	    ),
242 	    TP_fast_assign(
243 		    __entry->partition_id = partition_id;
244 		    __entry->vp_index = vp_index;
245 	    ),
246 	    TP_printk("partition_id=%llu vp_index=%u",
247 		    __entry->partition_id,
248 		    __entry->vp_index
249 	    )
250 );
251 
252 TRACE_EVENT(mshv_run_vp_entry,
253 	    TP_PROTO(u64 partition_id, u32 vp_index),
254 	    TP_ARGS(partition_id, vp_index),
255 	    TP_STRUCT__entry(
256 		    __field(u64, partition_id)
257 		    __field(u32, vp_index)
258 	    ),
259 	    TP_fast_assign(
260 		    __entry->partition_id = partition_id;
261 		    __entry->vp_index = vp_index;
262 	    ),
263 	    TP_printk("partition_id=%llu vp_index=%u",
264 		    __entry->partition_id,
265 		    __entry->vp_index
266 	    )
267 );
268 
269 TRACE_EVENT(mshv_run_vp_exit,
270 	    TP_PROTO(u64 partition_id, u32 vp_index, u64 hv_message_type, long ret),
271 	    TP_ARGS(partition_id, vp_index, hv_message_type, ret),
272 	    TP_STRUCT__entry(
273 		    __field(u64, partition_id)
274 		    __field(u32, vp_index)
275 		    __field(u64, hv_message_type)
276 		    __field(long, ret)
277 	    ),
278 	    TP_fast_assign(
279 		    __entry->partition_id = partition_id;
280 		    __entry->vp_index = vp_index;
281 		    __entry->hv_message_type = hv_message_type;
282 		    __entry->ret = ret;
283 	    ),
284 	    TP_printk("partition_id=%llu vp_index=%u hv_message_type=%#llx ret=%ld",
285 		    __entry->partition_id,
286 		    __entry->vp_index,
287 		    __entry->hv_message_type,
288 		    __entry->ret
289 	    )
290 );
291 
292 TRACE_EVENT(mshv_vp_clear_explicit_suspend,
293 	    TP_PROTO(u64 partition_id, u32 vp_index, int ret),
294 	    TP_ARGS(partition_id, vp_index, ret),
295 	    TP_STRUCT__entry(
296 		    __field(u64, partition_id)
297 		    __field(u32, vp_index)
298 		    __field(int, ret)
299 	    ),
300 	    TP_fast_assign(
301 		    __entry->partition_id = partition_id;
302 		    __entry->vp_index = vp_index;
303 		    __entry->ret = ret;
304 	    ),
305 	    TP_printk("partition_id=%llu vp_index=%u ret=%d",
306 		    __entry->partition_id,
307 		    __entry->vp_index,
308 		    __entry->ret
309 	    )
310 );
311 
312 TRACE_EVENT(mshv_xfer_to_guest_mode_work,
313 	    TP_PROTO(u64 partition_id, u32 vp_index, unsigned long thread_info_flag, long ret),
314 	    TP_ARGS(partition_id, vp_index, thread_info_flag, ret),
315 	    TP_STRUCT__entry(
316 		    __field(u64, partition_id)
317 		    __field(u32, vp_index)
318 		    __field(unsigned long, thread_info_flag)
319 		    __field(long, ret)
320 	    ),
321 	    TP_fast_assign(
322 		    __entry->partition_id = partition_id;
323 		    __entry->vp_index = vp_index;
324 		    __entry->thread_info_flag = thread_info_flag;
325 		    __entry->ret = ret;
326 	    ),
327 	    TP_printk("partition_id=%llu vp_index=%u thread_info_flag=%#lx ret=%ld",
328 		    __entry->partition_id,
329 		    __entry->vp_index,
330 		    __entry->thread_info_flag,
331 		    __entry->ret
332 	    )
333 );
334 
335 TRACE_EVENT(mshv_hvcall_dispatch_vp,
336 	    TP_PROTO(u64 partition_id, u32 vp_index, u32 flags,
337 		     u32 dispatch_state, u32 dispatch_event, u64 irq_vectors, u64 status),
338 	    TP_ARGS(partition_id, vp_index, flags, dispatch_state, dispatch_event, irq_vectors,
339 		    status),
340 	    TP_STRUCT__entry(
341 		    __field(u64, partition_id)
342 		    __field(u32, vp_index)
343 		    __field(u32, flags)
344 		    __field(u32, dispatch_state)
345 		    __field(u32, dispatch_event)
346 		    __field(u64, irq_vectors)
347 		    __field(u64, status)
348 	    ),
349 	    TP_fast_assign(
350 		    __entry->partition_id = partition_id;
351 		    __entry->vp_index = vp_index;
352 		    __entry->flags = flags;
353 		    __entry->dispatch_state = dispatch_state;
354 		    __entry->dispatch_event = dispatch_event;
355 		    __entry->irq_vectors = irq_vectors;
356 		    __entry->status = status;
357 	    ),
358 	    TP_printk("partition_id=%llu vp_index=%u flags=%#x dispatch_state=%#x dispatch_event=%#x irq_vectors=%#016llx status=%#llx",
359 		    __entry->partition_id,
360 		    __entry->vp_index,
361 		    __entry->flags,
362 		    __entry->dispatch_state,
363 		    __entry->dispatch_event,
364 		    __entry->irq_vectors,
365 		    __entry->status
366 	     )
367 );
368 
369 TRACE_EVENT(mshv_update_routing_table,
370 	    TP_PROTO(u64 partition_id, void *old, void *new, u32 numents),
371 	    TP_ARGS(partition_id, old, new, numents),
372 	    TP_STRUCT__entry(
373 		    __field(u64, partition_id)
374 		    __field(struct mshv_girq_routing_table *, old)
375 		    __field(struct mshv_girq_routing_table *, new)
376 		    __field(u32, numents)
377 	    ),
378 	    TP_fast_assign(
379 		    __entry->partition_id = partition_id;
380 		    __entry->old = old;
381 		    __entry->new = new;
382 		    __entry->numents = numents;
383 	    ),
384 	    TP_printk("partition_id=%llu old=%p new=%p numents=%u",
385 		    __entry->partition_id,
386 		    __entry->old,
387 		    __entry->new,
388 		    __entry->numents
389 	    )
390 );
391 
392 TRACE_EVENT(mshv_map_user_memory,
393 	    TP_PROTO(u64 partition_id, u64 start_uaddr, u64 start_gfn, u64 nr_pages, u32 map_flags,
394 		     long ret),
395 	    TP_ARGS(partition_id, start_uaddr, start_gfn, nr_pages, map_flags, ret),
396 	    TP_STRUCT__entry(
397 		    __field(u64, partition_id)
398 		    __field(u64, start_uaddr)
399 		    __field(u64, start_gfn)
400 		    __field(u64, nr_pages)
401 		    __field(u32, map_flags)
402 		    __field(long, ret)
403 	    ),
404 	    TP_fast_assign(
405 		    __entry->partition_id = partition_id;
406 		    __entry->start_uaddr = start_uaddr;
407 		    __entry->start_gfn = start_gfn;
408 		    __entry->nr_pages = nr_pages;
409 		    __entry->map_flags = map_flags;
410 		    __entry->ret = ret;
411 	    ),
412 	    TP_printk("partition_id=%llu start_uaddr=%#llx start_gfn=%#llx nr_pages=%llu map_flags=%#x ret=%ld",
413 		    __entry->partition_id,
414 		    __entry->start_uaddr,
415 		    __entry->start_gfn,
416 		    __entry->nr_pages,
417 		    __entry->map_flags,
418 		    __entry->ret
419 	     )
420 );
421 
422 TRACE_EVENT(mshv_assign_ioeventfd,
423 	    TP_PROTO(u64 partition_id, u64 addr, u64 length, u64 datamatch, bool wildcard,
424 		     void *eventfd, int ret),
425 	    TP_ARGS(partition_id, addr, length, datamatch, wildcard, eventfd, ret),
426 	    TP_STRUCT__entry(
427 		    __field(u64, partition_id)
428 		    __field(u64, addr)
429 		    __field(u64, length)
430 		    __field(u64, datamatch)
431 		    __field(bool, wildcard)
432 		    __field(struct eventfd_ctx *, eventfd)
433 		    __field(int, ret)
434 	    ),
435 	    TP_fast_assign(
436 		    __entry->partition_id = partition_id;
437 		    __entry->addr = addr;
438 		    __entry->length = length;
439 		    __entry->datamatch = datamatch;
440 		    __entry->wildcard = wildcard;
441 		    __entry->eventfd = eventfd;
442 		    __entry->ret = ret;
443 	    ),
444 	    TP_printk("partition_id=%llu addr=%#016llx length=%#llx datamatch=%#llx wildcard=%d eventfd=%p ret=%d",
445 		    __entry->partition_id,
446 		    __entry->addr,
447 		    __entry->length,
448 		    __entry->datamatch,
449 		    __entry->wildcard,
450 		    __entry->eventfd,
451 		    __entry->ret
452 	     )
453 );
454 
455 TRACE_EVENT(mshv_deassign_ioeventfd,
456 	    TP_PROTO(u64 partition_id, u64 addr, u64 length, u64 datamatch, bool wildcard,
457 		     void *eventfd),
458 	    TP_ARGS(partition_id, addr, length, datamatch, wildcard, eventfd),
459 	    TP_STRUCT__entry(
460 		    __field(u64, partition_id)
461 		    __field(u64, addr)
462 		    __field(u64, length)
463 		    __field(u64, datamatch)
464 		    __field(bool, wildcard)
465 		    __field(struct eventfd_ctx *, eventfd)
466 	    ),
467 	    TP_fast_assign(
468 		    __entry->partition_id = partition_id;
469 		    __entry->addr = addr;
470 		    __entry->length = length;
471 		    __entry->datamatch = datamatch;
472 		    __entry->wildcard = wildcard;
473 		    __entry->eventfd = eventfd;
474 	    ),
475 	    TP_printk("partition_id=%llu addr=%#016llx length=%#llx datamatch=%#llx wildcard=%d eventfd=%p",
476 		    __entry->partition_id,
477 		    __entry->addr,
478 		    __entry->length,
479 		    __entry->datamatch,
480 		    __entry->wildcard,
481 		    __entry->eventfd
482 	     )
483 );
484 
485 TRACE_EVENT(mshv_vp_wait_for_hv_kick,
486 	    TP_PROTO(u64 partition_id, u32 vp_index, bool kicked_by_hv, bool blocked,
487 		     bool irq_pending),
488 	    TP_ARGS(partition_id, vp_index, kicked_by_hv, blocked, irq_pending),
489 	    TP_STRUCT__entry(
490 		    __field(u64, partition_id)
491 		    __field(u32, vp_index)
492 		    __field(bool, kicked_by_hv)
493 		    __field(bool, blocked)
494 		    __field(bool, irq_pending)
495 	    ),
496 	    TP_fast_assign(
497 		    __entry->partition_id = partition_id;
498 		    __entry->vp_index = vp_index;
499 		    __entry->kicked_by_hv = kicked_by_hv;
500 		    __entry->blocked = blocked;
501 		    __entry->irq_pending = irq_pending;
502 	    ),
503 	    TP_printk("partition_id=%llu vp_index=%u kicked_by_hv=%d blocked=%d irq_pending=%d",
504 		    __entry->partition_id,
505 		    __entry->vp_index,
506 		    __entry->kicked_by_hv,
507 		    __entry->blocked,
508 		    __entry->irq_pending
509 	    )
510 );
511 
512 #endif /* _MSHV_TRACE_H_ */
513 
514 /* This part must be outside protection */
515 #include <trace/define_trace.h>
516