xref: /openbmc/linux/drivers/gpu/drm/i915/i915_trace.h (revision d3f23ab9)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
24bb71337SJani Nikula 
34bb71337SJani Nikula #undef TRACE_SYSTEM
44bb71337SJani Nikula #define TRACE_SYSTEM i915
54bb71337SJani Nikula 
61c5d22f7SChris Wilson #if !defined(_I915_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ)
71c5d22f7SChris Wilson #define _I915_TRACE_H_
81c5d22f7SChris Wilson 
91c5d22f7SChris Wilson #include <linux/stringify.h>
101c5d22f7SChris Wilson #include <linux/types.h>
111c5d22f7SChris Wilson #include <linux/tracepoint.h>
121c5d22f7SChris Wilson 
13fcd70cd3SDaniel Vetter #include <drm/drm_drv.h>
14fcd70cd3SDaniel Vetter 
15112ed2d3SChris Wilson #include "gt/intel_engine.h"
16112ed2d3SChris Wilson 
1705394f39SChris Wilson #include "i915_drv.h"
181c5d22f7SChris Wilson 
191c5d22f7SChris Wilson /* object tracking */
201c5d22f7SChris Wilson 
211c5d22f7SChris Wilson TRACE_EVENT(i915_gem_object_create,
2205394f39SChris Wilson 	    TP_PROTO(struct drm_i915_gem_object *obj),
231c5d22f7SChris Wilson 	    TP_ARGS(obj),
241c5d22f7SChris Wilson 
251c5d22f7SChris Wilson 	    TP_STRUCT__entry(
2605394f39SChris Wilson 			     __field(struct drm_i915_gem_object *, obj)
276c1fa341SChris Wilson 			     __field(u64, size)
281c5d22f7SChris Wilson 			     ),
291c5d22f7SChris Wilson 
301c5d22f7SChris Wilson 	    TP_fast_assign(
311c5d22f7SChris Wilson 			   __entry->obj = obj;
3205394f39SChris Wilson 			   __entry->size = obj->base.size;
331c5d22f7SChris Wilson 			   ),
341c5d22f7SChris Wilson 
356c1fa341SChris Wilson 	    TP_printk("obj=%p, size=0x%llx", __entry->obj, __entry->size)
361c5d22f7SChris Wilson );
371c5d22f7SChris Wilson 
383abafa53SChris Wilson TRACE_EVENT(i915_gem_shrink,
393abafa53SChris Wilson 	    TP_PROTO(struct drm_i915_private *i915, unsigned long target, unsigned flags),
403abafa53SChris Wilson 	    TP_ARGS(i915, target, flags),
413abafa53SChris Wilson 
423abafa53SChris Wilson 	    TP_STRUCT__entry(
433abafa53SChris Wilson 			     __field(int, dev)
443abafa53SChris Wilson 			     __field(unsigned long, target)
453abafa53SChris Wilson 			     __field(unsigned, flags)
463abafa53SChris Wilson 			     ),
473abafa53SChris Wilson 
483abafa53SChris Wilson 	    TP_fast_assign(
4991c8a326SChris Wilson 			   __entry->dev = i915->drm.primary->index;
503abafa53SChris Wilson 			   __entry->target = target;
513abafa53SChris Wilson 			   __entry->flags = flags;
523abafa53SChris Wilson 			   ),
533abafa53SChris Wilson 
543abafa53SChris Wilson 	    TP_printk("dev=%d, target=%lu, flags=%x",
553abafa53SChris Wilson 		      __entry->dev, __entry->target, __entry->flags)
563abafa53SChris Wilson );
573abafa53SChris Wilson 
5807fe0b12SBen Widawsky TRACE_EVENT(i915_vma_bind,
591ec9e26dSDaniel Vetter 	    TP_PROTO(struct i915_vma *vma, unsigned flags),
601ec9e26dSDaniel Vetter 	    TP_ARGS(vma, flags),
611c5d22f7SChris Wilson 
621c5d22f7SChris Wilson 	    TP_STRUCT__entry(
6305394f39SChris Wilson 			     __field(struct drm_i915_gem_object *, obj)
6407fe0b12SBen Widawsky 			     __field(struct i915_address_space *, vm)
6533938714SBen Widawsky 			     __field(u64, offset)
666c1fa341SChris Wilson 			     __field(u64, size)
671ec9e26dSDaniel Vetter 			     __field(unsigned, flags)
681c5d22f7SChris Wilson 			     ),
691c5d22f7SChris Wilson 
701c5d22f7SChris Wilson 	    TP_fast_assign(
7107fe0b12SBen Widawsky 			   __entry->obj = vma->obj;
7207fe0b12SBen Widawsky 			   __entry->vm = vma->vm;
7307fe0b12SBen Widawsky 			   __entry->offset = vma->node.start;
7407fe0b12SBen Widawsky 			   __entry->size = vma->node.size;
751ec9e26dSDaniel Vetter 			   __entry->flags = flags;
761c5d22f7SChris Wilson 			   ),
771c5d22f7SChris Wilson 
786c1fa341SChris Wilson 	    TP_printk("obj=%p, offset=0x%016llx size=0x%llx%s vm=%p",
79db53a302SChris Wilson 		      __entry->obj, __entry->offset, __entry->size,
801ec9e26dSDaniel Vetter 		      __entry->flags & PIN_MAPPABLE ? ", mappable" : "",
8107fe0b12SBen Widawsky 		      __entry->vm)
821c5d22f7SChris Wilson );
831c5d22f7SChris Wilson 
8407fe0b12SBen Widawsky TRACE_EVENT(i915_vma_unbind,
8507fe0b12SBen Widawsky 	    TP_PROTO(struct i915_vma *vma),
8607fe0b12SBen Widawsky 	    TP_ARGS(vma),
87db53a302SChris Wilson 
88db53a302SChris Wilson 	    TP_STRUCT__entry(
89db53a302SChris Wilson 			     __field(struct drm_i915_gem_object *, obj)
9007fe0b12SBen Widawsky 			     __field(struct i915_address_space *, vm)
9133938714SBen Widawsky 			     __field(u64, offset)
926c1fa341SChris Wilson 			     __field(u64, size)
93db53a302SChris Wilson 			     ),
94db53a302SChris Wilson 
95db53a302SChris Wilson 	    TP_fast_assign(
9607fe0b12SBen Widawsky 			   __entry->obj = vma->obj;
9707fe0b12SBen Widawsky 			   __entry->vm = vma->vm;
9807fe0b12SBen Widawsky 			   __entry->offset = vma->node.start;
9907fe0b12SBen Widawsky 			   __entry->size = vma->node.size;
100db53a302SChris Wilson 			   ),
101db53a302SChris Wilson 
1026c1fa341SChris Wilson 	    TP_printk("obj=%p, offset=0x%016llx size=0x%llx vm=%p",
10307fe0b12SBen Widawsky 		      __entry->obj, __entry->offset, __entry->size, __entry->vm)
104db53a302SChris Wilson );
105db53a302SChris Wilson 
106db53a302SChris Wilson TRACE_EVENT(i915_gem_object_pwrite,
1076c1fa341SChris Wilson 	    TP_PROTO(struct drm_i915_gem_object *obj, u64 offset, u64 len),
108db53a302SChris Wilson 	    TP_ARGS(obj, offset, len),
109db53a302SChris Wilson 
110db53a302SChris Wilson 	    TP_STRUCT__entry(
111db53a302SChris Wilson 			     __field(struct drm_i915_gem_object *, obj)
1126c1fa341SChris Wilson 			     __field(u64, offset)
1136c1fa341SChris Wilson 			     __field(u64, len)
114db53a302SChris Wilson 			     ),
115db53a302SChris Wilson 
116db53a302SChris Wilson 	    TP_fast_assign(
117db53a302SChris Wilson 			   __entry->obj = obj;
118db53a302SChris Wilson 			   __entry->offset = offset;
119db53a302SChris Wilson 			   __entry->len = len;
120db53a302SChris Wilson 			   ),
121db53a302SChris Wilson 
1226c1fa341SChris Wilson 	    TP_printk("obj=%p, offset=0x%llx, len=0x%llx",
123db53a302SChris Wilson 		      __entry->obj, __entry->offset, __entry->len)
124db53a302SChris Wilson );
125db53a302SChris Wilson 
126db53a302SChris Wilson TRACE_EVENT(i915_gem_object_pread,
1276c1fa341SChris Wilson 	    TP_PROTO(struct drm_i915_gem_object *obj, u64 offset, u64 len),
128db53a302SChris Wilson 	    TP_ARGS(obj, offset, len),
129db53a302SChris Wilson 
130db53a302SChris Wilson 	    TP_STRUCT__entry(
131db53a302SChris Wilson 			     __field(struct drm_i915_gem_object *, obj)
1326c1fa341SChris Wilson 			     __field(u64, offset)
1336c1fa341SChris Wilson 			     __field(u64, len)
134db53a302SChris Wilson 			     ),
135db53a302SChris Wilson 
136db53a302SChris Wilson 	    TP_fast_assign(
137db53a302SChris Wilson 			   __entry->obj = obj;
138db53a302SChris Wilson 			   __entry->offset = offset;
139db53a302SChris Wilson 			   __entry->len = len;
140db53a302SChris Wilson 			   ),
141db53a302SChris Wilson 
1426c1fa341SChris Wilson 	    TP_printk("obj=%p, offset=0x%llx, len=0x%llx",
143db53a302SChris Wilson 		      __entry->obj, __entry->offset, __entry->len)
144db53a302SChris Wilson );
145db53a302SChris Wilson 
146db53a302SChris Wilson TRACE_EVENT(i915_gem_object_fault,
1476c1fa341SChris Wilson 	    TP_PROTO(struct drm_i915_gem_object *obj, u64 index, bool gtt, bool write),
148db53a302SChris Wilson 	    TP_ARGS(obj, index, gtt, write),
149db53a302SChris Wilson 
150db53a302SChris Wilson 	    TP_STRUCT__entry(
151db53a302SChris Wilson 			     __field(struct drm_i915_gem_object *, obj)
1526c1fa341SChris Wilson 			     __field(u64, index)
153db53a302SChris Wilson 			     __field(bool, gtt)
154db53a302SChris Wilson 			     __field(bool, write)
155db53a302SChris Wilson 			     ),
156db53a302SChris Wilson 
157db53a302SChris Wilson 	    TP_fast_assign(
158db53a302SChris Wilson 			   __entry->obj = obj;
159db53a302SChris Wilson 			   __entry->index = index;
160db53a302SChris Wilson 			   __entry->gtt = gtt;
161db53a302SChris Wilson 			   __entry->write = write;
162db53a302SChris Wilson 			   ),
163db53a302SChris Wilson 
1646c1fa341SChris Wilson 	    TP_printk("obj=%p, %s index=%llu %s",
165db53a302SChris Wilson 		      __entry->obj,
166db53a302SChris Wilson 		      __entry->gtt ? "GTT" : "CPU",
167db53a302SChris Wilson 		      __entry->index,
168db53a302SChris Wilson 		      __entry->write ? ", writable" : "")
1691c5d22f7SChris Wilson );
1701c5d22f7SChris Wilson 
171903cf20cSLi Zefan DECLARE_EVENT_CLASS(i915_gem_object,
17205394f39SChris Wilson 	    TP_PROTO(struct drm_i915_gem_object *obj),
1731c5d22f7SChris Wilson 	    TP_ARGS(obj),
1741c5d22f7SChris Wilson 
1751c5d22f7SChris Wilson 	    TP_STRUCT__entry(
17605394f39SChris Wilson 			     __field(struct drm_i915_gem_object *, obj)
1771c5d22f7SChris Wilson 			     ),
1781c5d22f7SChris Wilson 
1791c5d22f7SChris Wilson 	    TP_fast_assign(
1801c5d22f7SChris Wilson 			   __entry->obj = obj;
1811c5d22f7SChris Wilson 			   ),
1821c5d22f7SChris Wilson 
1831c5d22f7SChris Wilson 	    TP_printk("obj=%p", __entry->obj)
1841c5d22f7SChris Wilson );
1851c5d22f7SChris Wilson 
186f41275e8SLi Zefan DEFINE_EVENT(i915_gem_object, i915_gem_object_clflush,
18705394f39SChris Wilson 	     TP_PROTO(struct drm_i915_gem_object *obj),
188903cf20cSLi Zefan 	     TP_ARGS(obj)
189903cf20cSLi Zefan );
1901c5d22f7SChris Wilson 
191903cf20cSLi Zefan DEFINE_EVENT(i915_gem_object, i915_gem_object_destroy,
19205394f39SChris Wilson 	    TP_PROTO(struct drm_i915_gem_object *obj),
193903cf20cSLi Zefan 	    TP_ARGS(obj)
1941c5d22f7SChris Wilson );
1951c5d22f7SChris Wilson 
196db53a302SChris Wilson TRACE_EVENT(i915_gem_evict,
1976c1fa341SChris Wilson 	    TP_PROTO(struct i915_address_space *vm, u64 size, u64 align, unsigned int flags),
198e522ac23SChris Wilson 	    TP_ARGS(vm, size, align, flags),
1991c5d22f7SChris Wilson 
2001c5d22f7SChris Wilson 	    TP_STRUCT__entry(
2014f49be54SChris Wilson 			     __field(u32, dev)
202e522ac23SChris Wilson 			     __field(struct i915_address_space *, vm)
2036c1fa341SChris Wilson 			     __field(u64, size)
2046c1fa341SChris Wilson 			     __field(u64, align)
205e522ac23SChris Wilson 			     __field(unsigned int, flags)
2061c5d22f7SChris Wilson 			    ),
2071c5d22f7SChris Wilson 
2081c5d22f7SChris Wilson 	    TP_fast_assign(
209c6385c94SChris Wilson 			   __entry->dev = vm->i915->drm.primary->index;
210e522ac23SChris Wilson 			   __entry->vm = vm;
211db53a302SChris Wilson 			   __entry->size = size;
212db53a302SChris Wilson 			   __entry->align = align;
2131ec9e26dSDaniel Vetter 			   __entry->flags = flags;
2141c5d22f7SChris Wilson 			  ),
2151c5d22f7SChris Wilson 
2166c1fa341SChris Wilson 	    TP_printk("dev=%d, vm=%p, size=0x%llx, align=0x%llx %s",
217e522ac23SChris Wilson 		      __entry->dev, __entry->vm, __entry->size, __entry->align,
2181ec9e26dSDaniel Vetter 		      __entry->flags & PIN_MAPPABLE ? ", mappable" : "")
2191c5d22f7SChris Wilson );
2201c5d22f7SChris Wilson 
221625d988aSChris Wilson TRACE_EVENT(i915_gem_evict_node,
222625d988aSChris Wilson 	    TP_PROTO(struct i915_address_space *vm, struct drm_mm_node *node, unsigned int flags),
223625d988aSChris Wilson 	    TP_ARGS(vm, node, flags),
224172ae5b4SChris Wilson 
225172ae5b4SChris Wilson 	    TP_STRUCT__entry(
226172ae5b4SChris Wilson 			     __field(u32, dev)
227172ae5b4SChris Wilson 			     __field(struct i915_address_space *, vm)
228172ae5b4SChris Wilson 			     __field(u64, start)
229172ae5b4SChris Wilson 			     __field(u64, size)
230172ae5b4SChris Wilson 			     __field(unsigned long, color)
231172ae5b4SChris Wilson 			     __field(unsigned int, flags)
232172ae5b4SChris Wilson 			    ),
233172ae5b4SChris Wilson 
234172ae5b4SChris Wilson 	    TP_fast_assign(
235625d988aSChris Wilson 			   __entry->dev = vm->i915->drm.primary->index;
236625d988aSChris Wilson 			   __entry->vm = vm;
237625d988aSChris Wilson 			   __entry->start = node->start;
238625d988aSChris Wilson 			   __entry->size = node->size;
239625d988aSChris Wilson 			   __entry->color = node->color;
240172ae5b4SChris Wilson 			   __entry->flags = flags;
241172ae5b4SChris Wilson 			  ),
242172ae5b4SChris Wilson 
2436c1fa341SChris Wilson 	    TP_printk("dev=%d, vm=%p, start=0x%llx size=0x%llx, color=0x%lx, flags=%x",
244172ae5b4SChris Wilson 		      __entry->dev, __entry->vm,
245172ae5b4SChris Wilson 		      __entry->start, __entry->size,
246172ae5b4SChris Wilson 		      __entry->color, __entry->flags)
247172ae5b4SChris Wilson );
248172ae5b4SChris Wilson 
24965921223SChris Wilson TRACE_EVENT(i915_gem_evict_vm,
25065921223SChris Wilson 	    TP_PROTO(struct i915_address_space *vm),
25165921223SChris Wilson 	    TP_ARGS(vm),
25265921223SChris Wilson 
25365921223SChris Wilson 	    TP_STRUCT__entry(
25465921223SChris Wilson 			     __field(u32, dev)
25565921223SChris Wilson 			     __field(struct i915_address_space *, vm)
25665921223SChris Wilson 			    ),
25765921223SChris Wilson 
25865921223SChris Wilson 	    TP_fast_assign(
25965921223SChris Wilson 			   __entry->dev = vm->i915->drm.primary->index;
26065921223SChris Wilson 			   __entry->vm = vm;
26165921223SChris Wilson 			  ),
26265921223SChris Wilson 
26365921223SChris Wilson 	    TP_printk("dev=%d, vm=%p", __entry->dev, __entry->vm)
26465921223SChris Wilson );
26565921223SChris Wilson 
266e61e0f51SChris Wilson TRACE_EVENT(i915_request_queue,
267e61e0f51SChris Wilson 	    TP_PROTO(struct i915_request *rq, u32 flags),
268e61e0f51SChris Wilson 	    TP_ARGS(rq, flags),
269db53a302SChris Wilson 
270db53a302SChris Wilson 	    TP_STRUCT__entry(
271db53a302SChris Wilson 			     __field(u32, dev)
27257d7116cSTvrtko Ursulin 			     __field(u64, ctx)
2732956e970STvrtko Ursulin 			     __field(u16, class)
2742956e970STvrtko Ursulin 			     __field(u16, instance)
275db53a302SChris Wilson 			     __field(u32, seqno)
276d7d4eeddSChris Wilson 			     __field(u32, flags)
277db53a302SChris Wilson 			     ),
278db53a302SChris Wilson 
279db53a302SChris Wilson 	    TP_fast_assign(
280*d3f23ab9SAndrzej Hajda 			   __entry->dev = rq->i915->drm.primary->index;
2812956e970STvrtko Ursulin 			   __entry->class = rq->engine->uabi_class;
282750e76b4SChris Wilson 			   __entry->instance = rq->engine->uabi_instance;
283e61e0f51SChris Wilson 			   __entry->ctx = rq->fence.context;
284e61e0f51SChris Wilson 			   __entry->seqno = rq->fence.seqno;
285d7d4eeddSChris Wilson 			   __entry->flags = flags;
286db53a302SChris Wilson 			   ),
287db53a302SChris Wilson 
2882935ed53SChris Wilson 	    TP_printk("dev=%u, engine=%u:%u, ctx=%llu, seqno=%u, flags=0x%x",
289f24e74a7STvrtko Ursulin 		      __entry->dev, __entry->class, __entry->instance,
2902935ed53SChris Wilson 		      __entry->ctx, __entry->seqno, __entry->flags)
291db53a302SChris Wilson );
292db53a302SChris Wilson 
293e61e0f51SChris Wilson DECLARE_EVENT_CLASS(i915_request,
294e61e0f51SChris Wilson 	    TP_PROTO(struct i915_request *rq),
295e61e0f51SChris Wilson 	    TP_ARGS(rq),
2961c5d22f7SChris Wilson 
2971c5d22f7SChris Wilson 	    TP_STRUCT__entry(
2984f49be54SChris Wilson 			     __field(u32, dev)
29957d7116cSTvrtko Ursulin 			     __field(u64, ctx)
3002956e970STvrtko Ursulin 			     __field(u16, class)
3012956e970STvrtko Ursulin 			     __field(u16, instance)
3021c5d22f7SChris Wilson 			     __field(u32, seqno)
303dbf9da8dSMatthew Brost 			     __field(u32, tail)
3041c5d22f7SChris Wilson 			     ),
3051c5d22f7SChris Wilson 
3061c5d22f7SChris Wilson 	    TP_fast_assign(
307*d3f23ab9SAndrzej Hajda 			   __entry->dev = rq->i915->drm.primary->index;
3082956e970STvrtko Ursulin 			   __entry->class = rq->engine->uabi_class;
309750e76b4SChris Wilson 			   __entry->instance = rq->engine->uabi_instance;
310e61e0f51SChris Wilson 			   __entry->ctx = rq->fence.context;
311e61e0f51SChris Wilson 			   __entry->seqno = rq->fence.seqno;
312dbf9da8dSMatthew Brost 			   __entry->tail = rq->tail;
3131c5d22f7SChris Wilson 			   ),
3141c5d22f7SChris Wilson 
3159a4aa3a2SJoonas Lahtinen 	    TP_printk("dev=%u, engine=%u:%u, ctx=%llu, seqno=%u, tail=%u",
316f24e74a7STvrtko Ursulin 		      __entry->dev, __entry->class, __entry->instance,
3179a4aa3a2SJoonas Lahtinen 		      __entry->ctx, __entry->seqno, __entry->tail)
318db53a302SChris Wilson );
319db53a302SChris Wilson 
320e61e0f51SChris Wilson DEFINE_EVENT(i915_request, i915_request_add,
321e61e0f51SChris Wilson 	     TP_PROTO(struct i915_request *rq),
322e61e0f51SChris Wilson 	     TP_ARGS(rq)
3231c5d22f7SChris Wilson );
3241c5d22f7SChris Wilson 
325354d036fSTvrtko Ursulin #if defined(CONFIG_DRM_I915_LOW_LEVEL_TRACEPOINTS)
326dbf9da8dSMatthew Brost DEFINE_EVENT(i915_request, i915_request_guc_submit,
327dbf9da8dSMatthew Brost 	     TP_PROTO(struct i915_request *rq),
328dbf9da8dSMatthew Brost 	     TP_ARGS(rq)
329dbf9da8dSMatthew Brost );
330dbf9da8dSMatthew Brost 
331e61e0f51SChris Wilson DEFINE_EVENT(i915_request, i915_request_submit,
332e61e0f51SChris Wilson 	     TP_PROTO(struct i915_request *rq),
333e61e0f51SChris Wilson 	     TP_ARGS(rq)
334354d036fSTvrtko Ursulin );
335354d036fSTvrtko Ursulin 
336e61e0f51SChris Wilson DEFINE_EVENT(i915_request, i915_request_execute,
337e61e0f51SChris Wilson 	     TP_PROTO(struct i915_request *rq),
338e61e0f51SChris Wilson 	     TP_ARGS(rq)
339354d036fSTvrtko Ursulin );
340d7d96833STvrtko Ursulin 
341f2742e47STvrtko Ursulin TRACE_EVENT(i915_request_in,
342e61e0f51SChris Wilson 	    TP_PROTO(struct i915_request *rq, unsigned int port),
343e61e0f51SChris Wilson 	    TP_ARGS(rq, port),
344d7d96833STvrtko Ursulin 
345d7d96833STvrtko Ursulin 	    TP_STRUCT__entry(
346d7d96833STvrtko Ursulin 			     __field(u32, dev)
34757d7116cSTvrtko Ursulin 			     __field(u64, ctx)
3482956e970STvrtko Ursulin 			     __field(u16, class)
3492956e970STvrtko Ursulin 			     __field(u16, instance)
350d7d96833STvrtko Ursulin 			     __field(u32, seqno)
351d7d96833STvrtko Ursulin 			     __field(u32, port)
3520543fbf4SChris Wilson 			     __field(s32, prio)
353d7d96833STvrtko Ursulin 			    ),
354d7d96833STvrtko Ursulin 
355d7d96833STvrtko Ursulin 	    TP_fast_assign(
356*d3f23ab9SAndrzej Hajda 			   __entry->dev = rq->i915->drm.primary->index;
3572956e970STvrtko Ursulin 			   __entry->class = rq->engine->uabi_class;
358750e76b4SChris Wilson 			   __entry->instance = rq->engine->uabi_instance;
359e61e0f51SChris Wilson 			   __entry->ctx = rq->fence.context;
360e61e0f51SChris Wilson 			   __entry->seqno = rq->fence.seqno;
361f2742e47STvrtko Ursulin 			   __entry->prio = rq->sched.attr.priority;
362d7d96833STvrtko Ursulin 			   __entry->port = port;
363d7d96833STvrtko Ursulin 			   ),
364d7d96833STvrtko Ursulin 
3650543fbf4SChris Wilson 	    TP_printk("dev=%u, engine=%u:%u, ctx=%llu, seqno=%u, prio=%d, port=%u",
366f24e74a7STvrtko Ursulin 		      __entry->dev, __entry->class, __entry->instance,
3672935ed53SChris Wilson 		      __entry->ctx, __entry->seqno,
368b300fde8SChris Wilson 		      __entry->prio, __entry->port)
369f2742e47STvrtko Ursulin );
370f2742e47STvrtko Ursulin 
371f2742e47STvrtko Ursulin TRACE_EVENT(i915_request_out,
372f2742e47STvrtko Ursulin 	    TP_PROTO(struct i915_request *rq),
373f2742e47STvrtko Ursulin 	    TP_ARGS(rq),
374f2742e47STvrtko Ursulin 
375f2742e47STvrtko Ursulin 	    TP_STRUCT__entry(
376f2742e47STvrtko Ursulin 			     __field(u32, dev)
37757d7116cSTvrtko Ursulin 			     __field(u64, ctx)
3782956e970STvrtko Ursulin 			     __field(u16, class)
3792956e970STvrtko Ursulin 			     __field(u16, instance)
380f2742e47STvrtko Ursulin 			     __field(u32, seqno)
381f2742e47STvrtko Ursulin 			     __field(u32, completed)
382f2742e47STvrtko Ursulin 			    ),
383f2742e47STvrtko Ursulin 
384f2742e47STvrtko Ursulin 	    TP_fast_assign(
385*d3f23ab9SAndrzej Hajda 			   __entry->dev = rq->i915->drm.primary->index;
3862956e970STvrtko Ursulin 			   __entry->class = rq->engine->uabi_class;
387750e76b4SChris Wilson 			   __entry->instance = rq->engine->uabi_instance;
388f2742e47STvrtko Ursulin 			   __entry->ctx = rq->fence.context;
389f2742e47STvrtko Ursulin 			   __entry->seqno = rq->fence.seqno;
390f2742e47STvrtko Ursulin 			   __entry->completed = i915_request_completed(rq);
391f2742e47STvrtko Ursulin 			   ),
392f2742e47STvrtko Ursulin 
3932935ed53SChris Wilson 		    TP_printk("dev=%u, engine=%u:%u, ctx=%llu, seqno=%u, completed?=%u",
394f24e74a7STvrtko Ursulin 			      __entry->dev, __entry->class, __entry->instance,
3952935ed53SChris Wilson 			      __entry->ctx, __entry->seqno, __entry->completed)
396d7d96833STvrtko Ursulin );
397d7d96833STvrtko Ursulin 
398e03b5906SMatthew Brost DECLARE_EVENT_CLASS(intel_context,
399e03b5906SMatthew Brost 		    TP_PROTO(struct intel_context *ce),
400e03b5906SMatthew Brost 		    TP_ARGS(ce),
401e03b5906SMatthew Brost 
402e03b5906SMatthew Brost 		    TP_STRUCT__entry(
403e03b5906SMatthew Brost 			     __field(u32, guc_id)
404e03b5906SMatthew Brost 			     __field(int, pin_count)
405e03b5906SMatthew Brost 			     __field(u32, sched_state)
406ee242ca7SMatthew Brost 			     __field(u8, guc_prio)
407e03b5906SMatthew Brost 			     ),
408e03b5906SMatthew Brost 
409e03b5906SMatthew Brost 		    TP_fast_assign(
4103cb3e343SMatthew Brost 			   __entry->guc_id = ce->guc_id.id;
411e03b5906SMatthew Brost 			   __entry->pin_count = atomic_read(&ce->pin_count);
412e03b5906SMatthew Brost 			   __entry->sched_state = ce->guc_state.sched_state;
413af5bc9f2SMatthew Brost 			   __entry->guc_prio = ce->guc_state.prio;
414e03b5906SMatthew Brost 			   ),
415e03b5906SMatthew Brost 
4160f797650SMatthew Brost 		    TP_printk("guc_id=%d, pin_count=%d sched_state=0x%x, guc_prio=%u",
417e03b5906SMatthew Brost 			      __entry->guc_id, __entry->pin_count,
418e03b5906SMatthew Brost 			      __entry->sched_state,
419ee242ca7SMatthew Brost 			      __entry->guc_prio)
420ee242ca7SMatthew Brost );
421ee242ca7SMatthew Brost 
422ee242ca7SMatthew Brost DEFINE_EVENT(intel_context, intel_context_set_prio,
423ee242ca7SMatthew Brost 	     TP_PROTO(struct intel_context *ce),
424ee242ca7SMatthew Brost 	     TP_ARGS(ce)
425e03b5906SMatthew Brost );
426e03b5906SMatthew Brost 
4271e0fd2b5SMatthew Brost DEFINE_EVENT(intel_context, intel_context_reset,
4281e0fd2b5SMatthew Brost 	     TP_PROTO(struct intel_context *ce),
4291e0fd2b5SMatthew Brost 	     TP_ARGS(ce)
4301e0fd2b5SMatthew Brost );
4311e0fd2b5SMatthew Brost 
432ae8ac10dSMatthew Brost DEFINE_EVENT(intel_context, intel_context_ban,
433ae8ac10dSMatthew Brost 	     TP_PROTO(struct intel_context *ce),
434ae8ac10dSMatthew Brost 	     TP_ARGS(ce)
435ae8ac10dSMatthew Brost );
436ae8ac10dSMatthew Brost 
437e03b5906SMatthew Brost DEFINE_EVENT(intel_context, intel_context_register,
438e03b5906SMatthew Brost 	     TP_PROTO(struct intel_context *ce),
439e03b5906SMatthew Brost 	     TP_ARGS(ce)
440e03b5906SMatthew Brost );
441e03b5906SMatthew Brost 
442e03b5906SMatthew Brost DEFINE_EVENT(intel_context, intel_context_deregister,
443e03b5906SMatthew Brost 	     TP_PROTO(struct intel_context *ce),
444e03b5906SMatthew Brost 	     TP_ARGS(ce)
445e03b5906SMatthew Brost );
446e03b5906SMatthew Brost 
447e03b5906SMatthew Brost DEFINE_EVENT(intel_context, intel_context_deregister_done,
448e03b5906SMatthew Brost 	     TP_PROTO(struct intel_context *ce),
449e03b5906SMatthew Brost 	     TP_ARGS(ce)
450e03b5906SMatthew Brost );
451e03b5906SMatthew Brost 
452e03b5906SMatthew Brost DEFINE_EVENT(intel_context, intel_context_sched_enable,
453e03b5906SMatthew Brost 	     TP_PROTO(struct intel_context *ce),
454e03b5906SMatthew Brost 	     TP_ARGS(ce)
455e03b5906SMatthew Brost );
456e03b5906SMatthew Brost 
457e03b5906SMatthew Brost DEFINE_EVENT(intel_context, intel_context_sched_disable,
458e03b5906SMatthew Brost 	     TP_PROTO(struct intel_context *ce),
459e03b5906SMatthew Brost 	     TP_ARGS(ce)
460e03b5906SMatthew Brost );
461e03b5906SMatthew Brost 
462e03b5906SMatthew Brost DEFINE_EVENT(intel_context, intel_context_sched_done,
463e03b5906SMatthew Brost 	     TP_PROTO(struct intel_context *ce),
464e03b5906SMatthew Brost 	     TP_ARGS(ce)
465e03b5906SMatthew Brost );
466e03b5906SMatthew Brost 
467e03b5906SMatthew Brost DEFINE_EVENT(intel_context, intel_context_create,
468e03b5906SMatthew Brost 	     TP_PROTO(struct intel_context *ce),
469e03b5906SMatthew Brost 	     TP_ARGS(ce)
470e03b5906SMatthew Brost );
471e03b5906SMatthew Brost 
472e03b5906SMatthew Brost DEFINE_EVENT(intel_context, intel_context_fence_release,
473e03b5906SMatthew Brost 	     TP_PROTO(struct intel_context *ce),
474e03b5906SMatthew Brost 	     TP_ARGS(ce)
475e03b5906SMatthew Brost );
476e03b5906SMatthew Brost 
477e03b5906SMatthew Brost DEFINE_EVENT(intel_context, intel_context_free,
478e03b5906SMatthew Brost 	     TP_PROTO(struct intel_context *ce),
479e03b5906SMatthew Brost 	     TP_ARGS(ce)
480e03b5906SMatthew Brost );
481e03b5906SMatthew Brost 
482e03b5906SMatthew Brost DEFINE_EVENT(intel_context, intel_context_steal_guc_id,
483e03b5906SMatthew Brost 	     TP_PROTO(struct intel_context *ce),
484e03b5906SMatthew Brost 	     TP_ARGS(ce)
485e03b5906SMatthew Brost );
486e03b5906SMatthew Brost 
487e03b5906SMatthew Brost DEFINE_EVENT(intel_context, intel_context_do_pin,
488e03b5906SMatthew Brost 	     TP_PROTO(struct intel_context *ce),
489e03b5906SMatthew Brost 	     TP_ARGS(ce)
490e03b5906SMatthew Brost );
491e03b5906SMatthew Brost 
492e03b5906SMatthew Brost DEFINE_EVENT(intel_context, intel_context_do_unpin,
493e03b5906SMatthew Brost 	     TP_PROTO(struct intel_context *ce),
494e03b5906SMatthew Brost 	     TP_ARGS(ce)
495e03b5906SMatthew Brost );
496e03b5906SMatthew Brost 
497354d036fSTvrtko Ursulin #else
498354d036fSTvrtko Ursulin #if !defined(TRACE_HEADER_MULTI_READ)
499354d036fSTvrtko Ursulin static inline void
trace_i915_request_guc_submit(struct i915_request * rq)500dbf9da8dSMatthew Brost trace_i915_request_guc_submit(struct i915_request *rq)
501dbf9da8dSMatthew Brost {
502dbf9da8dSMatthew Brost }
503dbf9da8dSMatthew Brost 
504dbf9da8dSMatthew Brost static inline void
trace_i915_request_submit(struct i915_request * rq)505e61e0f51SChris Wilson trace_i915_request_submit(struct i915_request *rq)
506354d036fSTvrtko Ursulin {
507354d036fSTvrtko Ursulin }
508354d036fSTvrtko Ursulin 
509354d036fSTvrtko Ursulin static inline void
trace_i915_request_execute(struct i915_request * rq)510e61e0f51SChris Wilson trace_i915_request_execute(struct i915_request *rq)
511354d036fSTvrtko Ursulin {
512354d036fSTvrtko Ursulin }
513d7d96833STvrtko Ursulin 
514d7d96833STvrtko Ursulin static inline void
trace_i915_request_in(struct i915_request * rq,unsigned int port)515e61e0f51SChris Wilson trace_i915_request_in(struct i915_request *rq, unsigned int port)
516d7d96833STvrtko Ursulin {
517d7d96833STvrtko Ursulin }
518d7d96833STvrtko Ursulin 
519d7d96833STvrtko Ursulin static inline void
trace_i915_request_out(struct i915_request * rq)520e61e0f51SChris Wilson trace_i915_request_out(struct i915_request *rq)
521d7d96833STvrtko Ursulin {
522d7d96833STvrtko Ursulin }
523e03b5906SMatthew Brost 
524e03b5906SMatthew Brost static inline void
trace_intel_context_set_prio(struct intel_context * ce)525ee242ca7SMatthew Brost trace_intel_context_set_prio(struct intel_context *ce)
526ee242ca7SMatthew Brost {
527ee242ca7SMatthew Brost }
528ee242ca7SMatthew Brost 
529ee242ca7SMatthew Brost static inline void
trace_intel_context_reset(struct intel_context * ce)5301e0fd2b5SMatthew Brost trace_intel_context_reset(struct intel_context *ce)
5311e0fd2b5SMatthew Brost {
5321e0fd2b5SMatthew Brost }
5331e0fd2b5SMatthew Brost 
5341e0fd2b5SMatthew Brost static inline void
trace_intel_context_ban(struct intel_context * ce)535ae8ac10dSMatthew Brost trace_intel_context_ban(struct intel_context *ce)
536ae8ac10dSMatthew Brost {
537ae8ac10dSMatthew Brost }
538ae8ac10dSMatthew Brost 
539ae8ac10dSMatthew Brost static inline void
trace_intel_context_register(struct intel_context * ce)540e03b5906SMatthew Brost trace_intel_context_register(struct intel_context *ce)
541e03b5906SMatthew Brost {
542e03b5906SMatthew Brost }
543e03b5906SMatthew Brost 
544e03b5906SMatthew Brost static inline void
trace_intel_context_deregister(struct intel_context * ce)545e03b5906SMatthew Brost trace_intel_context_deregister(struct intel_context *ce)
546e03b5906SMatthew Brost {
547e03b5906SMatthew Brost }
548e03b5906SMatthew Brost 
549e03b5906SMatthew Brost static inline void
trace_intel_context_deregister_done(struct intel_context * ce)550e03b5906SMatthew Brost trace_intel_context_deregister_done(struct intel_context *ce)
551e03b5906SMatthew Brost {
552e03b5906SMatthew Brost }
553e03b5906SMatthew Brost 
554e03b5906SMatthew Brost static inline void
trace_intel_context_sched_enable(struct intel_context * ce)555e03b5906SMatthew Brost trace_intel_context_sched_enable(struct intel_context *ce)
556e03b5906SMatthew Brost {
557e03b5906SMatthew Brost }
558e03b5906SMatthew Brost 
559e03b5906SMatthew Brost static inline void
trace_intel_context_sched_disable(struct intel_context * ce)560e03b5906SMatthew Brost trace_intel_context_sched_disable(struct intel_context *ce)
561e03b5906SMatthew Brost {
562e03b5906SMatthew Brost }
563e03b5906SMatthew Brost 
564e03b5906SMatthew Brost static inline void
trace_intel_context_sched_done(struct intel_context * ce)565e03b5906SMatthew Brost trace_intel_context_sched_done(struct intel_context *ce)
566e03b5906SMatthew Brost {
567e03b5906SMatthew Brost }
568e03b5906SMatthew Brost 
569e03b5906SMatthew Brost static inline void
trace_intel_context_create(struct intel_context * ce)570e03b5906SMatthew Brost trace_intel_context_create(struct intel_context *ce)
571e03b5906SMatthew Brost {
572e03b5906SMatthew Brost }
573e03b5906SMatthew Brost 
574e03b5906SMatthew Brost static inline void
trace_intel_context_fence_release(struct intel_context * ce)575e03b5906SMatthew Brost trace_intel_context_fence_release(struct intel_context *ce)
576e03b5906SMatthew Brost {
577e03b5906SMatthew Brost }
578e03b5906SMatthew Brost 
579e03b5906SMatthew Brost static inline void
trace_intel_context_free(struct intel_context * ce)580e03b5906SMatthew Brost trace_intel_context_free(struct intel_context *ce)
581e03b5906SMatthew Brost {
582e03b5906SMatthew Brost }
583e03b5906SMatthew Brost 
584e03b5906SMatthew Brost static inline void
trace_intel_context_steal_guc_id(struct intel_context * ce)585e03b5906SMatthew Brost trace_intel_context_steal_guc_id(struct intel_context *ce)
586e03b5906SMatthew Brost {
587e03b5906SMatthew Brost }
588e03b5906SMatthew Brost 
589e03b5906SMatthew Brost static inline void
trace_intel_context_do_pin(struct intel_context * ce)590e03b5906SMatthew Brost trace_intel_context_do_pin(struct intel_context *ce)
591e03b5906SMatthew Brost {
592e03b5906SMatthew Brost }
593e03b5906SMatthew Brost 
594e03b5906SMatthew Brost static inline void
trace_intel_context_do_unpin(struct intel_context * ce)595e03b5906SMatthew Brost trace_intel_context_do_unpin(struct intel_context *ce)
596e03b5906SMatthew Brost {
597e03b5906SMatthew Brost }
598354d036fSTvrtko Ursulin #endif
599354d036fSTvrtko Ursulin #endif
600354d036fSTvrtko Ursulin 
601e61e0f51SChris Wilson DEFINE_EVENT(i915_request, i915_request_retire,
602e61e0f51SChris Wilson 	    TP_PROTO(struct i915_request *rq),
603e61e0f51SChris Wilson 	    TP_ARGS(rq)
6041c5d22f7SChris Wilson );
6051c5d22f7SChris Wilson 
606e61e0f51SChris Wilson TRACE_EVENT(i915_request_wait_begin,
607e61e0f51SChris Wilson 	    TP_PROTO(struct i915_request *rq, unsigned int flags),
608e61e0f51SChris Wilson 	    TP_ARGS(rq, flags),
609f3fd3768SBen Widawsky 
610f3fd3768SBen Widawsky 	    TP_STRUCT__entry(
611f3fd3768SBen Widawsky 			     __field(u32, dev)
61257d7116cSTvrtko Ursulin 			     __field(u64, ctx)
6132956e970STvrtko Ursulin 			     __field(u16, class)
6142956e970STvrtko Ursulin 			     __field(u16, instance)
615f3fd3768SBen Widawsky 			     __field(u32, seqno)
61693692502STvrtko Ursulin 			     __field(unsigned int, flags)
617f3fd3768SBen Widawsky 			     ),
618f3fd3768SBen Widawsky 
619f3fd3768SBen Widawsky 	    /* NB: the blocking information is racy since mutex_is_locked
620f3fd3768SBen Widawsky 	     * doesn't check that the current thread holds the lock. The only
621f3fd3768SBen Widawsky 	     * other option would be to pass the boolean information of whether
622f3fd3768SBen Widawsky 	     * or not the class was blocking down through the stack which is
623f3fd3768SBen Widawsky 	     * less desirable.
624f3fd3768SBen Widawsky 	     */
625f3fd3768SBen Widawsky 	    TP_fast_assign(
626*d3f23ab9SAndrzej Hajda 			   __entry->dev = rq->i915->drm.primary->index;
6272956e970STvrtko Ursulin 			   __entry->class = rq->engine->uabi_class;
628750e76b4SChris Wilson 			   __entry->instance = rq->engine->uabi_instance;
629e61e0f51SChris Wilson 			   __entry->ctx = rq->fence.context;
630e61e0f51SChris Wilson 			   __entry->seqno = rq->fence.seqno;
63193692502STvrtko Ursulin 			   __entry->flags = flags;
632f3fd3768SBen Widawsky 			   ),
633f3fd3768SBen Widawsky 
6342935ed53SChris Wilson 	    TP_printk("dev=%u, engine=%u:%u, ctx=%llu, seqno=%u, flags=0x%x",
635f24e74a7STvrtko Ursulin 		      __entry->dev, __entry->class, __entry->instance,
6362935ed53SChris Wilson 		      __entry->ctx, __entry->seqno,
6372956e970STvrtko Ursulin 		      __entry->flags)
6381c5d22f7SChris Wilson );
6391c5d22f7SChris Wilson 
640e61e0f51SChris Wilson DEFINE_EVENT(i915_request, i915_request_wait_end,
641e61e0f51SChris Wilson 	    TP_PROTO(struct i915_request *rq),
642e61e0f51SChris Wilson 	    TP_ARGS(rq)
643903cf20cSLi Zefan );
644903cf20cSLi Zefan 
645ed71f1b4SChris Wilson TRACE_EVENT_CONDITION(i915_reg_rw,
646f0f59a00SVille Syrjälä 	TP_PROTO(bool write, i915_reg_t reg, u64 val, int len, bool trace),
647ba4f01a3SYuanhan Liu 
648ed71f1b4SChris Wilson 	TP_ARGS(write, reg, val, len, trace),
649ed71f1b4SChris Wilson 
650ed71f1b4SChris Wilson 	TP_CONDITION(trace),
651ba4f01a3SYuanhan Liu 
652ba4f01a3SYuanhan Liu 	TP_STRUCT__entry(
653db53a302SChris Wilson 		__field(u64, val)
654db53a302SChris Wilson 		__field(u32, reg)
655db53a302SChris Wilson 		__field(u16, write)
656db53a302SChris Wilson 		__field(u16, len)
657ba4f01a3SYuanhan Liu 		),
658ba4f01a3SYuanhan Liu 
659ba4f01a3SYuanhan Liu 	TP_fast_assign(
660db53a302SChris Wilson 		__entry->val = (u64)val;
661f0f59a00SVille Syrjälä 		__entry->reg = i915_mmio_reg_offset(reg);
662db53a302SChris Wilson 		__entry->write = write;
663ba4f01a3SYuanhan Liu 		__entry->len = len;
664ba4f01a3SYuanhan Liu 		),
665ba4f01a3SYuanhan Liu 
666db53a302SChris Wilson 	TP_printk("%s reg=0x%x, len=%d, val=(0x%x, 0x%x)",
667db53a302SChris Wilson 		__entry->write ? "write" : "read",
668db53a302SChris Wilson 		__entry->reg, __entry->len,
669db53a302SChris Wilson 		(u32)(__entry->val & 0xffffffff),
670db53a302SChris Wilson 		(u32)(__entry->val >> 32))
671ba4f01a3SYuanhan Liu );
672ba4f01a3SYuanhan Liu 
673198c974dSDaniele Ceraolo Spurio /**
674198c974dSDaniele Ceraolo Spurio  * DOC: i915_ppgtt_create and i915_ppgtt_release tracepoints
675198c974dSDaniele Ceraolo Spurio  *
676198c974dSDaniele Ceraolo Spurio  * With full ppgtt enabled each process using drm will allocate at least one
677198c974dSDaniele Ceraolo Spurio  * translation table. With these traces it is possible to keep track of the
678198c974dSDaniele Ceraolo Spurio  * allocation and of the lifetime of the tables; this can be used during
679198c974dSDaniele Ceraolo Spurio  * testing/debug to verify that we are not leaking ppgtts.
680198c974dSDaniele Ceraolo Spurio  * These traces identify the ppgtt through the vm pointer, which is also printed
681198c974dSDaniele Ceraolo Spurio  * by the i915_vma_bind and i915_vma_unbind tracepoints.
682198c974dSDaniele Ceraolo Spurio  */
683198c974dSDaniele Ceraolo Spurio DECLARE_EVENT_CLASS(i915_ppgtt,
684198c974dSDaniele Ceraolo Spurio 	TP_PROTO(struct i915_address_space *vm),
685198c974dSDaniele Ceraolo Spurio 	TP_ARGS(vm),
686198c974dSDaniele Ceraolo Spurio 
687198c974dSDaniele Ceraolo Spurio 	TP_STRUCT__entry(
688198c974dSDaniele Ceraolo Spurio 			__field(struct i915_address_space *, vm)
689198c974dSDaniele Ceraolo Spurio 			__field(u32, dev)
690198c974dSDaniele Ceraolo Spurio 	),
691198c974dSDaniele Ceraolo Spurio 
692198c974dSDaniele Ceraolo Spurio 	TP_fast_assign(
693198c974dSDaniele Ceraolo Spurio 			__entry->vm = vm;
694c6385c94SChris Wilson 			__entry->dev = vm->i915->drm.primary->index;
695198c974dSDaniele Ceraolo Spurio 	),
696198c974dSDaniele Ceraolo Spurio 
697198c974dSDaniele Ceraolo Spurio 	TP_printk("dev=%u, vm=%p", __entry->dev, __entry->vm)
698198c974dSDaniele Ceraolo Spurio )
699198c974dSDaniele Ceraolo Spurio 
700198c974dSDaniele Ceraolo Spurio DEFINE_EVENT(i915_ppgtt, i915_ppgtt_create,
701198c974dSDaniele Ceraolo Spurio 	TP_PROTO(struct i915_address_space *vm),
702198c974dSDaniele Ceraolo Spurio 	TP_ARGS(vm)
703198c974dSDaniele Ceraolo Spurio );
704198c974dSDaniele Ceraolo Spurio 
705198c974dSDaniele Ceraolo Spurio DEFINE_EVENT(i915_ppgtt, i915_ppgtt_release,
706198c974dSDaniele Ceraolo Spurio 	TP_PROTO(struct i915_address_space *vm),
707198c974dSDaniele Ceraolo Spurio 	TP_ARGS(vm)
708198c974dSDaniele Ceraolo Spurio );
709198c974dSDaniele Ceraolo Spurio 
710198c974dSDaniele Ceraolo Spurio /**
711198c974dSDaniele Ceraolo Spurio  * DOC: i915_context_create and i915_context_free tracepoints
712198c974dSDaniele Ceraolo Spurio  *
713198c974dSDaniele Ceraolo Spurio  * These tracepoints are used to track creation and deletion of contexts.
714198c974dSDaniele Ceraolo Spurio  * If full ppgtt is enabled, they also print the address of the vm assigned to
715198c974dSDaniele Ceraolo Spurio  * the context.
716198c974dSDaniele Ceraolo Spurio  */
717198c974dSDaniele Ceraolo Spurio DECLARE_EVENT_CLASS(i915_context,
718e2efd130SChris Wilson 	TP_PROTO(struct i915_gem_context *ctx),
719198c974dSDaniele Ceraolo Spurio 	TP_ARGS(ctx),
720198c974dSDaniele Ceraolo Spurio 
721198c974dSDaniele Ceraolo Spurio 	TP_STRUCT__entry(
722198c974dSDaniele Ceraolo Spurio 			__field(u32, dev)
723e2efd130SChris Wilson 			__field(struct i915_gem_context *, ctx)
724198c974dSDaniele Ceraolo Spurio 			__field(struct i915_address_space *, vm)
725198c974dSDaniele Ceraolo Spurio 	),
726198c974dSDaniele Ceraolo Spurio 
727198c974dSDaniele Ceraolo Spurio 	TP_fast_assign(
72891c8a326SChris Wilson 			__entry->dev = ctx->i915->drm.primary->index;
72999c181a0STvrtko Ursulin 			__entry->ctx = ctx;
7309ec8795eSDaniel Vetter 			__entry->vm = ctx->vm;
731198c974dSDaniele Ceraolo Spurio 	),
732198c974dSDaniele Ceraolo Spurio 
7332935ed53SChris Wilson 	TP_printk("dev=%u, ctx=%p, ctx_vm=%p",
7342935ed53SChris Wilson 		  __entry->dev, __entry->ctx, __entry->vm)
735198c974dSDaniele Ceraolo Spurio )
736198c974dSDaniele Ceraolo Spurio 
737198c974dSDaniele Ceraolo Spurio DEFINE_EVENT(i915_context, i915_context_create,
738e2efd130SChris Wilson 	TP_PROTO(struct i915_gem_context *ctx),
739198c974dSDaniele Ceraolo Spurio 	TP_ARGS(ctx)
740198c974dSDaniele Ceraolo Spurio );
741198c974dSDaniele Ceraolo Spurio 
742198c974dSDaniele Ceraolo Spurio DEFINE_EVENT(i915_context, i915_context_free,
743e2efd130SChris Wilson 	TP_PROTO(struct i915_gem_context *ctx),
744198c974dSDaniele Ceraolo Spurio 	TP_ARGS(ctx)
745198c974dSDaniele Ceraolo Spurio );
746198c974dSDaniele Ceraolo Spurio 
7471c5d22f7SChris Wilson #endif /* _I915_TRACE_H_ */
7481c5d22f7SChris Wilson 
7491c5d22f7SChris Wilson /* This part must be outside protection */
7501c5d22f7SChris Wilson #undef TRACE_INCLUDE_PATH
7514bb71337SJani Nikula #undef TRACE_INCLUDE_FILE
7524e6d7719SThierry Reding #define TRACE_INCLUDE_PATH ../../drivers/gpu/drm/i915
7534bb71337SJani Nikula #define TRACE_INCLUDE_FILE i915_trace
7541c5d22f7SChris Wilson #include <trace/define_trace.h>
755