Skip to content

Commit 24b52db

Browse files
mbrost05rodrigovivi
authored andcommitted
drm/xe: Add TLB invalidation fence ftrace
This will help debug issues with TLB invalidation fences. Signed-off-by: Matthew Brost <[email protected]> Reviewed-by: Niranjana Vishwanathapura <[email protected]> Signed-off-by: Rodrigo Vivi <[email protected]>
1 parent c6b0948 commit 24b52db

File tree

3 files changed

+60
-0
lines changed

3 files changed

+60
-0
lines changed

drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#include "xe_gt_tlb_invalidation.h"
88
#include "xe_guc.h"
99
#include "xe_guc_ct.h"
10+
#include "xe_trace.h"
1011

1112
static struct xe_gt *
1213
guc_to_gt(struct xe_guc *guc)
@@ -82,6 +83,7 @@ static int send_tlb_invalidation(struct xe_guc *guc,
8283
fence->seqno = seqno;
8384
list_add_tail(&fence->link,
8485
&gt->tlb_invalidation.pending_fences);
86+
trace_xe_gt_tlb_invalidation_fence_send(fence);
8587
}
8688
action[1] = seqno;
8789
gt->tlb_invalidation.seqno = (gt->tlb_invalidation.seqno + 1) %
@@ -194,7 +196,10 @@ int xe_guc_tlb_invalidation_done_handler(struct xe_guc *guc, u32 *msg, u32 len)
194196

195197
fence = list_first_entry_or_null(&gt->tlb_invalidation.pending_fences,
196198
typeof(*fence), link);
199+
if (fence)
200+
trace_xe_gt_tlb_invalidation_fence_recv(fence);
197201
if (fence && tlb_invalidation_seqno_past(gt, fence->seqno)) {
202+
trace_xe_gt_tlb_invalidation_fence_signal(fence);
198203
list_del(&fence->link);
199204
dma_fence_signal(&fence->base);
200205
dma_fence_put(&fence->base);

drivers/gpu/drm/xe/xe_pt.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#include "xe_pt_walk.h"
1414
#include "xe_vm.h"
1515
#include "xe_res_cursor.h"
16+
#include "xe_trace.h"
1617
#include "xe_ttm_stolen_mgr.h"
1718

1819
struct xe_pt_dir {
@@ -1493,6 +1494,7 @@ static void invalidation_fence_cb(struct dma_fence *fence,
14931494
struct invalidation_fence *ifence =
14941495
container_of(cb, struct invalidation_fence, cb);
14951496

1497+
trace_xe_gt_tlb_invalidation_fence_cb(&ifence->base);
14961498
queue_work(system_wq, &ifence->work);
14971499
dma_fence_put(ifence->fence);
14981500
}
@@ -1502,6 +1504,7 @@ static void invalidation_fence_work_func(struct work_struct *w)
15021504
struct invalidation_fence *ifence =
15031505
container_of(w, struct invalidation_fence, work);
15041506

1507+
trace_xe_gt_tlb_invalidation_fence_work_func(&ifence->base);
15051508
xe_gt_tlb_invalidation(ifence->gt, &ifence->base);
15061509
}
15071510

@@ -1511,6 +1514,8 @@ static int invalidation_fence_init(struct xe_gt *gt,
15111514
{
15121515
int ret;
15131516

1517+
trace_xe_gt_tlb_invalidation_fence_create(&ifence->base);
1518+
15141519
spin_lock_irq(&gt->tlb_invalidation.lock);
15151520
dma_fence_init(&ifence->base.base, &invalidation_fence_ops,
15161521
&gt->tlb_invalidation.lock,

drivers/gpu/drm/xe/xe_trace.h

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,60 @@
1616
#include "xe_engine_types.h"
1717
#include "xe_gpu_scheduler_types.h"
1818
#include "xe_gt_types.h"
19+
#include "xe_gt_tlb_invalidation_types.h"
1920
#include "xe_guc_engine_types.h"
2021
#include "xe_sched_job.h"
2122
#include "xe_vm_types.h"
2223

24+
DECLARE_EVENT_CLASS(xe_gt_tlb_invalidation_fence,
25+
TP_PROTO(struct xe_gt_tlb_invalidation_fence *fence),
26+
TP_ARGS(fence),
27+
28+
TP_STRUCT__entry(
29+
__field(u64, fence)
30+
__field(int, seqno)
31+
),
32+
33+
TP_fast_assign(
34+
__entry->fence = (u64)fence;
35+
__entry->seqno = fence->seqno;
36+
),
37+
38+
TP_printk("fence=0x%016llx, seqno=%d",
39+
__entry->fence, __entry->seqno)
40+
);
41+
42+
DEFINE_EVENT(xe_gt_tlb_invalidation_fence, xe_gt_tlb_invalidation_fence_create,
43+
TP_PROTO(struct xe_gt_tlb_invalidation_fence *fence),
44+
TP_ARGS(fence)
45+
);
46+
47+
DEFINE_EVENT(xe_gt_tlb_invalidation_fence,
48+
xe_gt_tlb_invalidation_fence_work_func,
49+
TP_PROTO(struct xe_gt_tlb_invalidation_fence *fence),
50+
TP_ARGS(fence)
51+
);
52+
53+
DEFINE_EVENT(xe_gt_tlb_invalidation_fence, xe_gt_tlb_invalidation_fence_cb,
54+
TP_PROTO(struct xe_gt_tlb_invalidation_fence *fence),
55+
TP_ARGS(fence)
56+
);
57+
58+
DEFINE_EVENT(xe_gt_tlb_invalidation_fence, xe_gt_tlb_invalidation_fence_send,
59+
TP_PROTO(struct xe_gt_tlb_invalidation_fence *fence),
60+
TP_ARGS(fence)
61+
);
62+
63+
DEFINE_EVENT(xe_gt_tlb_invalidation_fence, xe_gt_tlb_invalidation_fence_recv,
64+
TP_PROTO(struct xe_gt_tlb_invalidation_fence *fence),
65+
TP_ARGS(fence)
66+
);
67+
68+
DEFINE_EVENT(xe_gt_tlb_invalidation_fence, xe_gt_tlb_invalidation_fence_signal,
69+
TP_PROTO(struct xe_gt_tlb_invalidation_fence *fence),
70+
TP_ARGS(fence)
71+
);
72+
2373
DECLARE_EVENT_CLASS(xe_bo,
2474
TP_PROTO(struct xe_bo *bo),
2575
TP_ARGS(bo),

0 commit comments

Comments
 (0)