.. | .. |
---|
28 | 28 | #include <linux/types.h> |
---|
29 | 29 | #include <linux/tracepoint.h> |
---|
30 | 30 | |
---|
31 | | -#include <drm/drmP.h> |
---|
32 | | - |
---|
33 | 31 | #undef TRACE_SYSTEM |
---|
34 | 32 | #define TRACE_SYSTEM amdgpu |
---|
35 | 33 | #define TRACE_INCLUDE_FILE amdgpu_trace |
---|
.. | .. |
---|
37 | 35 | #define AMDGPU_JOB_GET_TIMELINE_NAME(job) \ |
---|
38 | 36 | job->base.s_fence->finished.ops->get_timeline_name(&job->base.s_fence->finished) |
---|
39 | 37 | |
---|
40 | | -TRACE_EVENT(amdgpu_mm_rreg, |
---|
| 38 | +TRACE_EVENT(amdgpu_device_rreg, |
---|
41 | 39 | TP_PROTO(unsigned did, uint32_t reg, uint32_t value), |
---|
42 | 40 | TP_ARGS(did, reg, value), |
---|
43 | 41 | TP_STRUCT__entry( |
---|
.. | .. |
---|
56 | 54 | (unsigned long)__entry->value) |
---|
57 | 55 | ); |
---|
58 | 56 | |
---|
59 | | -TRACE_EVENT(amdgpu_mm_wreg, |
---|
| 57 | +TRACE_EVENT(amdgpu_device_wreg, |
---|
60 | 58 | TP_PROTO(unsigned did, uint32_t reg, uint32_t value), |
---|
61 | 59 | TP_ARGS(did, reg, value), |
---|
62 | 60 | TP_STRUCT__entry( |
---|
.. | .. |
---|
76 | 74 | ); |
---|
77 | 75 | |
---|
78 | 76 | TRACE_EVENT(amdgpu_iv, |
---|
79 | | - TP_PROTO(struct amdgpu_iv_entry *iv), |
---|
80 | | - TP_ARGS(iv), |
---|
| 77 | + TP_PROTO(unsigned ih, struct amdgpu_iv_entry *iv), |
---|
| 78 | + TP_ARGS(ih, iv), |
---|
81 | 79 | TP_STRUCT__entry( |
---|
| 80 | + __field(unsigned, ih) |
---|
82 | 81 | __field(unsigned, client_id) |
---|
83 | 82 | __field(unsigned, src_id) |
---|
84 | 83 | __field(unsigned, ring_id) |
---|
.. | .. |
---|
90 | 89 | __array(unsigned, src_data, 4) |
---|
91 | 90 | ), |
---|
92 | 91 | TP_fast_assign( |
---|
| 92 | + __entry->ih = ih; |
---|
93 | 93 | __entry->client_id = iv->client_id; |
---|
94 | 94 | __entry->src_id = iv->src_id; |
---|
95 | 95 | __entry->ring_id = iv->ring_id; |
---|
.. | .. |
---|
103 | 103 | __entry->src_data[2] = iv->src_data[2]; |
---|
104 | 104 | __entry->src_data[3] = iv->src_data[3]; |
---|
105 | 105 | ), |
---|
106 | | - TP_printk("client_id:%u src_id:%u ring:%u vmid:%u timestamp: %llu pasid:%u src_data: %08x %08x %08x %08x\n", |
---|
107 | | - __entry->client_id, __entry->src_id, |
---|
| 106 | + TP_printk("ih:%u client_id:%u src_id:%u ring:%u vmid:%u " |
---|
| 107 | + "timestamp: %llu pasid:%u src_data: %08x %08x %08x %08x", |
---|
| 108 | + __entry->ih, __entry->client_id, __entry->src_id, |
---|
108 | 109 | __entry->ring_id, __entry->vmid, |
---|
109 | 110 | __entry->timestamp, __entry->pasid, |
---|
110 | 111 | __entry->src_data[0], __entry->src_data[1], |
---|
.. | .. |
---|
150 | 151 | |
---|
151 | 152 | TP_fast_assign( |
---|
152 | 153 | __entry->bo_list = p->bo_list; |
---|
153 | | - __entry->ring = p->ring->idx; |
---|
| 154 | + __entry->ring = to_amdgpu_ring(p->entity->rq->sched)->idx; |
---|
154 | 155 | __entry->dw = p->job->ibs[i].length_dw; |
---|
155 | 156 | __entry->fences = amdgpu_fence_count_emitted( |
---|
156 | | - p->ring); |
---|
| 157 | + to_amdgpu_ring(p->entity->rq->sched)); |
---|
157 | 158 | ), |
---|
158 | 159 | TP_printk("bo_list=%p, ring=%u, dw=%u, fences=%u", |
---|
159 | 160 | __entry->bo_list, __entry->ring, __entry->dw, |
---|
.. | .. |
---|
169 | 170 | __field(unsigned int, context) |
---|
170 | 171 | __field(unsigned int, seqno) |
---|
171 | 172 | __field(struct dma_fence *, fence) |
---|
172 | | - __field(char *, ring_name) |
---|
| 173 | + __string(ring, to_amdgpu_ring(job->base.sched)->name) |
---|
173 | 174 | __field(u32, num_ibs) |
---|
174 | 175 | ), |
---|
175 | 176 | |
---|
.. | .. |
---|
178 | 179 | __assign_str(timeline, AMDGPU_JOB_GET_TIMELINE_NAME(job)) |
---|
179 | 180 | __entry->context = job->base.s_fence->finished.context; |
---|
180 | 181 | __entry->seqno = job->base.s_fence->finished.seqno; |
---|
181 | | - __entry->ring_name = to_amdgpu_ring(job->base.sched)->name; |
---|
| 182 | + __assign_str(ring, to_amdgpu_ring(job->base.sched)->name) |
---|
182 | 183 | __entry->num_ibs = job->num_ibs; |
---|
183 | 184 | ), |
---|
184 | 185 | TP_printk("sched_job=%llu, timeline=%s, context=%u, seqno=%u, ring_name=%s, num_ibs=%u", |
---|
185 | 186 | __entry->sched_job_id, __get_str(timeline), __entry->context, |
---|
186 | | - __entry->seqno, __entry->ring_name, __entry->num_ibs) |
---|
| 187 | + __entry->seqno, __get_str(ring), __entry->num_ibs) |
---|
187 | 188 | ); |
---|
188 | 189 | |
---|
189 | 190 | TRACE_EVENT(amdgpu_sched_run_job, |
---|
.. | .. |
---|
194 | 195 | __string(timeline, AMDGPU_JOB_GET_TIMELINE_NAME(job)) |
---|
195 | 196 | __field(unsigned int, context) |
---|
196 | 197 | __field(unsigned int, seqno) |
---|
197 | | - __field(char *, ring_name) |
---|
| 198 | + __string(ring, to_amdgpu_ring(job->base.sched)->name) |
---|
198 | 199 | __field(u32, num_ibs) |
---|
199 | 200 | ), |
---|
200 | 201 | |
---|
.. | .. |
---|
203 | 204 | __assign_str(timeline, AMDGPU_JOB_GET_TIMELINE_NAME(job)) |
---|
204 | 205 | __entry->context = job->base.s_fence->finished.context; |
---|
205 | 206 | __entry->seqno = job->base.s_fence->finished.seqno; |
---|
206 | | - __entry->ring_name = to_amdgpu_ring(job->base.sched)->name; |
---|
| 207 | + __assign_str(ring, to_amdgpu_ring(job->base.sched)->name) |
---|
207 | 208 | __entry->num_ibs = job->num_ibs; |
---|
208 | 209 | ), |
---|
209 | 210 | TP_printk("sched_job=%llu, timeline=%s, context=%u, seqno=%u, ring_name=%s, num_ibs=%u", |
---|
210 | 211 | __entry->sched_job_id, __get_str(timeline), __entry->context, |
---|
211 | | - __entry->seqno, __entry->ring_name, __entry->num_ibs) |
---|
| 212 | + __entry->seqno, __get_str(ring), __entry->num_ibs) |
---|
212 | 213 | ); |
---|
213 | 214 | |
---|
214 | 215 | |
---|
.. | .. |
---|
218 | 219 | TP_ARGS(vm, ring, job), |
---|
219 | 220 | TP_STRUCT__entry( |
---|
220 | 221 | __field(u32, pasid) |
---|
| 222 | + __string(ring, ring->name) |
---|
221 | 223 | __field(u32, ring) |
---|
222 | 224 | __field(u32, vmid) |
---|
223 | 225 | __field(u32, vm_hub) |
---|
.. | .. |
---|
227 | 229 | |
---|
228 | 230 | TP_fast_assign( |
---|
229 | 231 | __entry->pasid = vm->pasid; |
---|
230 | | - __entry->ring = ring->idx; |
---|
| 232 | + __assign_str(ring, ring->name) |
---|
231 | 233 | __entry->vmid = job->vmid; |
---|
232 | 234 | __entry->vm_hub = ring->funcs->vmhub, |
---|
233 | 235 | __entry->pd_addr = job->vm_pd_addr; |
---|
234 | 236 | __entry->needs_flush = job->vm_needs_flush; |
---|
235 | 237 | ), |
---|
236 | | - TP_printk("pasid=%d, ring=%u, id=%u, hub=%u, pd_addr=%010Lx needs_flush=%u", |
---|
237 | | - __entry->pasid, __entry->ring, __entry->vmid, |
---|
| 238 | + TP_printk("pasid=%d, ring=%s, id=%u, hub=%u, pd_addr=%010Lx needs_flush=%u", |
---|
| 239 | + __entry->pasid, __get_str(ring), __entry->vmid, |
---|
238 | 240 | __entry->vm_hub, __entry->pd_addr, __entry->needs_flush) |
---|
239 | 241 | ); |
---|
240 | 242 | |
---|
.. | .. |
---|
319 | 321 | TP_ARGS(mapping) |
---|
320 | 322 | ); |
---|
321 | 323 | |
---|
| 324 | +TRACE_EVENT(amdgpu_vm_update_ptes, |
---|
| 325 | + TP_PROTO(struct amdgpu_vm_update_params *p, |
---|
| 326 | + uint64_t start, uint64_t end, |
---|
| 327 | + unsigned int nptes, uint64_t dst, |
---|
| 328 | + uint64_t incr, uint64_t flags, |
---|
| 329 | + pid_t pid, uint64_t vm_ctx), |
---|
| 330 | + TP_ARGS(p, start, end, nptes, dst, incr, flags, pid, vm_ctx), |
---|
| 331 | + TP_STRUCT__entry( |
---|
| 332 | + __field(u64, start) |
---|
| 333 | + __field(u64, end) |
---|
| 334 | + __field(u64, flags) |
---|
| 335 | + __field(unsigned int, nptes) |
---|
| 336 | + __field(u64, incr) |
---|
| 337 | + __field(pid_t, pid) |
---|
| 338 | + __field(u64, vm_ctx) |
---|
| 339 | + __dynamic_array(u64, dst, nptes) |
---|
| 340 | + ), |
---|
| 341 | + |
---|
| 342 | + TP_fast_assign( |
---|
| 343 | + unsigned int i; |
---|
| 344 | + |
---|
| 345 | + __entry->start = start; |
---|
| 346 | + __entry->end = end; |
---|
| 347 | + __entry->flags = flags; |
---|
| 348 | + __entry->incr = incr; |
---|
| 349 | + __entry->nptes = nptes; |
---|
| 350 | + __entry->pid = pid; |
---|
| 351 | + __entry->vm_ctx = vm_ctx; |
---|
| 352 | + for (i = 0; i < nptes; ++i) { |
---|
| 353 | + u64 addr = p->pages_addr ? amdgpu_vm_map_gart( |
---|
| 354 | + p->pages_addr, dst) : dst; |
---|
| 355 | + |
---|
| 356 | + ((u64 *)__get_dynamic_array(dst))[i] = addr; |
---|
| 357 | + dst += incr; |
---|
| 358 | + } |
---|
| 359 | + ), |
---|
| 360 | + TP_printk("pid:%u vm_ctx:0x%llx start:0x%010llx end:0x%010llx," |
---|
| 361 | + " flags:0x%llx, incr:%llu, dst:\n%s", __entry->pid, |
---|
| 362 | + __entry->vm_ctx, __entry->start, __entry->end, |
---|
| 363 | + __entry->flags, __entry->incr, __print_array( |
---|
| 364 | + __get_dynamic_array(dst), __entry->nptes, 8)) |
---|
| 365 | +); |
---|
| 366 | + |
---|
322 | 367 | TRACE_EVENT(amdgpu_vm_set_ptes, |
---|
323 | 368 | TP_PROTO(uint64_t pe, uint64_t addr, unsigned count, |
---|
324 | | - uint32_t incr, uint64_t flags), |
---|
325 | | - TP_ARGS(pe, addr, count, incr, flags), |
---|
| 369 | + uint32_t incr, uint64_t flags, bool direct), |
---|
| 370 | + TP_ARGS(pe, addr, count, incr, flags, direct), |
---|
326 | 371 | TP_STRUCT__entry( |
---|
327 | 372 | __field(u64, pe) |
---|
328 | 373 | __field(u64, addr) |
---|
329 | 374 | __field(u32, count) |
---|
330 | 375 | __field(u32, incr) |
---|
331 | 376 | __field(u64, flags) |
---|
| 377 | + __field(bool, direct) |
---|
332 | 378 | ), |
---|
333 | 379 | |
---|
334 | 380 | TP_fast_assign( |
---|
.. | .. |
---|
337 | 383 | __entry->count = count; |
---|
338 | 384 | __entry->incr = incr; |
---|
339 | 385 | __entry->flags = flags; |
---|
| 386 | + __entry->direct = direct; |
---|
340 | 387 | ), |
---|
341 | | - TP_printk("pe=%010Lx, addr=%010Lx, incr=%u, flags=%llx, count=%u", |
---|
342 | | - __entry->pe, __entry->addr, __entry->incr, |
---|
343 | | - __entry->flags, __entry->count) |
---|
| 388 | + TP_printk("pe=%010Lx, addr=%010Lx, incr=%u, flags=%llx, count=%u, " |
---|
| 389 | + "direct=%d", __entry->pe, __entry->addr, __entry->incr, |
---|
| 390 | + __entry->flags, __entry->count, __entry->direct) |
---|
344 | 391 | ); |
---|
345 | 392 | |
---|
346 | 393 | TRACE_EVENT(amdgpu_vm_copy_ptes, |
---|
347 | | - TP_PROTO(uint64_t pe, uint64_t src, unsigned count), |
---|
348 | | - TP_ARGS(pe, src, count), |
---|
| 394 | + TP_PROTO(uint64_t pe, uint64_t src, unsigned count, bool direct), |
---|
| 395 | + TP_ARGS(pe, src, count, direct), |
---|
349 | 396 | TP_STRUCT__entry( |
---|
350 | 397 | __field(u64, pe) |
---|
351 | 398 | __field(u64, src) |
---|
352 | 399 | __field(u32, count) |
---|
| 400 | + __field(bool, direct) |
---|
353 | 401 | ), |
---|
354 | 402 | |
---|
355 | 403 | TP_fast_assign( |
---|
356 | 404 | __entry->pe = pe; |
---|
357 | 405 | __entry->src = src; |
---|
358 | 406 | __entry->count = count; |
---|
| 407 | + __entry->direct = direct; |
---|
359 | 408 | ), |
---|
360 | | - TP_printk("pe=%010Lx, src=%010Lx, count=%u", |
---|
361 | | - __entry->pe, __entry->src, __entry->count) |
---|
| 409 | + TP_printk("pe=%010Lx, src=%010Lx, count=%u, direct=%d", |
---|
| 410 | + __entry->pe, __entry->src, __entry->count, |
---|
| 411 | + __entry->direct) |
---|
362 | 412 | ); |
---|
363 | 413 | |
---|
364 | 414 | TRACE_EVENT(amdgpu_vm_flush, |
---|
.. | .. |
---|
366 | 416 | uint64_t pd_addr), |
---|
367 | 417 | TP_ARGS(ring, vmid, pd_addr), |
---|
368 | 418 | TP_STRUCT__entry( |
---|
369 | | - __field(u32, ring) |
---|
| 419 | + __string(ring, ring->name) |
---|
370 | 420 | __field(u32, vmid) |
---|
371 | 421 | __field(u32, vm_hub) |
---|
372 | 422 | __field(u64, pd_addr) |
---|
373 | 423 | ), |
---|
374 | 424 | |
---|
375 | 425 | TP_fast_assign( |
---|
376 | | - __entry->ring = ring->idx; |
---|
| 426 | + __assign_str(ring, ring->name) |
---|
377 | 427 | __entry->vmid = vmid; |
---|
378 | 428 | __entry->vm_hub = ring->funcs->vmhub; |
---|
379 | 429 | __entry->pd_addr = pd_addr; |
---|
380 | 430 | ), |
---|
381 | | - TP_printk("ring=%u, id=%u, hub=%u, pd_addr=%010Lx", |
---|
382 | | - __entry->ring, __entry->vmid, |
---|
| 431 | + TP_printk("ring=%s, id=%u, hub=%u, pd_addr=%010Lx", |
---|
| 432 | + __get_str(ring), __entry->vmid, |
---|
383 | 433 | __entry->vm_hub,__entry->pd_addr) |
---|
384 | 434 | ); |
---|
385 | 435 | |
---|
.. | .. |
---|
462 | 512 | __entry->new_placement, __entry->bo_size) |
---|
463 | 513 | ); |
---|
464 | 514 | |
---|
| 515 | +TRACE_EVENT(amdgpu_ib_pipe_sync, |
---|
| 516 | + TP_PROTO(struct amdgpu_job *sched_job, struct dma_fence *fence), |
---|
| 517 | + TP_ARGS(sched_job, fence), |
---|
| 518 | + TP_STRUCT__entry( |
---|
| 519 | + __string(ring, sched_job->base.sched->name) |
---|
| 520 | + __field(uint64_t, id) |
---|
| 521 | + __field(struct dma_fence *, fence) |
---|
| 522 | + __field(uint64_t, ctx) |
---|
| 523 | + __field(unsigned, seqno) |
---|
| 524 | + ), |
---|
| 525 | + |
---|
| 526 | + TP_fast_assign( |
---|
| 527 | + __assign_str(ring, sched_job->base.sched->name) |
---|
| 528 | + __entry->id = sched_job->base.id; |
---|
| 529 | + __entry->fence = fence; |
---|
| 530 | + __entry->ctx = fence->context; |
---|
| 531 | + __entry->seqno = fence->seqno; |
---|
| 532 | + ), |
---|
| 533 | + TP_printk("job ring=%s, id=%llu, need pipe sync to fence=%p, context=%llu, seq=%u", |
---|
| 534 | + __get_str(ring), __entry->id, |
---|
| 535 | + __entry->fence, __entry->ctx, |
---|
| 536 | + __entry->seqno) |
---|
| 537 | +); |
---|
| 538 | + |
---|
465 | 539 | #undef AMDGPU_JOB_GET_TIMELINE_NAME |
---|
466 | 540 | #endif |
---|
467 | 541 | |
---|