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