Commit | Line | Data |
---|---|---|
b2441318 | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
4bb71337 JN |
2 | |
3 | #undef TRACE_SYSTEM | |
4 | #define TRACE_SYSTEM i915 | |
5 | ||
1c5d22f7 CW |
6 | #if !defined(_I915_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ) |
7 | #define _I915_TRACE_H_ | |
8 | ||
9 | #include <linux/stringify.h> | |
10 | #include <linux/types.h> | |
11 | #include <linux/tracepoint.h> | |
12 | ||
fcd70cd3 DV |
13 | #include <drm/drm_drv.h> |
14 | ||
112ed2d3 CW |
15 | #include "gt/intel_engine.h" |
16 | ||
05394f39 | 17 | #include "i915_drv.h" |
1c5d22f7 | 18 | |
1c5d22f7 CW |
19 | /* object tracking */ |
20 | ||
21 | TRACE_EVENT(i915_gem_object_create, | |
05394f39 | 22 | TP_PROTO(struct drm_i915_gem_object *obj), |
1c5d22f7 CW |
23 | TP_ARGS(obj), |
24 | ||
25 | TP_STRUCT__entry( | |
05394f39 | 26 | __field(struct drm_i915_gem_object *, obj) |
6c1fa341 | 27 | __field(u64, size) |
1c5d22f7 CW |
28 | ), |
29 | ||
30 | TP_fast_assign( | |
31 | __entry->obj = obj; | |
05394f39 | 32 | __entry->size = obj->base.size; |
1c5d22f7 CW |
33 | ), |
34 | ||
6c1fa341 | 35 | TP_printk("obj=%p, size=0x%llx", __entry->obj, __entry->size) |
1c5d22f7 CW |
36 | ); |
37 | ||
3abafa53 CW |
38 | TRACE_EVENT(i915_gem_shrink, |
39 | TP_PROTO(struct drm_i915_private *i915, unsigned long target, unsigned flags), | |
40 | TP_ARGS(i915, target, flags), | |
41 | ||
42 | TP_STRUCT__entry( | |
43 | __field(int, dev) | |
44 | __field(unsigned long, target) | |
45 | __field(unsigned, flags) | |
46 | ), | |
47 | ||
48 | TP_fast_assign( | |
91c8a326 | 49 | __entry->dev = i915->drm.primary->index; |
3abafa53 CW |
50 | __entry->target = target; |
51 | __entry->flags = flags; | |
52 | ), | |
53 | ||
54 | TP_printk("dev=%d, target=%lu, flags=%x", | |
55 | __entry->dev, __entry->target, __entry->flags) | |
56 | ); | |
57 | ||
07fe0b12 | 58 | TRACE_EVENT(i915_vma_bind, |
1ec9e26d DV |
59 | TP_PROTO(struct i915_vma *vma, unsigned flags), |
60 | TP_ARGS(vma, flags), | |
1c5d22f7 CW |
61 | |
62 | TP_STRUCT__entry( | |
05394f39 | 63 | __field(struct drm_i915_gem_object *, obj) |
07fe0b12 | 64 | __field(struct i915_address_space *, vm) |
33938714 | 65 | __field(u64, offset) |
6c1fa341 | 66 | __field(u64, size) |
1ec9e26d | 67 | __field(unsigned, flags) |
1c5d22f7 CW |
68 | ), |
69 | ||
70 | TP_fast_assign( | |
07fe0b12 BW |
71 | __entry->obj = vma->obj; |
72 | __entry->vm = vma->vm; | |
73 | __entry->offset = vma->node.start; | |
74 | __entry->size = vma->node.size; | |
1ec9e26d | 75 | __entry->flags = flags; |
1c5d22f7 CW |
76 | ), |
77 | ||
6c1fa341 | 78 | TP_printk("obj=%p, offset=0x%016llx size=0x%llx%s vm=%p", |
db53a302 | 79 | __entry->obj, __entry->offset, __entry->size, |
1ec9e26d | 80 | __entry->flags & PIN_MAPPABLE ? ", mappable" : "", |
07fe0b12 | 81 | __entry->vm) |
1c5d22f7 CW |
82 | ); |
83 | ||
07fe0b12 BW |
84 | TRACE_EVENT(i915_vma_unbind, |
85 | TP_PROTO(struct i915_vma *vma), | |
86 | TP_ARGS(vma), | |
db53a302 CW |
87 | |
88 | TP_STRUCT__entry( | |
89 | __field(struct drm_i915_gem_object *, obj) | |
07fe0b12 | 90 | __field(struct i915_address_space *, vm) |
33938714 | 91 | __field(u64, offset) |
6c1fa341 | 92 | __field(u64, size) |
db53a302 | 93 | ), |
1c5d22f7 | 94 | |
db53a302 | 95 | TP_fast_assign( |
07fe0b12 BW |
96 | __entry->obj = vma->obj; |
97 | __entry->vm = vma->vm; | |
98 | __entry->offset = vma->node.start; | |
99 | __entry->size = vma->node.size; | |
db53a302 | 100 | ), |
1c5d22f7 | 101 | |
6c1fa341 | 102 | TP_printk("obj=%p, offset=0x%016llx size=0x%llx vm=%p", |
07fe0b12 | 103 | __entry->obj, __entry->offset, __entry->size, __entry->vm) |
db53a302 CW |
104 | ); |
105 | ||
db53a302 | 106 | TRACE_EVENT(i915_gem_object_pwrite, |
6c1fa341 | 107 | TP_PROTO(struct drm_i915_gem_object *obj, u64 offset, u64 len), |
db53a302 | 108 | TP_ARGS(obj, offset, len), |
1c5d22f7 | 109 | |
db53a302 CW |
110 | TP_STRUCT__entry( |
111 | __field(struct drm_i915_gem_object *, obj) | |
6c1fa341 CW |
112 | __field(u64, offset) |
113 | __field(u64, len) | |
db53a302 | 114 | ), |
1c5d22f7 | 115 | |
db53a302 CW |
116 | TP_fast_assign( |
117 | __entry->obj = obj; | |
118 | __entry->offset = offset; | |
119 | __entry->len = len; | |
120 | ), | |
121 | ||
6c1fa341 | 122 | TP_printk("obj=%p, offset=0x%llx, len=0x%llx", |
db53a302 CW |
123 | __entry->obj, __entry->offset, __entry->len) |
124 | ); | |
125 | ||
126 | TRACE_EVENT(i915_gem_object_pread, | |
6c1fa341 | 127 | TP_PROTO(struct drm_i915_gem_object *obj, u64 offset, u64 len), |
db53a302 | 128 | TP_ARGS(obj, offset, len), |
1c5d22f7 CW |
129 | |
130 | TP_STRUCT__entry( | |
05394f39 | 131 | __field(struct drm_i915_gem_object *, obj) |
6c1fa341 CW |
132 | __field(u64, offset) |
133 | __field(u64, len) | |
1c5d22f7 CW |
134 | ), |
135 | ||
136 | TP_fast_assign( | |
137 | __entry->obj = obj; | |
db53a302 CW |
138 | __entry->offset = offset; |
139 | __entry->len = len; | |
1c5d22f7 CW |
140 | ), |
141 | ||
6c1fa341 | 142 | TP_printk("obj=%p, offset=0x%llx, len=0x%llx", |
db53a302 | 143 | __entry->obj, __entry->offset, __entry->len) |
1c5d22f7 CW |
144 | ); |
145 | ||
db53a302 | 146 | TRACE_EVENT(i915_gem_object_fault, |
6c1fa341 | 147 | TP_PROTO(struct drm_i915_gem_object *obj, u64 index, bool gtt, bool write), |
db53a302 CW |
148 | TP_ARGS(obj, index, gtt, write), |
149 | ||
150 | TP_STRUCT__entry( | |
151 | __field(struct drm_i915_gem_object *, obj) | |
6c1fa341 | 152 | __field(u64, index) |
db53a302 CW |
153 | __field(bool, gtt) |
154 | __field(bool, write) | |
155 | ), | |
156 | ||
157 | TP_fast_assign( | |
158 | __entry->obj = obj; | |
159 | __entry->index = index; | |
160 | __entry->gtt = gtt; | |
161 | __entry->write = write; | |
162 | ), | |
f41275e8 | 163 | |
6c1fa341 | 164 | TP_printk("obj=%p, %s index=%llu %s", |
db53a302 CW |
165 | __entry->obj, |
166 | __entry->gtt ? "GTT" : "CPU", | |
167 | __entry->index, | |
168 | __entry->write ? ", writable" : "") | |
169 | ); | |
170 | ||
171 | DECLARE_EVENT_CLASS(i915_gem_object, | |
05394f39 | 172 | TP_PROTO(struct drm_i915_gem_object *obj), |
db53a302 | 173 | TP_ARGS(obj), |
f41275e8 | 174 | |
db53a302 CW |
175 | TP_STRUCT__entry( |
176 | __field(struct drm_i915_gem_object *, obj) | |
177 | ), | |
178 | ||
179 | TP_fast_assign( | |
180 | __entry->obj = obj; | |
181 | ), | |
182 | ||
183 | TP_printk("obj=%p", __entry->obj) | |
f41275e8 LZ |
184 | ); |
185 | ||
db53a302 CW |
186 | DEFINE_EVENT(i915_gem_object, i915_gem_object_clflush, |
187 | TP_PROTO(struct drm_i915_gem_object *obj), | |
188 | TP_ARGS(obj) | |
189 | ); | |
1c5d22f7 | 190 | |
db53a302 | 191 | DEFINE_EVENT(i915_gem_object, i915_gem_object_destroy, |
05394f39 | 192 | TP_PROTO(struct drm_i915_gem_object *obj), |
903cf20c LZ |
193 | TP_ARGS(obj) |
194 | ); | |
1c5d22f7 | 195 | |
db53a302 | 196 | TRACE_EVENT(i915_gem_evict, |
6c1fa341 | 197 | TP_PROTO(struct i915_address_space *vm, u64 size, u64 align, unsigned int flags), |
e522ac23 | 198 | TP_ARGS(vm, size, align, flags), |
1c5d22f7 | 199 | |
db53a302 CW |
200 | TP_STRUCT__entry( |
201 | __field(u32, dev) | |
e522ac23 | 202 | __field(struct i915_address_space *, vm) |
6c1fa341 CW |
203 | __field(u64, size) |
204 | __field(u64, align) | |
e522ac23 | 205 | __field(unsigned int, flags) |
db53a302 | 206 | ), |
1c5d22f7 | 207 | |
db53a302 | 208 | TP_fast_assign( |
c6385c94 | 209 | __entry->dev = vm->i915->drm.primary->index; |
e522ac23 | 210 | __entry->vm = vm; |
db53a302 CW |
211 | __entry->size = size; |
212 | __entry->align = align; | |
1ec9e26d | 213 | __entry->flags = flags; |
db53a302 CW |
214 | ), |
215 | ||
6c1fa341 | 216 | TP_printk("dev=%d, vm=%p, size=0x%llx, align=0x%llx %s", |
e522ac23 | 217 | __entry->dev, __entry->vm, __entry->size, __entry->align, |
1ec9e26d | 218 | __entry->flags & PIN_MAPPABLE ? ", mappable" : "") |
1c5d22f7 CW |
219 | ); |
220 | ||
625d988a CW |
221 | TRACE_EVENT(i915_gem_evict_node, |
222 | TP_PROTO(struct i915_address_space *vm, struct drm_mm_node *node, unsigned int flags), | |
223 | TP_ARGS(vm, node, flags), | |
172ae5b4 CW |
224 | |
225 | TP_STRUCT__entry( | |
226 | __field(u32, dev) | |
227 | __field(struct i915_address_space *, vm) | |
228 | __field(u64, start) | |
229 | __field(u64, size) | |
230 | __field(unsigned long, color) | |
231 | __field(unsigned int, flags) | |
232 | ), | |
233 | ||
234 | TP_fast_assign( | |
625d988a CW |
235 | __entry->dev = vm->i915->drm.primary->index; |
236 | __entry->vm = vm; | |
237 | __entry->start = node->start; | |
238 | __entry->size = node->size; | |
239 | __entry->color = node->color; | |
172ae5b4 CW |
240 | __entry->flags = flags; |
241 | ), | |
242 | ||
6c1fa341 | 243 | TP_printk("dev=%d, vm=%p, start=0x%llx size=0x%llx, color=0x%lx, flags=%x", |
172ae5b4 CW |
244 | __entry->dev, __entry->vm, |
245 | __entry->start, __entry->size, | |
246 | __entry->color, __entry->flags) | |
247 | ); | |
248 | ||
65921223 CW |
249 | TRACE_EVENT(i915_gem_evict_vm, |
250 | TP_PROTO(struct i915_address_space *vm), | |
251 | TP_ARGS(vm), | |
252 | ||
253 | TP_STRUCT__entry( | |
254 | __field(u32, dev) | |
255 | __field(struct i915_address_space *, vm) | |
256 | ), | |
257 | ||
258 | TP_fast_assign( | |
259 | __entry->dev = vm->i915->drm.primary->index; | |
260 | __entry->vm = vm; | |
261 | ), | |
262 | ||
263 | TP_printk("dev=%d, vm=%p", __entry->dev, __entry->vm) | |
264 | ); | |
265 | ||
e61e0f51 CW |
266 | TRACE_EVENT(i915_request_queue, |
267 | TP_PROTO(struct i915_request *rq, u32 flags), | |
268 | TP_ARGS(rq, flags), | |
1c5d22f7 CW |
269 | |
270 | TP_STRUCT__entry( | |
4f49be54 | 271 | __field(u32, dev) |
57d7116c | 272 | __field(u64, ctx) |
2956e970 TU |
273 | __field(u16, class) |
274 | __field(u16, instance) | |
1c5d22f7 | 275 | __field(u32, seqno) |
d7d4eedd | 276 | __field(u32, flags) |
1c5d22f7 CW |
277 | ), |
278 | ||
279 | TP_fast_assign( | |
d3f23ab9 | 280 | __entry->dev = rq->i915->drm.primary->index; |
2956e970 | 281 | __entry->class = rq->engine->uabi_class; |
750e76b4 | 282 | __entry->instance = rq->engine->uabi_instance; |
e61e0f51 CW |
283 | __entry->ctx = rq->fence.context; |
284 | __entry->seqno = rq->fence.seqno; | |
d7d4eedd | 285 | __entry->flags = flags; |
1c5d22f7 CW |
286 | ), |
287 | ||
2935ed53 | 288 | TP_printk("dev=%u, engine=%u:%u, ctx=%llu, seqno=%u, flags=0x%x", |
f24e74a7 | 289 | __entry->dev, __entry->class, __entry->instance, |
2935ed53 | 290 | __entry->ctx, __entry->seqno, __entry->flags) |
1c5d22f7 CW |
291 | ); |
292 | ||
e61e0f51 CW |
293 | DECLARE_EVENT_CLASS(i915_request, |
294 | TP_PROTO(struct i915_request *rq), | |
295 | TP_ARGS(rq), | |
1c5d22f7 CW |
296 | |
297 | TP_STRUCT__entry( | |
4f49be54 | 298 | __field(u32, dev) |
57d7116c | 299 | __field(u64, ctx) |
2956e970 TU |
300 | __field(u16, class) |
301 | __field(u16, instance) | |
1c5d22f7 | 302 | __field(u32, seqno) |
dbf9da8d | 303 | __field(u32, tail) |
1c5d22f7 CW |
304 | ), |
305 | ||
306 | TP_fast_assign( | |
d3f23ab9 | 307 | __entry->dev = rq->i915->drm.primary->index; |
2956e970 | 308 | __entry->class = rq->engine->uabi_class; |
750e76b4 | 309 | __entry->instance = rq->engine->uabi_instance; |
e61e0f51 CW |
310 | __entry->ctx = rq->fence.context; |
311 | __entry->seqno = rq->fence.seqno; | |
dbf9da8d | 312 | __entry->tail = rq->tail; |
1c5d22f7 CW |
313 | ), |
314 | ||
9a4aa3a2 | 315 | TP_printk("dev=%u, engine=%u:%u, ctx=%llu, seqno=%u, tail=%u", |
f24e74a7 | 316 | __entry->dev, __entry->class, __entry->instance, |
9a4aa3a2 | 317 | __entry->ctx, __entry->seqno, __entry->tail) |
1c5d22f7 CW |
318 | ); |
319 | ||
e61e0f51 | 320 | DEFINE_EVENT(i915_request, i915_request_add, |
dbf9da8d MB |
321 | TP_PROTO(struct i915_request *rq), |
322 | TP_ARGS(rq) | |
db53a302 | 323 | ); |
1c5d22f7 | 324 | |
354d036f | 325 | #if defined(CONFIG_DRM_I915_LOW_LEVEL_TRACEPOINTS) |
dbf9da8d MB |
326 | DEFINE_EVENT(i915_request, i915_request_guc_submit, |
327 | TP_PROTO(struct i915_request *rq), | |
328 | TP_ARGS(rq) | |
329 | ); | |
330 | ||
e61e0f51 CW |
331 | DEFINE_EVENT(i915_request, i915_request_submit, |
332 | TP_PROTO(struct i915_request *rq), | |
333 | TP_ARGS(rq) | |
354d036f TU |
334 | ); |
335 | ||
e61e0f51 CW |
336 | DEFINE_EVENT(i915_request, i915_request_execute, |
337 | TP_PROTO(struct i915_request *rq), | |
338 | TP_ARGS(rq) | |
354d036f | 339 | ); |
d7d96833 | 340 | |
f2742e47 TU |
341 | TRACE_EVENT(i915_request_in, |
342 | TP_PROTO(struct i915_request *rq, unsigned int port), | |
343 | TP_ARGS(rq, port), | |
344 | ||
345 | TP_STRUCT__entry( | |
346 | __field(u32, dev) | |
57d7116c | 347 | __field(u64, ctx) |
2956e970 TU |
348 | __field(u16, class) |
349 | __field(u16, instance) | |
f2742e47 | 350 | __field(u32, seqno) |
f2742e47 | 351 | __field(u32, port) |
0543fbf4 | 352 | __field(s32, prio) |
f2742e47 | 353 | ), |
d7d96833 | 354 | |
f2742e47 | 355 | TP_fast_assign( |
d3f23ab9 | 356 | __entry->dev = rq->i915->drm.primary->index; |
2956e970 | 357 | __entry->class = rq->engine->uabi_class; |
750e76b4 | 358 | __entry->instance = rq->engine->uabi_instance; |
f2742e47 TU |
359 | __entry->ctx = rq->fence.context; |
360 | __entry->seqno = rq->fence.seqno; | |
f2742e47 TU |
361 | __entry->prio = rq->sched.attr.priority; |
362 | __entry->port = port; | |
363 | ), | |
364 | ||
0543fbf4 | 365 | TP_printk("dev=%u, engine=%u:%u, ctx=%llu, seqno=%u, prio=%d, port=%u", |
f24e74a7 | 366 | __entry->dev, __entry->class, __entry->instance, |
2935ed53 | 367 | __entry->ctx, __entry->seqno, |
b300fde8 | 368 | __entry->prio, __entry->port) |
d7d96833 TU |
369 | ); |
370 | ||
f2742e47 TU |
371 | TRACE_EVENT(i915_request_out, |
372 | TP_PROTO(struct i915_request *rq), | |
373 | TP_ARGS(rq), | |
374 | ||
375 | TP_STRUCT__entry( | |
376 | __field(u32, dev) | |
57d7116c | 377 | __field(u64, ctx) |
2956e970 TU |
378 | __field(u16, class) |
379 | __field(u16, instance) | |
f2742e47 | 380 | __field(u32, seqno) |
f2742e47 TU |
381 | __field(u32, completed) |
382 | ), | |
383 | ||
384 | TP_fast_assign( | |
d3f23ab9 | 385 | __entry->dev = rq->i915->drm.primary->index; |
2956e970 | 386 | __entry->class = rq->engine->uabi_class; |
750e76b4 | 387 | __entry->instance = rq->engine->uabi_instance; |
f2742e47 TU |
388 | __entry->ctx = rq->fence.context; |
389 | __entry->seqno = rq->fence.seqno; | |
f2742e47 TU |
390 | __entry->completed = i915_request_completed(rq); |
391 | ), | |
392 | ||
2935ed53 | 393 | TP_printk("dev=%u, engine=%u:%u, ctx=%llu, seqno=%u, completed?=%u", |
f24e74a7 | 394 | __entry->dev, __entry->class, __entry->instance, |
2935ed53 | 395 | __entry->ctx, __entry->seqno, __entry->completed) |
d7d96833 | 396 | ); |
f2742e47 | 397 | |
e03b5906 MB |
398 | DECLARE_EVENT_CLASS(intel_context, |
399 | TP_PROTO(struct intel_context *ce), | |
400 | TP_ARGS(ce), | |
401 | ||
402 | TP_STRUCT__entry( | |
403 | __field(u32, guc_id) | |
404 | __field(int, pin_count) | |
405 | __field(u32, sched_state) | |
ee242ca7 | 406 | __field(u8, guc_prio) |
e03b5906 MB |
407 | ), |
408 | ||
409 | TP_fast_assign( | |
3cb3e343 | 410 | __entry->guc_id = ce->guc_id.id; |
e03b5906 MB |
411 | __entry->pin_count = atomic_read(&ce->pin_count); |
412 | __entry->sched_state = ce->guc_state.sched_state; | |
af5bc9f2 | 413 | __entry->guc_prio = ce->guc_state.prio; |
e03b5906 MB |
414 | ), |
415 | ||
0f797650 | 416 | TP_printk("guc_id=%d, pin_count=%d sched_state=0x%x, guc_prio=%u", |
e03b5906 MB |
417 | __entry->guc_id, __entry->pin_count, |
418 | __entry->sched_state, | |
ee242ca7 MB |
419 | __entry->guc_prio) |
420 | ); | |
421 | ||
422 | DEFINE_EVENT(intel_context, intel_context_set_prio, | |
423 | TP_PROTO(struct intel_context *ce), | |
424 | TP_ARGS(ce) | |
e03b5906 MB |
425 | ); |
426 | ||
1e0fd2b5 MB |
427 | DEFINE_EVENT(intel_context, intel_context_reset, |
428 | TP_PROTO(struct intel_context *ce), | |
429 | TP_ARGS(ce) | |
430 | ); | |
431 | ||
ae8ac10d MB |
432 | DEFINE_EVENT(intel_context, intel_context_ban, |
433 | TP_PROTO(struct intel_context *ce), | |
434 | TP_ARGS(ce) | |
435 | ); | |
436 | ||
e03b5906 MB |
437 | DEFINE_EVENT(intel_context, intel_context_register, |
438 | TP_PROTO(struct intel_context *ce), | |
439 | TP_ARGS(ce) | |
440 | ); | |
441 | ||
442 | DEFINE_EVENT(intel_context, intel_context_deregister, | |
443 | TP_PROTO(struct intel_context *ce), | |
444 | TP_ARGS(ce) | |
445 | ); | |
446 | ||
447 | DEFINE_EVENT(intel_context, intel_context_deregister_done, | |
448 | TP_PROTO(struct intel_context *ce), | |
449 | TP_ARGS(ce) | |
450 | ); | |
451 | ||
452 | DEFINE_EVENT(intel_context, intel_context_sched_enable, | |
453 | TP_PROTO(struct intel_context *ce), | |
454 | TP_ARGS(ce) | |
455 | ); | |
456 | ||
457 | DEFINE_EVENT(intel_context, intel_context_sched_disable, | |
458 | TP_PROTO(struct intel_context *ce), | |
459 | TP_ARGS(ce) | |
460 | ); | |
461 | ||
462 | DEFINE_EVENT(intel_context, intel_context_sched_done, | |
463 | TP_PROTO(struct intel_context *ce), | |
464 | TP_ARGS(ce) | |
465 | ); | |
466 | ||
467 | DEFINE_EVENT(intel_context, intel_context_create, | |
468 | TP_PROTO(struct intel_context *ce), | |
469 | TP_ARGS(ce) | |
470 | ); | |
471 | ||
472 | DEFINE_EVENT(intel_context, intel_context_fence_release, | |
473 | TP_PROTO(struct intel_context *ce), | |
474 | TP_ARGS(ce) | |
475 | ); | |
476 | ||
477 | DEFINE_EVENT(intel_context, intel_context_free, | |
478 | TP_PROTO(struct intel_context *ce), | |
479 | TP_ARGS(ce) | |
480 | ); | |
481 | ||
482 | DEFINE_EVENT(intel_context, intel_context_steal_guc_id, | |
483 | TP_PROTO(struct intel_context *ce), | |
484 | TP_ARGS(ce) | |
485 | ); | |
486 | ||
487 | DEFINE_EVENT(intel_context, intel_context_do_pin, | |
488 | TP_PROTO(struct intel_context *ce), | |
489 | TP_ARGS(ce) | |
490 | ); | |
491 | ||
492 | DEFINE_EVENT(intel_context, intel_context_do_unpin, | |
493 | TP_PROTO(struct intel_context *ce), | |
494 | TP_ARGS(ce) | |
495 | ); | |
496 | ||
354d036f TU |
497 | #else |
498 | #if !defined(TRACE_HEADER_MULTI_READ) | |
dbf9da8d MB |
499 | static inline void |
500 | trace_i915_request_guc_submit(struct i915_request *rq) | |
501 | { | |
502 | } | |
503 | ||
354d036f | 504 | static inline void |
e61e0f51 | 505 | trace_i915_request_submit(struct i915_request *rq) |
354d036f TU |
506 | { |
507 | } | |
508 | ||
509 | static inline void | |
e61e0f51 | 510 | trace_i915_request_execute(struct i915_request *rq) |
354d036f TU |
511 | { |
512 | } | |
d7d96833 TU |
513 | |
514 | static inline void | |
e61e0f51 | 515 | trace_i915_request_in(struct i915_request *rq, unsigned int port) |
d7d96833 TU |
516 | { |
517 | } | |
518 | ||
519 | static inline void | |
e61e0f51 | 520 | trace_i915_request_out(struct i915_request *rq) |
d7d96833 TU |
521 | { |
522 | } | |
e03b5906 | 523 | |
ee242ca7 MB |
524 | static inline void |
525 | trace_intel_context_set_prio(struct intel_context *ce) | |
526 | { | |
527 | } | |
528 | ||
1e0fd2b5 MB |
529 | static inline void |
530 | trace_intel_context_reset(struct intel_context *ce) | |
531 | { | |
532 | } | |
533 | ||
ae8ac10d MB |
534 | static inline void |
535 | trace_intel_context_ban(struct intel_context *ce) | |
536 | { | |
537 | } | |
538 | ||
e03b5906 MB |
539 | static inline void |
540 | trace_intel_context_register(struct intel_context *ce) | |
541 | { | |
542 | } | |
543 | ||
544 | static inline void | |
545 | trace_intel_context_deregister(struct intel_context *ce) | |
546 | { | |
547 | } | |
548 | ||
549 | static inline void | |
550 | trace_intel_context_deregister_done(struct intel_context *ce) | |
551 | { | |
552 | } | |
553 | ||
554 | static inline void | |
555 | trace_intel_context_sched_enable(struct intel_context *ce) | |
556 | { | |
557 | } | |
558 | ||
559 | static inline void | |
560 | trace_intel_context_sched_disable(struct intel_context *ce) | |
561 | { | |
562 | } | |
563 | ||
564 | static inline void | |
565 | trace_intel_context_sched_done(struct intel_context *ce) | |
566 | { | |
567 | } | |
568 | ||
569 | static inline void | |
570 | trace_intel_context_create(struct intel_context *ce) | |
571 | { | |
572 | } | |
573 | ||
574 | static inline void | |
575 | trace_intel_context_fence_release(struct intel_context *ce) | |
576 | { | |
577 | } | |
578 | ||
579 | static inline void | |
580 | trace_intel_context_free(struct intel_context *ce) | |
581 | { | |
582 | } | |
583 | ||
584 | static inline void | |
585 | trace_intel_context_steal_guc_id(struct intel_context *ce) | |
586 | { | |
587 | } | |
588 | ||
589 | static inline void | |
590 | trace_intel_context_do_pin(struct intel_context *ce) | |
591 | { | |
592 | } | |
593 | ||
594 | static inline void | |
595 | trace_intel_context_do_unpin(struct intel_context *ce) | |
596 | { | |
597 | } | |
354d036f TU |
598 | #endif |
599 | #endif | |
600 | ||
e61e0f51 CW |
601 | DEFINE_EVENT(i915_request, i915_request_retire, |
602 | TP_PROTO(struct i915_request *rq), | |
603 | TP_ARGS(rq) | |
1c5d22f7 CW |
604 | ); |
605 | ||
e61e0f51 CW |
606 | TRACE_EVENT(i915_request_wait_begin, |
607 | TP_PROTO(struct i915_request *rq, unsigned int flags), | |
608 | TP_ARGS(rq, flags), | |
f3fd3768 BW |
609 | |
610 | TP_STRUCT__entry( | |
611 | __field(u32, dev) | |
57d7116c | 612 | __field(u64, ctx) |
2956e970 TU |
613 | __field(u16, class) |
614 | __field(u16, instance) | |
f3fd3768 | 615 | __field(u32, seqno) |
93692502 | 616 | __field(unsigned int, flags) |
f3fd3768 BW |
617 | ), |
618 | ||
619 | /* NB: the blocking information is racy since mutex_is_locked | |
620 | * doesn't check that the current thread holds the lock. The only | |
621 | * other option would be to pass the boolean information of whether | |
622 | * or not the class was blocking down through the stack which is | |
623 | * less desirable. | |
624 | */ | |
625 | TP_fast_assign( | |
d3f23ab9 | 626 | __entry->dev = rq->i915->drm.primary->index; |
2956e970 | 627 | __entry->class = rq->engine->uabi_class; |
750e76b4 | 628 | __entry->instance = rq->engine->uabi_instance; |
e61e0f51 CW |
629 | __entry->ctx = rq->fence.context; |
630 | __entry->seqno = rq->fence.seqno; | |
93692502 | 631 | __entry->flags = flags; |
f3fd3768 BW |
632 | ), |
633 | ||
2935ed53 | 634 | TP_printk("dev=%u, engine=%u:%u, ctx=%llu, seqno=%u, flags=0x%x", |
f24e74a7 | 635 | __entry->dev, __entry->class, __entry->instance, |
2935ed53 | 636 | __entry->ctx, __entry->seqno, |
2956e970 | 637 | __entry->flags) |
903cf20c | 638 | ); |
1c5d22f7 | 639 | |
e61e0f51 CW |
640 | DEFINE_EVENT(i915_request, i915_request_wait_end, |
641 | TP_PROTO(struct i915_request *rq), | |
642 | TP_ARGS(rq) | |
1c5d22f7 CW |
643 | ); |
644 | ||
ed71f1b4 | 645 | TRACE_EVENT_CONDITION(i915_reg_rw, |
f0f59a00 | 646 | TP_PROTO(bool write, i915_reg_t reg, u64 val, int len, bool trace), |
0206e353 | 647 | |
ed71f1b4 CW |
648 | TP_ARGS(write, reg, val, len, trace), |
649 | ||
650 | TP_CONDITION(trace), | |
0206e353 AJ |
651 | |
652 | TP_STRUCT__entry( | |
653 | __field(u64, val) | |
654 | __field(u32, reg) | |
655 | __field(u16, write) | |
656 | __field(u16, len) | |
657 | ), | |
658 | ||
659 | TP_fast_assign( | |
660 | __entry->val = (u64)val; | |
f0f59a00 | 661 | __entry->reg = i915_mmio_reg_offset(reg); |
0206e353 AJ |
662 | __entry->write = write; |
663 | __entry->len = len; | |
664 | ), | |
665 | ||
666 | TP_printk("%s reg=0x%x, len=%d, val=(0x%x, 0x%x)", | |
667 | __entry->write ? "write" : "read", | |
668 | __entry->reg, __entry->len, | |
669 | (u32)(__entry->val & 0xffffffff), | |
670 | (u32)(__entry->val >> 32)) | |
ba4f01a3 YL |
671 | ); |
672 | ||
198c974d DCS |
673 | /** |
674 | * DOC: i915_ppgtt_create and i915_ppgtt_release tracepoints | |
675 | * | |
676 | * With full ppgtt enabled each process using drm will allocate at least one | |
677 | * translation table. With these traces it is possible to keep track of the | |
678 | * allocation and of the lifetime of the tables; this can be used during | |
679 | * testing/debug to verify that we are not leaking ppgtts. | |
680 | * These traces identify the ppgtt through the vm pointer, which is also printed | |
681 | * by the i915_vma_bind and i915_vma_unbind tracepoints. | |
682 | */ | |
683 | DECLARE_EVENT_CLASS(i915_ppgtt, | |
684 | TP_PROTO(struct i915_address_space *vm), | |
685 | TP_ARGS(vm), | |
686 | ||
687 | TP_STRUCT__entry( | |
688 | __field(struct i915_address_space *, vm) | |
689 | __field(u32, dev) | |
690 | ), | |
691 | ||
692 | TP_fast_assign( | |
693 | __entry->vm = vm; | |
c6385c94 | 694 | __entry->dev = vm->i915->drm.primary->index; |
198c974d DCS |
695 | ), |
696 | ||
697 | TP_printk("dev=%u, vm=%p", __entry->dev, __entry->vm) | |
698 | ) | |
699 | ||
700 | DEFINE_EVENT(i915_ppgtt, i915_ppgtt_create, | |
701 | TP_PROTO(struct i915_address_space *vm), | |
702 | TP_ARGS(vm) | |
703 | ); | |
704 | ||
705 | DEFINE_EVENT(i915_ppgtt, i915_ppgtt_release, | |
706 | TP_PROTO(struct i915_address_space *vm), | |
707 | TP_ARGS(vm) | |
708 | ); | |
709 | ||
710 | /** | |
711 | * DOC: i915_context_create and i915_context_free tracepoints | |
712 | * | |
713 | * These tracepoints are used to track creation and deletion of contexts. | |
714 | * If full ppgtt is enabled, they also print the address of the vm assigned to | |
715 | * the context. | |
716 | */ | |
717 | DECLARE_EVENT_CLASS(i915_context, | |
e2efd130 | 718 | TP_PROTO(struct i915_gem_context *ctx), |
198c974d DCS |
719 | TP_ARGS(ctx), |
720 | ||
721 | TP_STRUCT__entry( | |
722 | __field(u32, dev) | |
e2efd130 | 723 | __field(struct i915_gem_context *, ctx) |
198c974d DCS |
724 | __field(struct i915_address_space *, vm) |
725 | ), | |
726 | ||
727 | TP_fast_assign( | |
99c181a0 | 728 | __entry->dev = ctx->i915->drm.primary->index; |
198c974d | 729 | __entry->ctx = ctx; |
9ec8795e | 730 | __entry->vm = ctx->vm; |
198c974d DCS |
731 | ), |
732 | ||
2935ed53 CW |
733 | TP_printk("dev=%u, ctx=%p, ctx_vm=%p", |
734 | __entry->dev, __entry->ctx, __entry->vm) | |
198c974d DCS |
735 | ) |
736 | ||
737 | DEFINE_EVENT(i915_context, i915_context_create, | |
e2efd130 | 738 | TP_PROTO(struct i915_gem_context *ctx), |
198c974d DCS |
739 | TP_ARGS(ctx) |
740 | ); | |
741 | ||
742 | DEFINE_EVENT(i915_context, i915_context_free, | |
e2efd130 | 743 | TP_PROTO(struct i915_gem_context *ctx), |
198c974d DCS |
744 | TP_ARGS(ctx) |
745 | ); | |
746 | ||
1c5d22f7 CW |
747 | #endif /* _I915_TRACE_H_ */ |
748 | ||
749 | /* This part must be outside protection */ | |
750 | #undef TRACE_INCLUDE_PATH | |
4bb71337 | 751 | #undef TRACE_INCLUDE_FILE |
4e6d7719 | 752 | #define TRACE_INCLUDE_PATH ../../drivers/gpu/drm/i915 |
4bb71337 | 753 | #define TRACE_INCLUDE_FILE i915_trace |
1c5d22f7 | 754 | #include <trace/define_trace.h> |