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