1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 /* 3 * Copyright © 2024 Intel Corporation 4 */ 5 6 #undef TRACE_SYSTEM 7 #define TRACE_SYSTEM xe 8 9 #if !defined(_XE_TRACE_BO_H_) || defined(TRACE_HEADER_MULTI_READ) 10 #define _XE_TRACE_BO_H_ 11 12 #include <linux/tracepoint.h> 13 #include <linux/types.h> 14 15 #include "xe_bo.h" 16 #include "xe_bo_types.h" 17 #include "xe_vm.h" 18 19 #define __dev_name_bo(bo) dev_name(xe_bo_device(bo)->drm.dev) 20 #define __dev_name_vm(vm) dev_name((vm)->xe->drm.dev) 21 #define __dev_name_vma(vma) __dev_name_vm(xe_vma_vm(vma)) 22 23 DECLARE_EVENT_CLASS(xe_bo, 24 TP_PROTO(struct xe_bo *bo), 25 TP_ARGS(bo), 26 27 TP_STRUCT__entry( 28 __string(dev, __dev_name_bo(bo)) 29 __field(size_t, size) 30 __field(u32, flags) 31 __field(struct xe_vm *, vm) 32 ), 33 34 TP_fast_assign( 35 __assign_str(dev); 36 __entry->size = bo->size; 37 __entry->flags = bo->flags; 38 __entry->vm = bo->vm; 39 ), 40 41 TP_printk("dev=%s, size=%zu, flags=0x%02x, vm=%p", 42 __get_str(dev), __entry->size, 43 __entry->flags, __entry->vm) 44 ); 45 46 DEFINE_EVENT(xe_bo, xe_bo_cpu_fault, 47 TP_PROTO(struct xe_bo *bo), 48 TP_ARGS(bo) 49 ); 50 51 DEFINE_EVENT(xe_bo, xe_bo_validate, 52 TP_PROTO(struct xe_bo *bo), 53 TP_ARGS(bo) 54 ); 55 56 DEFINE_EVENT(xe_bo, xe_bo_create, 57 TP_PROTO(struct xe_bo *bo), 58 TP_ARGS(bo) 59 ); 60 61 TRACE_EVENT(xe_bo_move, 62 TP_PROTO(struct xe_bo *bo, uint32_t new_placement, uint32_t old_placement, 63 bool move_lacks_source), 64 TP_ARGS(bo, new_placement, old_placement, move_lacks_source), 65 TP_STRUCT__entry( 66 __field(struct xe_bo *, bo) 67 __field(size_t, size) 68 __string(new_placement_name, xe_mem_type_to_name[new_placement]) 69 __string(old_placement_name, xe_mem_type_to_name[old_placement]) 70 __string(device_id, __dev_name_bo(bo)) 71 __field(bool, move_lacks_source) 72 ), 73 74 TP_fast_assign( 75 __entry->bo = bo; 76 __entry->size = bo->size; 77 __assign_str(new_placement_name); 78 __assign_str(old_placement_name); 79 __assign_str(device_id); 80 __entry->move_lacks_source = move_lacks_source; 81 ), 82 TP_printk("move_lacks_source:%s, migrate object %p [size %zu] from %s to %s device_id:%s", 83 __entry->move_lacks_source ? "yes" : "no", __entry->bo, __entry->size, 84 __get_str(old_placement_name), 85 __get_str(new_placement_name), __get_str(device_id)) 86 ); 87 88 DECLARE_EVENT_CLASS(xe_vma, 89 TP_PROTO(struct xe_vma *vma), 90 TP_ARGS(vma), 91 92 TP_STRUCT__entry( 93 __string(dev, __dev_name_vma(vma)) 94 __field(struct xe_vma *, vma) 95 __field(struct xe_vm *, vm) 96 __field(u32, asid) 97 __field(u64, start) 98 __field(u64, end) 99 __field(u64, ptr) 100 ), 101 102 TP_fast_assign( 103 __assign_str(dev); 104 __entry->vma = vma; 105 __entry->vm = xe_vma_vm(vma); 106 __entry->asid = xe_vma_vm(vma)->usm.asid; 107 __entry->start = xe_vma_start(vma); 108 __entry->end = xe_vma_end(vma) - 1; 109 __entry->ptr = xe_vma_userptr(vma); 110 ), 111 112 TP_printk("dev=%s, vma=%p, vm=%p, asid=0x%05x, start=0x%012llx, end=0x%012llx, userptr=0x%012llx", 113 __get_str(dev), __entry->vma, __entry->vm, 114 __entry->asid, __entry->start, 115 __entry->end, __entry->ptr) 116 ) 117 118 DEFINE_EVENT(xe_vma, xe_vma_flush, 119 TP_PROTO(struct xe_vma *vma), 120 TP_ARGS(vma) 121 ); 122 123 DEFINE_EVENT(xe_vma, xe_vma_pagefault, 124 TP_PROTO(struct xe_vma *vma), 125 TP_ARGS(vma) 126 ); 127 128 DEFINE_EVENT(xe_vma, xe_vma_acc, 129 TP_PROTO(struct xe_vma *vma), 130 TP_ARGS(vma) 131 ); 132 133 DEFINE_EVENT(xe_vma, xe_vma_bind, 134 TP_PROTO(struct xe_vma *vma), 135 TP_ARGS(vma) 136 ); 137 138 DEFINE_EVENT(xe_vma, xe_vma_pf_bind, 139 TP_PROTO(struct xe_vma *vma), 140 TP_ARGS(vma) 141 ); 142 143 DEFINE_EVENT(xe_vma, xe_vma_unbind, 144 TP_PROTO(struct xe_vma *vma), 145 TP_ARGS(vma) 146 ); 147 148 DEFINE_EVENT(xe_vma, xe_vma_userptr_rebind_worker, 149 TP_PROTO(struct xe_vma *vma), 150 TP_ARGS(vma) 151 ); 152 153 DEFINE_EVENT(xe_vma, xe_vma_userptr_rebind_exec, 154 TP_PROTO(struct xe_vma *vma), 155 TP_ARGS(vma) 156 ); 157 158 DEFINE_EVENT(xe_vma, xe_vma_rebind_worker, 159 TP_PROTO(struct xe_vma *vma), 160 TP_ARGS(vma) 161 ); 162 163 DEFINE_EVENT(xe_vma, xe_vma_rebind_exec, 164 TP_PROTO(struct xe_vma *vma), 165 TP_ARGS(vma) 166 ); 167 168 DEFINE_EVENT(xe_vma, xe_vma_userptr_invalidate, 169 TP_PROTO(struct xe_vma *vma), 170 TP_ARGS(vma) 171 ); 172 173 DEFINE_EVENT(xe_vma, xe_vma_invalidate, 174 TP_PROTO(struct xe_vma *vma), 175 TP_ARGS(vma) 176 ); 177 178 DEFINE_EVENT(xe_vma, xe_vma_evict, 179 TP_PROTO(struct xe_vma *vma), 180 TP_ARGS(vma) 181 ); 182 183 DEFINE_EVENT(xe_vma, xe_vma_userptr_invalidate_complete, 184 TP_PROTO(struct xe_vma *vma), 185 TP_ARGS(vma) 186 ); 187 188 DECLARE_EVENT_CLASS(xe_vm, 189 TP_PROTO(struct xe_vm *vm), 190 TP_ARGS(vm), 191 192 TP_STRUCT__entry( 193 __string(dev, __dev_name_vm(vm)) 194 __field(struct xe_vm *, vm) 195 __field(u32, asid) 196 __field(u32, flags) 197 ), 198 199 TP_fast_assign( 200 __assign_str(dev); 201 __entry->vm = vm; 202 __entry->asid = vm->usm.asid; 203 __entry->flags = vm->flags; 204 ), 205 206 TP_printk("dev=%s, vm=%p, asid=0x%05x, vm flags=0x%05x", 207 __get_str(dev), __entry->vm, __entry->asid, 208 __entry->flags) 209 ); 210 211 DEFINE_EVENT(xe_vm, xe_vm_kill, 212 TP_PROTO(struct xe_vm *vm), 213 TP_ARGS(vm) 214 ); 215 216 DEFINE_EVENT(xe_vm, xe_vm_create, 217 TP_PROTO(struct xe_vm *vm), 218 TP_ARGS(vm) 219 ); 220 221 DEFINE_EVENT(xe_vm, xe_vm_free, 222 TP_PROTO(struct xe_vm *vm), 223 TP_ARGS(vm) 224 ); 225 226 DEFINE_EVENT(xe_vm, xe_vm_cpu_bind, 227 TP_PROTO(struct xe_vm *vm), 228 TP_ARGS(vm) 229 ); 230 231 DEFINE_EVENT(xe_vm, xe_vm_restart, 232 TP_PROTO(struct xe_vm *vm), 233 TP_ARGS(vm) 234 ); 235 236 DEFINE_EVENT(xe_vm, xe_vm_rebind_worker_enter, 237 TP_PROTO(struct xe_vm *vm), 238 TP_ARGS(vm) 239 ); 240 241 DEFINE_EVENT(xe_vm, xe_vm_rebind_worker_retry, 242 TP_PROTO(struct xe_vm *vm), 243 TP_ARGS(vm) 244 ); 245 246 DEFINE_EVENT(xe_vm, xe_vm_rebind_worker_exit, 247 TP_PROTO(struct xe_vm *vm), 248 TP_ARGS(vm) 249 ); 250 251 DEFINE_EVENT(xe_vm, xe_vm_ops_fail, 252 TP_PROTO(struct xe_vm *vm), 253 TP_ARGS(vm) 254 ); 255 256 #endif 257 258 /* This part must be outside protection */ 259 #undef TRACE_INCLUDE_PATH 260 #undef TRACE_INCLUDE_FILE 261 #define TRACE_INCLUDE_PATH ../../drivers/gpu/drm/xe 262 #define TRACE_INCLUDE_FILE xe_trace_bo 263 #include <trace/define_trace.h> 264