xref: /linux/drivers/gpu/drm/xe/xe_trace_bo.h (revision 64455314d641639db5b077129849fb00357334bc)
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_xe(xe)	dev_name((xe)->drm.dev)
20 #define __dev_name_bo(bo)	dev_name(xe_bo_device(bo)->drm.dev)
21 #define __dev_name_vm(vm)	dev_name((vm)->xe->drm.dev)
22 #define __dev_name_vma(vma)	__dev_name_vm(xe_vma_vm(vma))
23 
24 #define XE_VM_TRACE_MODE_DMA_FENCE	0
25 #define XE_VM_TRACE_MODE_PREEMPT_FENCE	1
26 #define XE_VM_TRACE_MODE_FAULT		2
27 
28 DECLARE_EVENT_CLASS(xe_bo,
29 		    TP_PROTO(struct xe_bo *bo),
30 		    TP_ARGS(bo),
31 
32 		    TP_STRUCT__entry(
33 			     __string(dev, __dev_name_bo(bo))
34 			     __field(size_t, size)
35 			     __field(u32, flags)
36 			     __field(struct xe_vm *, vm)
37 			     ),
38 
39 		    TP_fast_assign(
40 			   __assign_str(dev);
41 			   __entry->size = xe_bo_size(bo);
42 			   __entry->flags = bo->flags;
43 			   __entry->vm = bo->vm;
44 			   ),
45 
46 		    TP_printk("dev=%s, size=%zu, flags=0x%02x, vm=%p",
47 			      __get_str(dev), __entry->size,
48 			      __entry->flags, __entry->vm)
49 );
50 
51 DEFINE_EVENT(xe_bo, xe_bo_cpu_fault,
52 	     TP_PROTO(struct xe_bo *bo),
53 	     TP_ARGS(bo)
54 );
55 
56 DEFINE_EVENT(xe_bo, xe_bo_validate,
57 	     TP_PROTO(struct xe_bo *bo),
58 	     TP_ARGS(bo)
59 );
60 
61 DEFINE_EVENT(xe_bo, xe_bo_create,
62 	     TP_PROTO(struct xe_bo *bo),
63 	     TP_ARGS(bo)
64 );
65 
66 TRACE_EVENT(xe_bo_move,
67 	    TP_PROTO(struct xe_bo *bo, uint32_t new_placement, uint32_t old_placement,
68 		     bool move_lacks_source),
69 	    TP_ARGS(bo, new_placement, old_placement, move_lacks_source),
70 	    TP_STRUCT__entry(
71 		     __field(struct xe_bo *, bo)
72 		     __field(size_t, size)
73 		     __string(new_placement_name, xe_mem_type_to_name[new_placement])
74 		     __string(old_placement_name, xe_mem_type_to_name[old_placement])
75 		     __string(device_id, __dev_name_bo(bo))
76 		     __field(bool, move_lacks_source)
77 			),
78 
79 	    TP_fast_assign(
80 		   __entry->bo      = bo;
81 		   __entry->size = xe_bo_size(bo);
82 		   __assign_str(new_placement_name);
83 		   __assign_str(old_placement_name);
84 		   __assign_str(device_id);
85 		   __entry->move_lacks_source = move_lacks_source;
86 		   ),
87 	    TP_printk("move_lacks_source:%s, migrate object %p [size %zu] from %s to %s device_id:%s",
88 		      __entry->move_lacks_source ? "yes" : "no", __entry->bo, __entry->size,
89 		      __get_str(old_placement_name),
90 		      __get_str(new_placement_name), __get_str(device_id))
91 );
92 
93 DECLARE_EVENT_CLASS(xe_vma,
94 		    TP_PROTO(struct xe_vma *vma),
95 		    TP_ARGS(vma),
96 
97 		    TP_STRUCT__entry(
98 			     __string(dev, __dev_name_vma(vma))
99 			     __field(struct xe_vma *, vma)
100 			     __field(struct xe_vm *, vm)
101 			     __field(u32, asid)
102 			     __field(u64, start)
103 			     __field(u64, end)
104 			     __field(u64, ptr)
105 			     ),
106 
107 		    TP_fast_assign(
108 			   __assign_str(dev);
109 			   __entry->vma = vma;
110 			   __entry->vm = xe_vma_vm(vma);
111 			   __entry->asid = xe_vma_vm(vma)->usm.asid;
112 			   __entry->start = xe_vma_start(vma);
113 			   __entry->end = xe_vma_end(vma) - 1;
114 			   __entry->ptr = xe_vma_userptr(vma);
115 			   ),
116 
117 		    TP_printk("dev=%s, vma=%p, vm=%p, asid=0x%05x, start=0x%012llx, end=0x%012llx, userptr=0x%012llx",
118 			      __get_str(dev), __entry->vma, __entry->vm,
119 			      __entry->asid, __entry->start,
120 			      __entry->end, __entry->ptr)
121 )
122 
123 DEFINE_EVENT(xe_vma, xe_vma_flush,
124 	     TP_PROTO(struct xe_vma *vma),
125 	     TP_ARGS(vma)
126 );
127 
128 DEFINE_EVENT(xe_vma, xe_vma_pagefault,
129 	     TP_PROTO(struct xe_vma *vma),
130 	     TP_ARGS(vma)
131 );
132 
133 DEFINE_EVENT(xe_vma, xe_vma_acc,
134 	     TP_PROTO(struct xe_vma *vma),
135 	     TP_ARGS(vma)
136 );
137 
138 DEFINE_EVENT(xe_vma, xe_vma_bind,
139 	     TP_PROTO(struct xe_vma *vma),
140 	     TP_ARGS(vma)
141 );
142 
143 DEFINE_EVENT(xe_vma, xe_vma_pf_bind,
144 	     TP_PROTO(struct xe_vma *vma),
145 	     TP_ARGS(vma)
146 );
147 
148 DEFINE_EVENT(xe_vma, xe_vma_unbind,
149 	     TP_PROTO(struct xe_vma *vma),
150 	     TP_ARGS(vma)
151 );
152 
153 DEFINE_EVENT(xe_vma, xe_vma_userptr_rebind_worker,
154 	     TP_PROTO(struct xe_vma *vma),
155 	     TP_ARGS(vma)
156 );
157 
158 DEFINE_EVENT(xe_vma, xe_vma_userptr_rebind_exec,
159 	     TP_PROTO(struct xe_vma *vma),
160 	     TP_ARGS(vma)
161 );
162 
163 DEFINE_EVENT(xe_vma, xe_vma_rebind_worker,
164 	     TP_PROTO(struct xe_vma *vma),
165 	     TP_ARGS(vma)
166 );
167 
168 DEFINE_EVENT(xe_vma, xe_vma_rebind_exec,
169 	     TP_PROTO(struct xe_vma *vma),
170 	     TP_ARGS(vma)
171 );
172 
173 DEFINE_EVENT(xe_vma, xe_vma_userptr_invalidate,
174 	     TP_PROTO(struct xe_vma *vma),
175 	     TP_ARGS(vma)
176 );
177 
178 DEFINE_EVENT(xe_vma, xe_vma_invalidate,
179 	     TP_PROTO(struct xe_vma *vma),
180 	     TP_ARGS(vma)
181 );
182 
183 DEFINE_EVENT(xe_vma, xe_vma_evict,
184 	     TP_PROTO(struct xe_vma *vma),
185 	     TP_ARGS(vma)
186 );
187 
188 DEFINE_EVENT(xe_vma, xe_vma_userptr_invalidate_complete,
189 	     TP_PROTO(struct xe_vma *vma),
190 	     TP_ARGS(vma)
191 );
192 
193 DECLARE_EVENT_CLASS(xe_vm,
194 		    TP_PROTO(struct xe_vm *vm),
195 		    TP_ARGS(vm),
196 
197 		    TP_STRUCT__entry(
198 			     __string(dev, __dev_name_vm(vm))
199 			     __field(struct xe_vm *, vm)
200 			     __field(u32, asid)
201 			     __field(u32, flags)
202 			     __field(u8, mode)
203 			     ),
204 
205 		    TP_fast_assign(
206 			   __assign_str(dev);
207 			   __entry->vm = vm;
208 			   __entry->asid = vm->usm.asid;
209 			   __entry->flags = vm->flags;
210 			   __entry->mode = xe_vm_in_fault_mode(vm) ?
211 					   XE_VM_TRACE_MODE_FAULT :
212 					   xe_vm_in_preempt_fence_mode(vm) ?
213 					   XE_VM_TRACE_MODE_PREEMPT_FENCE :
214 					   XE_VM_TRACE_MODE_DMA_FENCE;
215 			   ),
216 
217 		    TP_printk("dev=%s, vm=%p, asid=0x%05x, vm flags=0x%05x, mode=%s",
218 			      __get_str(dev), __entry->vm, __entry->asid,
219 			      __entry->flags,
220 			      __print_symbolic(__entry->mode,
221 					       { XE_VM_TRACE_MODE_DMA_FENCE, "dma-fence" },
222 					       { XE_VM_TRACE_MODE_PREEMPT_FENCE, "preempt-fence" },
223 					       { XE_VM_TRACE_MODE_FAULT, "fault" }))
224 );
225 
226 DEFINE_EVENT(xe_vm, xe_vm_kill,
227 	     TP_PROTO(struct xe_vm *vm),
228 	     TP_ARGS(vm)
229 );
230 
231 DEFINE_EVENT(xe_vm, xe_vm_create,
232 	     TP_PROTO(struct xe_vm *vm),
233 	     TP_ARGS(vm)
234 );
235 
236 DEFINE_EVENT(xe_vm, xe_vm_free,
237 	     TP_PROTO(struct xe_vm *vm),
238 	     TP_ARGS(vm)
239 );
240 
241 DEFINE_EVENT(xe_vm, xe_vm_close_and_put,
242 	     TP_PROTO(struct xe_vm *vm),
243 	     TP_ARGS(vm)
244 );
245 
246 DEFINE_EVENT(xe_vm, xe_vm_asid_release,
247 	     TP_PROTO(struct xe_vm *vm),
248 	     TP_ARGS(vm)
249 );
250 
251 DEFINE_EVENT(xe_vm, xe_vm_cpu_bind,
252 	     TP_PROTO(struct xe_vm *vm),
253 	     TP_ARGS(vm)
254 );
255 
256 DEFINE_EVENT(xe_vm, xe_vm_restart,
257 	     TP_PROTO(struct xe_vm *vm),
258 	     TP_ARGS(vm)
259 );
260 
261 DEFINE_EVENT(xe_vm, xe_vm_rebind_worker_enter,
262 	     TP_PROTO(struct xe_vm *vm),
263 	     TP_ARGS(vm)
264 );
265 
266 DEFINE_EVENT(xe_vm, xe_vm_rebind_worker_retry,
267 	     TP_PROTO(struct xe_vm *vm),
268 	     TP_ARGS(vm)
269 );
270 
271 DEFINE_EVENT(xe_vm, xe_vm_rebind_worker_exit,
272 	     TP_PROTO(struct xe_vm *vm),
273 	     TP_ARGS(vm)
274 );
275 
276 DEFINE_EVENT(xe_vm, xe_vm_ops_fail,
277 	     TP_PROTO(struct xe_vm *vm),
278 	     TP_ARGS(vm)
279 );
280 
281 TRACE_EVENT(xe_pagefault_fail,
282 	    TP_PROTO(struct xe_device *xe, struct xe_vm *vm, struct xe_vma *vma,
283 		     u32 asid, u64 page_addr, u8 reason, int err),
284 	    TP_ARGS(xe, vm, vma, asid, page_addr, reason, err),
285 
286 	    TP_STRUCT__entry(__string(dev, __dev_name_xe(xe))
287 		     __field(struct xe_vm *, vm)
288 		     __field(struct xe_vma *, vma)
289 		     __field(u32, asid)
290 		     __field(u64, page_addr)
291 		     __field(u8, reason)
292 		     __field(int, err)
293 		     ),
294 
295 	    TP_fast_assign(__assign_str(dev);
296 		   __entry->vm = vm;
297 		   __entry->vma = vma;
298 		   __entry->asid = asid;
299 		   __entry->page_addr = page_addr;
300 		   __entry->reason = reason;
301 		   __entry->err = err;
302 		   ),
303 
304 	    TP_printk("dev=%s, vm=%p, vma=%p, asid=0x%05x, page_addr=0x%012llx, reason=%u, err=%d",
305 		      __get_str(dev), __entry->vm, __entry->vma,
306 		      __entry->asid, __entry->page_addr, __entry->reason,
307 		      __entry->err)
308 );
309 
310 #endif
311 
312 /* This part must be outside protection */
313 #undef TRACE_INCLUDE_PATH
314 #undef TRACE_INCLUDE_FILE
315 #define TRACE_INCLUDE_PATH ../../drivers/gpu/drm/xe
316 #define TRACE_INCLUDE_FILE xe_trace_bo
317 #include <trace/define_trace.h>
318