1 1.1 riastrad /* $NetBSD: trace.h,v 1.2 2021/12/18 23:45:31 riastradh Exp $ */ 2 1.1 riastrad 3 1.1 riastrad /* 4 1.1 riastrad * Copyright 2011-2016 Intel Corporation 5 1.1 riastrad * 6 1.1 riastrad * Permission is hereby granted, free of charge, to any person obtaining a 7 1.1 riastrad * copy of this software and associated documentation files (the "Software"), 8 1.1 riastrad * to deal in the Software without restriction, including without limitation 9 1.1 riastrad * the rights to use, copy, modify, merge, publish, distribute, sublicense, 10 1.1 riastrad * and/or sell copies of the Software, and to permit persons to whom the 11 1.1 riastrad * Software is furnished to do so, subject to the following conditions: 12 1.1 riastrad * 13 1.1 riastrad * The above copyright notice and this permission notice (including the next 14 1.1 riastrad * paragraph) shall be included in all copies or substantial portions of the 15 1.1 riastrad * Software. 16 1.1 riastrad * 17 1.1 riastrad * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 1.1 riastrad * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 1.1 riastrad * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 20 1.1 riastrad * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 1.1 riastrad * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 22 1.1 riastrad * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 23 1.1 riastrad * IN THE SOFTWARE. 24 1.1 riastrad * 25 1.1 riastrad * Authors: 26 1.1 riastrad * Jike Song <jike.song (at) intel.com> 27 1.1 riastrad * 28 1.1 riastrad * Contributors: 29 1.1 riastrad * Zhi Wang <zhi.a.wang (at) intel.com> 30 1.1 riastrad * 31 1.1 riastrad */ 32 1.1 riastrad 33 1.1 riastrad #if !defined(_GVT_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ) 34 1.1 riastrad #define _GVT_TRACE_H_ 35 1.1 riastrad 36 1.1 riastrad #include <linux/types.h> 37 1.1 riastrad #include <linux/stringify.h> 38 1.1 riastrad #include <linux/tracepoint.h> 39 1.1 riastrad #include <asm/tsc.h> 40 1.1 riastrad 41 1.1 riastrad #undef TRACE_SYSTEM 42 1.1 riastrad #define TRACE_SYSTEM gvt 43 1.1 riastrad 44 1.1 riastrad TRACE_EVENT(spt_alloc, 45 1.1 riastrad TP_PROTO(int id, void *spt, int type, unsigned long mfn, 46 1.1 riastrad unsigned long gpt_gfn), 47 1.1 riastrad 48 1.1 riastrad TP_ARGS(id, spt, type, mfn, gpt_gfn), 49 1.1 riastrad 50 1.1 riastrad TP_STRUCT__entry( 51 1.1 riastrad __field(int, id) 52 1.1 riastrad __field(void *, spt) 53 1.1 riastrad __field(int, type) 54 1.1 riastrad __field(unsigned long, mfn) 55 1.1 riastrad __field(unsigned long, gpt_gfn) 56 1.1 riastrad ), 57 1.1 riastrad 58 1.1 riastrad TP_fast_assign( 59 1.1 riastrad __entry->id = id; 60 1.1 riastrad __entry->spt = spt; 61 1.1 riastrad __entry->type = type; 62 1.1 riastrad __entry->mfn = mfn; 63 1.1 riastrad __entry->gpt_gfn = gpt_gfn; 64 1.1 riastrad ), 65 1.1 riastrad 66 1.1 riastrad TP_printk("VM%d [alloc] spt %p type %d mfn 0x%lx gfn 0x%lx\n", 67 1.1 riastrad __entry->id, 68 1.1 riastrad __entry->spt, 69 1.1 riastrad __entry->type, 70 1.1 riastrad __entry->mfn, 71 1.1 riastrad __entry->gpt_gfn) 72 1.1 riastrad ); 73 1.1 riastrad 74 1.1 riastrad TRACE_EVENT(spt_free, 75 1.1 riastrad TP_PROTO(int id, void *spt, int type), 76 1.1 riastrad 77 1.1 riastrad TP_ARGS(id, spt, type), 78 1.1 riastrad 79 1.1 riastrad TP_STRUCT__entry( 80 1.1 riastrad __field(int, id) 81 1.1 riastrad __field(void *, spt) 82 1.1 riastrad __field(int, type) 83 1.1 riastrad ), 84 1.1 riastrad 85 1.1 riastrad TP_fast_assign( 86 1.1 riastrad __entry->id = id; 87 1.1 riastrad __entry->spt = spt; 88 1.1 riastrad __entry->type = type; 89 1.1 riastrad ), 90 1.1 riastrad 91 1.1 riastrad TP_printk("VM%u [free] spt %p type %d\n", 92 1.1 riastrad __entry->id, 93 1.1 riastrad __entry->spt, 94 1.1 riastrad __entry->type) 95 1.1 riastrad ); 96 1.1 riastrad 97 1.1 riastrad #define MAX_BUF_LEN 256 98 1.1 riastrad 99 1.1 riastrad TRACE_EVENT(gma_index, 100 1.1 riastrad TP_PROTO(const char *prefix, unsigned long gma, 101 1.1 riastrad unsigned long index), 102 1.1 riastrad 103 1.1 riastrad TP_ARGS(prefix, gma, index), 104 1.1 riastrad 105 1.1 riastrad TP_STRUCT__entry( 106 1.1 riastrad __array(char, buf, MAX_BUF_LEN) 107 1.1 riastrad ), 108 1.1 riastrad 109 1.1 riastrad TP_fast_assign( 110 1.1 riastrad snprintf(__entry->buf, MAX_BUF_LEN, 111 1.1 riastrad "%s gma 0x%lx index 0x%lx\n", prefix, gma, index); 112 1.1 riastrad ), 113 1.1 riastrad 114 1.1 riastrad TP_printk("%s", __entry->buf) 115 1.1 riastrad ); 116 1.1 riastrad 117 1.1 riastrad TRACE_EVENT(gma_translate, 118 1.1 riastrad TP_PROTO(int id, char *type, int ring_id, int root_entry_type, 119 1.1 riastrad unsigned long gma, unsigned long gpa), 120 1.1 riastrad 121 1.1 riastrad TP_ARGS(id, type, ring_id, root_entry_type, gma, gpa), 122 1.1 riastrad 123 1.1 riastrad TP_STRUCT__entry( 124 1.1 riastrad __array(char, buf, MAX_BUF_LEN) 125 1.1 riastrad ), 126 1.1 riastrad 127 1.1 riastrad TP_fast_assign( 128 1.1 riastrad snprintf(__entry->buf, MAX_BUF_LEN, 129 1.1 riastrad "VM%d %s ring %d root_entry_type %d gma 0x%lx -> gpa 0x%lx\n", 130 1.1 riastrad id, type, ring_id, root_entry_type, gma, gpa); 131 1.1 riastrad ), 132 1.1 riastrad 133 1.1 riastrad TP_printk("%s", __entry->buf) 134 1.1 riastrad ); 135 1.1 riastrad 136 1.1 riastrad TRACE_EVENT(spt_refcount, 137 1.1 riastrad TP_PROTO(int id, char *action, void *spt, int before, int after), 138 1.1 riastrad 139 1.1 riastrad TP_ARGS(id, action, spt, before, after), 140 1.1 riastrad 141 1.1 riastrad TP_STRUCT__entry( 142 1.1 riastrad __array(char, buf, MAX_BUF_LEN) 143 1.1 riastrad ), 144 1.1 riastrad 145 1.1 riastrad TP_fast_assign( 146 1.1 riastrad snprintf(__entry->buf, MAX_BUF_LEN, 147 1.1 riastrad "VM%d [%s] spt %p before %d -> after %d\n", 148 1.1 riastrad id, action, spt, before, after); 149 1.1 riastrad ), 150 1.1 riastrad 151 1.1 riastrad TP_printk("%s", __entry->buf) 152 1.1 riastrad ); 153 1.1 riastrad 154 1.1 riastrad TRACE_EVENT(spt_change, 155 1.1 riastrad TP_PROTO(int id, char *action, void *spt, unsigned long gfn, 156 1.1 riastrad int type), 157 1.1 riastrad 158 1.1 riastrad TP_ARGS(id, action, spt, gfn, type), 159 1.1 riastrad 160 1.1 riastrad TP_STRUCT__entry( 161 1.1 riastrad __array(char, buf, MAX_BUF_LEN) 162 1.1 riastrad ), 163 1.1 riastrad 164 1.1 riastrad TP_fast_assign( 165 1.1 riastrad snprintf(__entry->buf, MAX_BUF_LEN, 166 1.1 riastrad "VM%d [%s] spt %p gfn 0x%lx type %d\n", 167 1.1 riastrad id, action, spt, gfn, type); 168 1.1 riastrad ), 169 1.1 riastrad 170 1.1 riastrad TP_printk("%s", __entry->buf) 171 1.1 riastrad ); 172 1.1 riastrad 173 1.1 riastrad TRACE_EVENT(spt_guest_change, 174 1.1 riastrad TP_PROTO(int id, const char *tag, void *spt, int type, u64 v, 175 1.1 riastrad unsigned long index), 176 1.1 riastrad 177 1.1 riastrad TP_ARGS(id, tag, spt, type, v, index), 178 1.1 riastrad 179 1.1 riastrad TP_STRUCT__entry( 180 1.1 riastrad __array(char, buf, MAX_BUF_LEN) 181 1.1 riastrad ), 182 1.1 riastrad 183 1.1 riastrad TP_fast_assign( 184 1.1 riastrad snprintf(__entry->buf, MAX_BUF_LEN, 185 1.1 riastrad "VM%d [%s] spt %p type %d entry 0x%llx index 0x%lx\n", 186 1.1 riastrad id, tag, spt, type, v, index); 187 1.1 riastrad ), 188 1.1 riastrad 189 1.1 riastrad TP_printk("%s", __entry->buf) 190 1.1 riastrad ); 191 1.1 riastrad 192 1.1 riastrad TRACE_EVENT(oos_change, 193 1.1 riastrad TP_PROTO(int id, const char *tag, int page_id, void *gpt, int type), 194 1.1 riastrad 195 1.1 riastrad TP_ARGS(id, tag, page_id, gpt, type), 196 1.1 riastrad 197 1.1 riastrad TP_STRUCT__entry( 198 1.1 riastrad __array(char, buf, MAX_BUF_LEN) 199 1.1 riastrad ), 200 1.1 riastrad 201 1.1 riastrad TP_fast_assign( 202 1.1 riastrad snprintf(__entry->buf, MAX_BUF_LEN, 203 1.1 riastrad "VM%d [oos %s] page id %d gpt %p type %d\n", 204 1.1 riastrad id, tag, page_id, gpt, type); 205 1.1 riastrad ), 206 1.1 riastrad 207 1.1 riastrad TP_printk("%s", __entry->buf) 208 1.1 riastrad ); 209 1.1 riastrad 210 1.1 riastrad TRACE_EVENT(oos_sync, 211 1.1 riastrad TP_PROTO(int id, int page_id, void *gpt, int type, u64 v, 212 1.1 riastrad unsigned long index), 213 1.1 riastrad 214 1.1 riastrad TP_ARGS(id, page_id, gpt, type, v, index), 215 1.1 riastrad 216 1.1 riastrad TP_STRUCT__entry( 217 1.1 riastrad __array(char, buf, MAX_BUF_LEN) 218 1.1 riastrad ), 219 1.1 riastrad 220 1.1 riastrad TP_fast_assign( 221 1.1 riastrad snprintf(__entry->buf, MAX_BUF_LEN, 222 1.1 riastrad "VM%d [oos sync] page id %d gpt %p type %d entry 0x%llx index 0x%lx\n", 223 1.1 riastrad id, page_id, gpt, type, v, index); 224 1.1 riastrad ), 225 1.1 riastrad 226 1.1 riastrad TP_printk("%s", __entry->buf) 227 1.1 riastrad ); 228 1.1 riastrad 229 1.1 riastrad #define GVT_CMD_STR_LEN 40 230 1.1 riastrad TRACE_EVENT(gvt_command, 231 1.1 riastrad TP_PROTO(u8 vgpu_id, u8 ring_id, u32 ip_gma, u32 *cmd_va, 232 1.1 riastrad u32 cmd_len, u32 buf_type, u32 buf_addr_type, 233 1.1 riastrad void *workload, const char *cmd_name), 234 1.1 riastrad 235 1.1 riastrad TP_ARGS(vgpu_id, ring_id, ip_gma, cmd_va, cmd_len, buf_type, 236 1.1 riastrad buf_addr_type, workload, cmd_name), 237 1.1 riastrad 238 1.1 riastrad TP_STRUCT__entry( 239 1.1 riastrad __field(u8, vgpu_id) 240 1.1 riastrad __field(u8, ring_id) 241 1.1 riastrad __field(u32, ip_gma) 242 1.1 riastrad __field(u32, buf_type) 243 1.1 riastrad __field(u32, buf_addr_type) 244 1.1 riastrad __field(u32, cmd_len) 245 1.1 riastrad __field(void*, workload) 246 1.1 riastrad __dynamic_array(u32, raw_cmd, cmd_len) 247 1.1 riastrad __array(char, cmd_name, GVT_CMD_STR_LEN) 248 1.1 riastrad ), 249 1.1 riastrad 250 1.1 riastrad TP_fast_assign( 251 1.1 riastrad __entry->vgpu_id = vgpu_id; 252 1.1 riastrad __entry->ring_id = ring_id; 253 1.1 riastrad __entry->ip_gma = ip_gma; 254 1.1 riastrad __entry->buf_type = buf_type; 255 1.1 riastrad __entry->buf_addr_type = buf_addr_type; 256 1.1 riastrad __entry->cmd_len = cmd_len; 257 1.1 riastrad __entry->workload = workload; 258 1.1 riastrad snprintf(__entry->cmd_name, GVT_CMD_STR_LEN, "%s", cmd_name); 259 1.1 riastrad memcpy(__get_dynamic_array(raw_cmd), cmd_va, cmd_len * sizeof(*cmd_va)); 260 1.1 riastrad ), 261 1.1 riastrad 262 1.1 riastrad 263 1.1 riastrad TP_printk("vgpu%d ring %d: address_type %u, buf_type %u, ip_gma %08x,cmd (name=%s,len=%u,raw cmd=%s), workload=%p\n", 264 1.1 riastrad __entry->vgpu_id, 265 1.1 riastrad __entry->ring_id, 266 1.1 riastrad __entry->buf_addr_type, 267 1.1 riastrad __entry->buf_type, 268 1.1 riastrad __entry->ip_gma, 269 1.1 riastrad __entry->cmd_name, 270 1.1 riastrad __entry->cmd_len, 271 1.1 riastrad __print_array(__get_dynamic_array(raw_cmd), 272 1.1 riastrad __entry->cmd_len, 4), 273 1.1 riastrad __entry->workload) 274 1.1 riastrad ); 275 1.1 riastrad 276 1.1 riastrad #define GVT_TEMP_STR_LEN 10 277 1.1 riastrad TRACE_EVENT(write_ir, 278 1.1 riastrad TP_PROTO(int id, char *reg_name, unsigned int reg, unsigned int new_val, 279 1.1 riastrad unsigned int old_val, bool changed), 280 1.1 riastrad 281 1.1 riastrad TP_ARGS(id, reg_name, reg, new_val, old_val, changed), 282 1.1 riastrad 283 1.1 riastrad TP_STRUCT__entry( 284 1.1 riastrad __field(int, id) 285 1.1 riastrad __array(char, buf, GVT_TEMP_STR_LEN) 286 1.1 riastrad __field(unsigned int, reg) 287 1.1 riastrad __field(unsigned int, new_val) 288 1.1 riastrad __field(unsigned int, old_val) 289 1.1 riastrad __field(bool, changed) 290 1.1 riastrad ), 291 1.1 riastrad 292 1.1 riastrad TP_fast_assign( 293 1.1 riastrad __entry->id = id; 294 1.1 riastrad snprintf(__entry->buf, GVT_TEMP_STR_LEN, "%s", reg_name); 295 1.1 riastrad __entry->reg = reg; 296 1.1 riastrad __entry->new_val = new_val; 297 1.1 riastrad __entry->old_val = old_val; 298 1.1 riastrad __entry->changed = changed; 299 1.1 riastrad ), 300 1.1 riastrad 301 1.1 riastrad TP_printk("VM%u write [%s] %x, new %08x, old %08x, changed %08x\n", 302 1.1 riastrad __entry->id, __entry->buf, __entry->reg, __entry->new_val, 303 1.1 riastrad __entry->old_val, __entry->changed) 304 1.1 riastrad ); 305 1.1 riastrad 306 1.1 riastrad TRACE_EVENT(propagate_event, 307 1.1 riastrad TP_PROTO(int id, const char *irq_name, int bit), 308 1.1 riastrad 309 1.1 riastrad TP_ARGS(id, irq_name, bit), 310 1.1 riastrad 311 1.1 riastrad TP_STRUCT__entry( 312 1.1 riastrad __field(int, id) 313 1.1 riastrad __array(char, buf, GVT_TEMP_STR_LEN) 314 1.1 riastrad __field(int, bit) 315 1.1 riastrad ), 316 1.1 riastrad 317 1.1 riastrad TP_fast_assign( 318 1.1 riastrad __entry->id = id; 319 1.1 riastrad snprintf(__entry->buf, GVT_TEMP_STR_LEN, "%s", irq_name); 320 1.1 riastrad __entry->bit = bit; 321 1.1 riastrad ), 322 1.1 riastrad 323 1.1 riastrad TP_printk("Set bit (%d) for (%s) for vgpu (%d)\n", 324 1.1 riastrad __entry->bit, __entry->buf, __entry->id) 325 1.1 riastrad ); 326 1.1 riastrad 327 1.1 riastrad TRACE_EVENT(inject_msi, 328 1.1 riastrad TP_PROTO(int id, unsigned int address, unsigned int data), 329 1.1 riastrad 330 1.1 riastrad TP_ARGS(id, address, data), 331 1.1 riastrad 332 1.1 riastrad TP_STRUCT__entry( 333 1.1 riastrad __field(int, id) 334 1.1 riastrad __field(unsigned int, address) 335 1.1 riastrad __field(unsigned int, data) 336 1.1 riastrad ), 337 1.1 riastrad 338 1.1 riastrad TP_fast_assign( 339 1.1 riastrad __entry->id = id; 340 1.1 riastrad __entry->address = address; 341 1.1 riastrad __entry->data = data; 342 1.1 riastrad ), 343 1.1 riastrad 344 1.1 riastrad TP_printk("vgpu%d:inject msi address %x data %x\n", 345 1.1 riastrad __entry->id, __entry->address, __entry->data) 346 1.1 riastrad ); 347 1.1 riastrad 348 1.1 riastrad TRACE_EVENT(render_mmio, 349 1.1 riastrad TP_PROTO(int old_id, int new_id, char *action, unsigned int reg, 350 1.1 riastrad unsigned int old_val, unsigned int new_val), 351 1.1 riastrad 352 1.1 riastrad TP_ARGS(old_id, new_id, action, reg, old_val, new_val), 353 1.1 riastrad 354 1.1 riastrad TP_STRUCT__entry( 355 1.1 riastrad __field(int, old_id) 356 1.1 riastrad __field(int, new_id) 357 1.1 riastrad __array(char, buf, GVT_TEMP_STR_LEN) 358 1.1 riastrad __field(unsigned int, reg) 359 1.1 riastrad __field(unsigned int, old_val) 360 1.1 riastrad __field(unsigned int, new_val) 361 1.1 riastrad ), 362 1.1 riastrad 363 1.1 riastrad TP_fast_assign( 364 1.1 riastrad __entry->old_id = old_id; 365 1.1 riastrad __entry->new_id = new_id; 366 1.1 riastrad snprintf(__entry->buf, GVT_TEMP_STR_LEN, "%s", action); 367 1.1 riastrad __entry->reg = reg; 368 1.1 riastrad __entry->old_val = old_val; 369 1.1 riastrad __entry->new_val = new_val; 370 1.1 riastrad ), 371 1.1 riastrad 372 1.1 riastrad TP_printk("VM%u -> VM%u %s reg %x, old %08x new %08x\n", 373 1.1 riastrad __entry->old_id, __entry->new_id, 374 1.1 riastrad __entry->buf, __entry->reg, 375 1.1 riastrad __entry->old_val, __entry->new_val) 376 1.1 riastrad ); 377 1.1 riastrad 378 1.1 riastrad #endif /* _GVT_TRACE_H_ */ 379 1.1 riastrad 380 1.1 riastrad /* This part must be out of protection */ 381 1.1 riastrad #undef TRACE_INCLUDE_PATH 382 1.1 riastrad #define TRACE_INCLUDE_PATH . 383 1.1 riastrad #undef TRACE_INCLUDE_FILE 384 1.1 riastrad #define TRACE_INCLUDE_FILE trace 385 1.1 riastrad #include <trace/define_trace.h> 386