xref: /openbmc/linux/drivers/gpu/drm/i915/i915_trace.h (revision 1cce8922)
11c5d22f7SChris Wilson #if !defined(_I915_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ)
21c5d22f7SChris Wilson #define _I915_TRACE_H_
31c5d22f7SChris Wilson 
41c5d22f7SChris Wilson #include <linux/stringify.h>
51c5d22f7SChris Wilson #include <linux/types.h>
61c5d22f7SChris Wilson #include <linux/tracepoint.h>
71c5d22f7SChris Wilson 
81c5d22f7SChris Wilson #include <drm/drmP.h>
905394f39SChris Wilson #include "i915_drv.h"
1025ef284aSVille Syrjälä #include "intel_drv.h"
11db53a302SChris Wilson #include "intel_ringbuffer.h"
121c5d22f7SChris Wilson 
131c5d22f7SChris Wilson #undef TRACE_SYSTEM
141c5d22f7SChris Wilson #define TRACE_SYSTEM i915
151c5d22f7SChris Wilson #define TRACE_INCLUDE_FILE i915_trace
161c5d22f7SChris Wilson 
1725ef284aSVille Syrjälä /* pipe updates */
1825ef284aSVille Syrjälä 
1925ef284aSVille Syrjälä TRACE_EVENT(i915_pipe_update_start,
20d637ce3fSJesse Barnes 	    TP_PROTO(struct intel_crtc *crtc),
21d637ce3fSJesse Barnes 	    TP_ARGS(crtc),
2225ef284aSVille Syrjälä 
2325ef284aSVille Syrjälä 	    TP_STRUCT__entry(
2425ef284aSVille Syrjälä 			     __field(enum pipe, pipe)
2525ef284aSVille Syrjälä 			     __field(u32, frame)
2625ef284aSVille Syrjälä 			     __field(u32, scanline)
2725ef284aSVille Syrjälä 			     __field(u32, min)
2825ef284aSVille Syrjälä 			     __field(u32, max)
2925ef284aSVille Syrjälä 			     ),
3025ef284aSVille Syrjälä 
3125ef284aSVille Syrjälä 	    TP_fast_assign(
3225ef284aSVille Syrjälä 			   __entry->pipe = crtc->pipe;
3325ef284aSVille Syrjälä 			   __entry->frame = crtc->base.dev->driver->get_vblank_counter(crtc->base.dev,
3425ef284aSVille Syrjälä 										       crtc->pipe);
3525ef284aSVille Syrjälä 			   __entry->scanline = intel_get_crtc_scanline(crtc);
36d637ce3fSJesse Barnes 			   __entry->min = crtc->debug.min_vbl;
37d637ce3fSJesse Barnes 			   __entry->max = crtc->debug.max_vbl;
3825ef284aSVille Syrjälä 			   ),
3925ef284aSVille Syrjälä 
4025ef284aSVille Syrjälä 	    TP_printk("pipe %c, frame=%u, scanline=%u, min=%u, max=%u",
4125ef284aSVille Syrjälä 		      pipe_name(__entry->pipe), __entry->frame,
4225ef284aSVille Syrjälä 		       __entry->scanline, __entry->min, __entry->max)
4325ef284aSVille Syrjälä );
4425ef284aSVille Syrjälä 
4525ef284aSVille Syrjälä TRACE_EVENT(i915_pipe_update_vblank_evaded,
46d637ce3fSJesse Barnes 	    TP_PROTO(struct intel_crtc *crtc),
47d637ce3fSJesse Barnes 	    TP_ARGS(crtc),
4825ef284aSVille Syrjälä 
4925ef284aSVille Syrjälä 	    TP_STRUCT__entry(
5025ef284aSVille Syrjälä 			     __field(enum pipe, pipe)
5125ef284aSVille Syrjälä 			     __field(u32, frame)
5225ef284aSVille Syrjälä 			     __field(u32, scanline)
5325ef284aSVille Syrjälä 			     __field(u32, min)
5425ef284aSVille Syrjälä 			     __field(u32, max)
5525ef284aSVille Syrjälä 			     ),
5625ef284aSVille Syrjälä 
5725ef284aSVille Syrjälä 	    TP_fast_assign(
5825ef284aSVille Syrjälä 			   __entry->pipe = crtc->pipe;
59d637ce3fSJesse Barnes 			   __entry->frame = crtc->debug.start_vbl_count;
60d637ce3fSJesse Barnes 			   __entry->scanline = crtc->debug.scanline_start;
61d637ce3fSJesse Barnes 			   __entry->min = crtc->debug.min_vbl;
62d637ce3fSJesse Barnes 			   __entry->max = crtc->debug.max_vbl;
6325ef284aSVille Syrjälä 			   ),
6425ef284aSVille Syrjälä 
6525ef284aSVille Syrjälä 	    TP_printk("pipe %c, frame=%u, scanline=%u, min=%u, max=%u",
6625ef284aSVille Syrjälä 		      pipe_name(__entry->pipe), __entry->frame,
6725ef284aSVille Syrjälä 		       __entry->scanline, __entry->min, __entry->max)
6825ef284aSVille Syrjälä );
6925ef284aSVille Syrjälä 
7025ef284aSVille Syrjälä TRACE_EVENT(i915_pipe_update_end,
71d637ce3fSJesse Barnes 	    TP_PROTO(struct intel_crtc *crtc, u32 frame, int scanline_end),
72d637ce3fSJesse Barnes 	    TP_ARGS(crtc, frame, scanline_end),
7325ef284aSVille Syrjälä 
7425ef284aSVille Syrjälä 	    TP_STRUCT__entry(
7525ef284aSVille Syrjälä 			     __field(enum pipe, pipe)
7625ef284aSVille Syrjälä 			     __field(u32, frame)
7725ef284aSVille Syrjälä 			     __field(u32, scanline)
7825ef284aSVille Syrjälä 			     ),
7925ef284aSVille Syrjälä 
8025ef284aSVille Syrjälä 	    TP_fast_assign(
8125ef284aSVille Syrjälä 			   __entry->pipe = crtc->pipe;
8225ef284aSVille Syrjälä 			   __entry->frame = frame;
83d637ce3fSJesse Barnes 			   __entry->scanline = scanline_end;
8425ef284aSVille Syrjälä 			   ),
8525ef284aSVille Syrjälä 
8625ef284aSVille Syrjälä 	    TP_printk("pipe %c, frame=%u, scanline=%u",
8725ef284aSVille Syrjälä 		      pipe_name(__entry->pipe), __entry->frame,
8825ef284aSVille Syrjälä 		      __entry->scanline)
8925ef284aSVille Syrjälä );
9025ef284aSVille Syrjälä 
911c5d22f7SChris Wilson /* object tracking */
921c5d22f7SChris Wilson 
931c5d22f7SChris Wilson TRACE_EVENT(i915_gem_object_create,
9405394f39SChris Wilson 	    TP_PROTO(struct drm_i915_gem_object *obj),
951c5d22f7SChris Wilson 	    TP_ARGS(obj),
961c5d22f7SChris Wilson 
971c5d22f7SChris Wilson 	    TP_STRUCT__entry(
9805394f39SChris Wilson 			     __field(struct drm_i915_gem_object *, obj)
991c5d22f7SChris Wilson 			     __field(u32, size)
1001c5d22f7SChris Wilson 			     ),
1011c5d22f7SChris Wilson 
1021c5d22f7SChris Wilson 	    TP_fast_assign(
1031c5d22f7SChris Wilson 			   __entry->obj = obj;
10405394f39SChris Wilson 			   __entry->size = obj->base.size;
1051c5d22f7SChris Wilson 			   ),
1061c5d22f7SChris Wilson 
1071c5d22f7SChris Wilson 	    TP_printk("obj=%p, size=%u", __entry->obj, __entry->size)
1081c5d22f7SChris Wilson );
1091c5d22f7SChris Wilson 
1103abafa53SChris Wilson TRACE_EVENT(i915_gem_shrink,
1113abafa53SChris Wilson 	    TP_PROTO(struct drm_i915_private *i915, unsigned long target, unsigned flags),
1123abafa53SChris Wilson 	    TP_ARGS(i915, target, flags),
1133abafa53SChris Wilson 
1143abafa53SChris Wilson 	    TP_STRUCT__entry(
1153abafa53SChris Wilson 			     __field(int, dev)
1163abafa53SChris Wilson 			     __field(unsigned long, target)
1173abafa53SChris Wilson 			     __field(unsigned, flags)
1183abafa53SChris Wilson 			     ),
1193abafa53SChris Wilson 
1203abafa53SChris Wilson 	    TP_fast_assign(
12191c8a326SChris Wilson 			   __entry->dev = i915->drm.primary->index;
1223abafa53SChris Wilson 			   __entry->target = target;
1233abafa53SChris Wilson 			   __entry->flags = flags;
1243abafa53SChris Wilson 			   ),
1253abafa53SChris Wilson 
1263abafa53SChris Wilson 	    TP_printk("dev=%d, target=%lu, flags=%x",
1273abafa53SChris Wilson 		      __entry->dev, __entry->target, __entry->flags)
1283abafa53SChris Wilson );
1293abafa53SChris Wilson 
13007fe0b12SBen Widawsky TRACE_EVENT(i915_vma_bind,
1311ec9e26dSDaniel Vetter 	    TP_PROTO(struct i915_vma *vma, unsigned flags),
1321ec9e26dSDaniel Vetter 	    TP_ARGS(vma, flags),
1331c5d22f7SChris Wilson 
1341c5d22f7SChris Wilson 	    TP_STRUCT__entry(
13505394f39SChris Wilson 			     __field(struct drm_i915_gem_object *, obj)
13607fe0b12SBen Widawsky 			     __field(struct i915_address_space *, vm)
13733938714SBen Widawsky 			     __field(u64, offset)
138db53a302SChris Wilson 			     __field(u32, size)
1391ec9e26dSDaniel Vetter 			     __field(unsigned, flags)
1401c5d22f7SChris Wilson 			     ),
1411c5d22f7SChris Wilson 
1421c5d22f7SChris Wilson 	    TP_fast_assign(
14307fe0b12SBen Widawsky 			   __entry->obj = vma->obj;
14407fe0b12SBen Widawsky 			   __entry->vm = vma->vm;
14507fe0b12SBen Widawsky 			   __entry->offset = vma->node.start;
14607fe0b12SBen Widawsky 			   __entry->size = vma->node.size;
1471ec9e26dSDaniel Vetter 			   __entry->flags = flags;
1481c5d22f7SChris Wilson 			   ),
1491c5d22f7SChris Wilson 
15033938714SBen Widawsky 	    TP_printk("obj=%p, offset=%016llx size=%x%s vm=%p",
151db53a302SChris Wilson 		      __entry->obj, __entry->offset, __entry->size,
1521ec9e26dSDaniel Vetter 		      __entry->flags & PIN_MAPPABLE ? ", mappable" : "",
15307fe0b12SBen Widawsky 		      __entry->vm)
1541c5d22f7SChris Wilson );
1551c5d22f7SChris Wilson 
15607fe0b12SBen Widawsky TRACE_EVENT(i915_vma_unbind,
15707fe0b12SBen Widawsky 	    TP_PROTO(struct i915_vma *vma),
15807fe0b12SBen Widawsky 	    TP_ARGS(vma),
159db53a302SChris Wilson 
160db53a302SChris Wilson 	    TP_STRUCT__entry(
161db53a302SChris Wilson 			     __field(struct drm_i915_gem_object *, obj)
16207fe0b12SBen Widawsky 			     __field(struct i915_address_space *, vm)
16333938714SBen Widawsky 			     __field(u64, offset)
164db53a302SChris Wilson 			     __field(u32, size)
165db53a302SChris Wilson 			     ),
166db53a302SChris Wilson 
167db53a302SChris Wilson 	    TP_fast_assign(
16807fe0b12SBen Widawsky 			   __entry->obj = vma->obj;
16907fe0b12SBen Widawsky 			   __entry->vm = vma->vm;
17007fe0b12SBen Widawsky 			   __entry->offset = vma->node.start;
17107fe0b12SBen Widawsky 			   __entry->size = vma->node.size;
172db53a302SChris Wilson 			   ),
173db53a302SChris Wilson 
17433938714SBen Widawsky 	    TP_printk("obj=%p, offset=%016llx size=%x vm=%p",
17507fe0b12SBen Widawsky 		      __entry->obj, __entry->offset, __entry->size, __entry->vm)
176db53a302SChris Wilson );
177db53a302SChris Wilson 
1781c5d22f7SChris Wilson TRACE_EVENT(i915_gem_object_change_domain,
179db53a302SChris Wilson 	    TP_PROTO(struct drm_i915_gem_object *obj, u32 old_read, u32 old_write),
180db53a302SChris Wilson 	    TP_ARGS(obj, old_read, old_write),
1811c5d22f7SChris Wilson 
1821c5d22f7SChris Wilson 	    TP_STRUCT__entry(
18305394f39SChris Wilson 			     __field(struct drm_i915_gem_object *, obj)
1841c5d22f7SChris Wilson 			     __field(u32, read_domains)
1851c5d22f7SChris Wilson 			     __field(u32, write_domain)
1861c5d22f7SChris Wilson 			     ),
1871c5d22f7SChris Wilson 
1881c5d22f7SChris Wilson 	    TP_fast_assign(
1891c5d22f7SChris Wilson 			   __entry->obj = obj;
190db53a302SChris Wilson 			   __entry->read_domains = obj->base.read_domains | (old_read << 16);
191db53a302SChris Wilson 			   __entry->write_domain = obj->base.write_domain | (old_write << 16);
1921c5d22f7SChris Wilson 			   ),
1931c5d22f7SChris Wilson 
194db53a302SChris Wilson 	    TP_printk("obj=%p, read=%02x=>%02x, write=%02x=>%02x",
1951c5d22f7SChris Wilson 		      __entry->obj,
196db53a302SChris Wilson 		      __entry->read_domains >> 16,
197db53a302SChris Wilson 		      __entry->read_domains & 0xffff,
198db53a302SChris Wilson 		      __entry->write_domain >> 16,
199db53a302SChris Wilson 		      __entry->write_domain & 0xffff)
200db53a302SChris Wilson );
201db53a302SChris Wilson 
202db53a302SChris Wilson TRACE_EVENT(i915_gem_object_pwrite,
203db53a302SChris Wilson 	    TP_PROTO(struct drm_i915_gem_object *obj, u32 offset, u32 len),
204db53a302SChris Wilson 	    TP_ARGS(obj, offset, len),
205db53a302SChris Wilson 
206db53a302SChris Wilson 	    TP_STRUCT__entry(
207db53a302SChris Wilson 			     __field(struct drm_i915_gem_object *, obj)
208db53a302SChris Wilson 			     __field(u32, offset)
209db53a302SChris Wilson 			     __field(u32, len)
210db53a302SChris Wilson 			     ),
211db53a302SChris Wilson 
212db53a302SChris Wilson 	    TP_fast_assign(
213db53a302SChris Wilson 			   __entry->obj = obj;
214db53a302SChris Wilson 			   __entry->offset = offset;
215db53a302SChris Wilson 			   __entry->len = len;
216db53a302SChris Wilson 			   ),
217db53a302SChris Wilson 
218db53a302SChris Wilson 	    TP_printk("obj=%p, offset=%u, len=%u",
219db53a302SChris Wilson 		      __entry->obj, __entry->offset, __entry->len)
220db53a302SChris Wilson );
221db53a302SChris Wilson 
222db53a302SChris Wilson TRACE_EVENT(i915_gem_object_pread,
223db53a302SChris Wilson 	    TP_PROTO(struct drm_i915_gem_object *obj, u32 offset, u32 len),
224db53a302SChris Wilson 	    TP_ARGS(obj, offset, len),
225db53a302SChris Wilson 
226db53a302SChris Wilson 	    TP_STRUCT__entry(
227db53a302SChris Wilson 			     __field(struct drm_i915_gem_object *, obj)
228db53a302SChris Wilson 			     __field(u32, offset)
229db53a302SChris Wilson 			     __field(u32, len)
230db53a302SChris Wilson 			     ),
231db53a302SChris Wilson 
232db53a302SChris Wilson 	    TP_fast_assign(
233db53a302SChris Wilson 			   __entry->obj = obj;
234db53a302SChris Wilson 			   __entry->offset = offset;
235db53a302SChris Wilson 			   __entry->len = len;
236db53a302SChris Wilson 			   ),
237db53a302SChris Wilson 
238db53a302SChris Wilson 	    TP_printk("obj=%p, offset=%u, len=%u",
239db53a302SChris Wilson 		      __entry->obj, __entry->offset, __entry->len)
240db53a302SChris Wilson );
241db53a302SChris Wilson 
242db53a302SChris Wilson TRACE_EVENT(i915_gem_object_fault,
243db53a302SChris Wilson 	    TP_PROTO(struct drm_i915_gem_object *obj, u32 index, bool gtt, bool write),
244db53a302SChris Wilson 	    TP_ARGS(obj, index, gtt, write),
245db53a302SChris Wilson 
246db53a302SChris Wilson 	    TP_STRUCT__entry(
247db53a302SChris Wilson 			     __field(struct drm_i915_gem_object *, obj)
248db53a302SChris Wilson 			     __field(u32, index)
249db53a302SChris Wilson 			     __field(bool, gtt)
250db53a302SChris Wilson 			     __field(bool, write)
251db53a302SChris Wilson 			     ),
252db53a302SChris Wilson 
253db53a302SChris Wilson 	    TP_fast_assign(
254db53a302SChris Wilson 			   __entry->obj = obj;
255db53a302SChris Wilson 			   __entry->index = index;
256db53a302SChris Wilson 			   __entry->gtt = gtt;
257db53a302SChris Wilson 			   __entry->write = write;
258db53a302SChris Wilson 			   ),
259db53a302SChris Wilson 
260db53a302SChris Wilson 	    TP_printk("obj=%p, %s index=%u %s",
261db53a302SChris Wilson 		      __entry->obj,
262db53a302SChris Wilson 		      __entry->gtt ? "GTT" : "CPU",
263db53a302SChris Wilson 		      __entry->index,
264db53a302SChris Wilson 		      __entry->write ? ", writable" : "")
2651c5d22f7SChris Wilson );
2661c5d22f7SChris Wilson 
267903cf20cSLi Zefan DECLARE_EVENT_CLASS(i915_gem_object,
26805394f39SChris Wilson 	    TP_PROTO(struct drm_i915_gem_object *obj),
2691c5d22f7SChris Wilson 	    TP_ARGS(obj),
2701c5d22f7SChris Wilson 
2711c5d22f7SChris Wilson 	    TP_STRUCT__entry(
27205394f39SChris Wilson 			     __field(struct drm_i915_gem_object *, obj)
2731c5d22f7SChris Wilson 			     ),
2741c5d22f7SChris Wilson 
2751c5d22f7SChris Wilson 	    TP_fast_assign(
2761c5d22f7SChris Wilson 			   __entry->obj = obj;
2771c5d22f7SChris Wilson 			   ),
2781c5d22f7SChris Wilson 
2791c5d22f7SChris Wilson 	    TP_printk("obj=%p", __entry->obj)
2801c5d22f7SChris Wilson );
2811c5d22f7SChris Wilson 
282f41275e8SLi Zefan DEFINE_EVENT(i915_gem_object, i915_gem_object_clflush,
28305394f39SChris Wilson 	     TP_PROTO(struct drm_i915_gem_object *obj),
284903cf20cSLi Zefan 	     TP_ARGS(obj)
285903cf20cSLi Zefan );
2861c5d22f7SChris Wilson 
287903cf20cSLi Zefan DEFINE_EVENT(i915_gem_object, i915_gem_object_destroy,
28805394f39SChris Wilson 	    TP_PROTO(struct drm_i915_gem_object *obj),
289903cf20cSLi Zefan 	    TP_ARGS(obj)
2901c5d22f7SChris Wilson );
2911c5d22f7SChris Wilson 
292db53a302SChris Wilson TRACE_EVENT(i915_gem_evict,
293e522ac23SChris Wilson 	    TP_PROTO(struct i915_address_space *vm, u32 size, u32 align, unsigned int flags),
294e522ac23SChris Wilson 	    TP_ARGS(vm, size, align, flags),
2951c5d22f7SChris Wilson 
2961c5d22f7SChris Wilson 	    TP_STRUCT__entry(
2974f49be54SChris Wilson 			     __field(u32, dev)
298e522ac23SChris Wilson 			     __field(struct i915_address_space *, vm)
299db53a302SChris Wilson 			     __field(u32, size)
300db53a302SChris Wilson 			     __field(u32, align)
301e522ac23SChris Wilson 			     __field(unsigned int, flags)
3021c5d22f7SChris Wilson 			    ),
3031c5d22f7SChris Wilson 
3041c5d22f7SChris Wilson 	    TP_fast_assign(
305c6385c94SChris Wilson 			   __entry->dev = vm->i915->drm.primary->index;
306e522ac23SChris Wilson 			   __entry->vm = vm;
307db53a302SChris Wilson 			   __entry->size = size;
308db53a302SChris Wilson 			   __entry->align = align;
3091ec9e26dSDaniel Vetter 			   __entry->flags = flags;
3101c5d22f7SChris Wilson 			  ),
3111c5d22f7SChris Wilson 
312e522ac23SChris Wilson 	    TP_printk("dev=%d, vm=%p, size=%d, align=%d %s",
313e522ac23SChris Wilson 		      __entry->dev, __entry->vm, __entry->size, __entry->align,
3141ec9e26dSDaniel Vetter 		      __entry->flags & PIN_MAPPABLE ? ", mappable" : "")
3151c5d22f7SChris Wilson );
3161c5d22f7SChris Wilson 
317db53a302SChris Wilson TRACE_EVENT(i915_gem_evict_everything,
3186c085a72SChris Wilson 	    TP_PROTO(struct drm_device *dev),
3196c085a72SChris Wilson 	    TP_ARGS(dev),
3201c5d22f7SChris Wilson 
3211c5d22f7SChris Wilson 	    TP_STRUCT__entry(
3224f49be54SChris Wilson 			     __field(u32, dev)
3231c5d22f7SChris Wilson 			    ),
3241c5d22f7SChris Wilson 
3251c5d22f7SChris Wilson 	    TP_fast_assign(
3264f49be54SChris Wilson 			   __entry->dev = dev->primary->index;
3271c5d22f7SChris Wilson 			  ),
3281c5d22f7SChris Wilson 
3296c085a72SChris Wilson 	    TP_printk("dev=%d", __entry->dev)
330db53a302SChris Wilson );
331db53a302SChris Wilson 
332bcccff84SBen Widawsky TRACE_EVENT(i915_gem_evict_vm,
333bcccff84SBen Widawsky 	    TP_PROTO(struct i915_address_space *vm),
334bcccff84SBen Widawsky 	    TP_ARGS(vm),
335bcccff84SBen Widawsky 
336bcccff84SBen Widawsky 	    TP_STRUCT__entry(
3379297ebf2SSteven Rostedt 			     __field(u32, dev)
338bcccff84SBen Widawsky 			     __field(struct i915_address_space *, vm)
339bcccff84SBen Widawsky 			    ),
340bcccff84SBen Widawsky 
341bcccff84SBen Widawsky 	    TP_fast_assign(
342c6385c94SChris Wilson 			   __entry->dev = vm->i915->drm.primary->index;
343bcccff84SBen Widawsky 			   __entry->vm = vm;
344bcccff84SBen Widawsky 			  ),
345bcccff84SBen Widawsky 
3469297ebf2SSteven Rostedt 	    TP_printk("dev=%d, vm=%p", __entry->dev, __entry->vm)
347bcccff84SBen Widawsky );
348bcccff84SBen Widawsky 
349625d988aSChris Wilson TRACE_EVENT(i915_gem_evict_node,
350625d988aSChris Wilson 	    TP_PROTO(struct i915_address_space *vm, struct drm_mm_node *node, unsigned int flags),
351625d988aSChris Wilson 	    TP_ARGS(vm, node, flags),
352172ae5b4SChris Wilson 
353172ae5b4SChris Wilson 	    TP_STRUCT__entry(
354172ae5b4SChris Wilson 			     __field(u32, dev)
355172ae5b4SChris Wilson 			     __field(struct i915_address_space *, vm)
356172ae5b4SChris Wilson 			     __field(u64, start)
357172ae5b4SChris Wilson 			     __field(u64, size)
358172ae5b4SChris Wilson 			     __field(unsigned long, color)
359172ae5b4SChris Wilson 			     __field(unsigned int, flags)
360172ae5b4SChris Wilson 			    ),
361172ae5b4SChris Wilson 
362172ae5b4SChris Wilson 	    TP_fast_assign(
363625d988aSChris Wilson 			   __entry->dev = vm->i915->drm.primary->index;
364625d988aSChris Wilson 			   __entry->vm = vm;
365625d988aSChris Wilson 			   __entry->start = node->start;
366625d988aSChris Wilson 			   __entry->size = node->size;
367625d988aSChris Wilson 			   __entry->color = node->color;
368172ae5b4SChris Wilson 			   __entry->flags = flags;
369172ae5b4SChris Wilson 			  ),
370172ae5b4SChris Wilson 
371172ae5b4SChris Wilson 	    TP_printk("dev=%d, vm=%p, start=%llx size=%llx, color=%lx, flags=%x",
372172ae5b4SChris Wilson 		      __entry->dev, __entry->vm,
373172ae5b4SChris Wilson 		      __entry->start, __entry->size,
374172ae5b4SChris Wilson 		      __entry->color, __entry->flags)
375172ae5b4SChris Wilson );
376172ae5b4SChris Wilson 
377b52b89daSChris Wilson TRACE_EVENT(i915_gem_ring_sync_to,
3788e637178SChris Wilson 	    TP_PROTO(struct drm_i915_gem_request *to,
3798e637178SChris Wilson 		     struct drm_i915_gem_request *from),
3808e637178SChris Wilson 	    TP_ARGS(to, from),
381b52b89daSChris Wilson 
382b52b89daSChris Wilson 	    TP_STRUCT__entry(
383b52b89daSChris Wilson 			     __field(u32, dev)
384b52b89daSChris Wilson 			     __field(u32, sync_from)
385b52b89daSChris Wilson 			     __field(u32, sync_to)
386b52b89daSChris Wilson 			     __field(u32, seqno)
387b52b89daSChris Wilson 			     ),
388b52b89daSChris Wilson 
389b52b89daSChris Wilson 	    TP_fast_assign(
39091c8a326SChris Wilson 			   __entry->dev = from->i915->drm.primary->index;
3918e637178SChris Wilson 			   __entry->sync_from = from->engine->id;
3928e637178SChris Wilson 			   __entry->sync_to = to->engine->id;
39365e4760eSChris Wilson 			   __entry->seqno = from->global_seqno;
394b52b89daSChris Wilson 			   ),
395b52b89daSChris Wilson 
396b52b89daSChris Wilson 	    TP_printk("dev=%u, sync-from=%u, sync-to=%u, seqno=%u",
397b52b89daSChris Wilson 		      __entry->dev,
398b52b89daSChris Wilson 		      __entry->sync_from, __entry->sync_to,
399b52b89daSChris Wilson 		      __entry->seqno)
400b52b89daSChris Wilson );
401b52b89daSChris Wilson 
4021cce8922STvrtko Ursulin TRACE_EVENT(i915_gem_request_queue,
40374328ee5SJohn Harrison 	    TP_PROTO(struct drm_i915_gem_request *req, u32 flags),
40474328ee5SJohn Harrison 	    TP_ARGS(req, flags),
405db53a302SChris Wilson 
406db53a302SChris Wilson 	    TP_STRUCT__entry(
407db53a302SChris Wilson 			     __field(u32, dev)
408db53a302SChris Wilson 			     __field(u32, ring)
4091cce8922STvrtko Ursulin 			     __field(u32, ctx)
410db53a302SChris Wilson 			     __field(u32, seqno)
411d7d4eeddSChris Wilson 			     __field(u32, flags)
412db53a302SChris Wilson 			     ),
413db53a302SChris Wilson 
414db53a302SChris Wilson 	    TP_fast_assign(
41591c8a326SChris Wilson 			   __entry->dev = req->i915->drm.primary->index;
416c033666aSChris Wilson 			   __entry->ring = req->engine->id;
4171cce8922STvrtko Ursulin 			   __entry->ctx = req->ctx->hw_id;
4181cce8922STvrtko Ursulin 			   __entry->seqno = req->fence.seqno;
419d7d4eeddSChris Wilson 			   __entry->flags = flags;
420db53a302SChris Wilson 			   ),
421db53a302SChris Wilson 
4221cce8922STvrtko Ursulin 	    TP_printk("dev=%u, ring=%u, ctx=%u, seqno=%u, flags=0x%x",
4231cce8922STvrtko Ursulin 		      __entry->dev, __entry->ring, __entry->ctx, __entry->seqno,
4241cce8922STvrtko Ursulin 		      __entry->flags)
425db53a302SChris Wilson );
426db53a302SChris Wilson 
427db53a302SChris Wilson TRACE_EVENT(i915_gem_ring_flush,
428a84c3ae1SJohn Harrison 	    TP_PROTO(struct drm_i915_gem_request *req, u32 invalidate, u32 flush),
429a84c3ae1SJohn Harrison 	    TP_ARGS(req, invalidate, flush),
430db53a302SChris Wilson 
431db53a302SChris Wilson 	    TP_STRUCT__entry(
432db53a302SChris Wilson 			     __field(u32, dev)
433db53a302SChris Wilson 			     __field(u32, ring)
434db53a302SChris Wilson 			     __field(u32, invalidate)
435db53a302SChris Wilson 			     __field(u32, flush)
436db53a302SChris Wilson 			     ),
437db53a302SChris Wilson 
438db53a302SChris Wilson 	    TP_fast_assign(
43991c8a326SChris Wilson 			   __entry->dev = req->i915->drm.primary->index;
4404a570db5STvrtko Ursulin 			   __entry->ring = req->engine->id;
441db53a302SChris Wilson 			   __entry->invalidate = invalidate;
442db53a302SChris Wilson 			   __entry->flush = flush;
443db53a302SChris Wilson 			   ),
444db53a302SChris Wilson 
445db53a302SChris Wilson 	    TP_printk("dev=%u, ring=%x, invalidate=%04x, flush=%04x",
446db53a302SChris Wilson 		      __entry->dev, __entry->ring,
447db53a302SChris Wilson 		      __entry->invalidate, __entry->flush)
4481c5d22f7SChris Wilson );
4491c5d22f7SChris Wilson 
450903cf20cSLi Zefan DECLARE_EVENT_CLASS(i915_gem_request,
45174328ee5SJohn Harrison 	    TP_PROTO(struct drm_i915_gem_request *req),
45274328ee5SJohn Harrison 	    TP_ARGS(req),
4531c5d22f7SChris Wilson 
4541c5d22f7SChris Wilson 	    TP_STRUCT__entry(
4554f49be54SChris Wilson 			     __field(u32, dev)
456e235b530STvrtko Ursulin 			     __field(u32, ctx)
457db53a302SChris Wilson 			     __field(u32, ring)
4581c5d22f7SChris Wilson 			     __field(u32, seqno)
459e235b530STvrtko Ursulin 			     __field(u32, global)
4601c5d22f7SChris Wilson 			     ),
4611c5d22f7SChris Wilson 
4621c5d22f7SChris Wilson 	    TP_fast_assign(
46391c8a326SChris Wilson 			   __entry->dev = req->i915->drm.primary->index;
464e235b530STvrtko Ursulin 			   __entry->ctx = req->ctx->hw_id;
465c033666aSChris Wilson 			   __entry->ring = req->engine->id;
466e235b530STvrtko Ursulin 			   __entry->seqno = req->fence.seqno;
467e235b530STvrtko Ursulin 			   __entry->global = req->global_seqno;
4681c5d22f7SChris Wilson 			   ),
4691c5d22f7SChris Wilson 
470e235b530STvrtko Ursulin 	    TP_printk("dev=%u, ring=%u, ctx=%u, seqno=%u, global=%u",
471e235b530STvrtko Ursulin 		      __entry->dev, __entry->ring, __entry->ctx, __entry->seqno,
472e235b530STvrtko Ursulin 		      __entry->global)
473db53a302SChris Wilson );
474db53a302SChris Wilson 
475db53a302SChris Wilson DEFINE_EVENT(i915_gem_request, i915_gem_request_add,
47674328ee5SJohn Harrison 	    TP_PROTO(struct drm_i915_gem_request *req),
47774328ee5SJohn Harrison 	    TP_ARGS(req)
4781c5d22f7SChris Wilson );
4791c5d22f7SChris Wilson 
480bcfcc8baSJohn Harrison TRACE_EVENT(i915_gem_request_notify,
4814a570db5STvrtko Ursulin 	    TP_PROTO(struct intel_engine_cs *engine),
4824a570db5STvrtko Ursulin 	    TP_ARGS(engine),
483814e9b57SChris Wilson 
484814e9b57SChris Wilson 	    TP_STRUCT__entry(
485814e9b57SChris Wilson 			     __field(u32, dev)
486814e9b57SChris Wilson 			     __field(u32, ring)
487814e9b57SChris Wilson 			     __field(u32, seqno)
488814e9b57SChris Wilson 			     ),
489814e9b57SChris Wilson 
490814e9b57SChris Wilson 	    TP_fast_assign(
49191c8a326SChris Wilson 			   __entry->dev = engine->i915->drm.primary->index;
4924a570db5STvrtko Ursulin 			   __entry->ring = engine->id;
4931b7744e7SChris Wilson 			   __entry->seqno = intel_engine_get_seqno(engine);
494814e9b57SChris Wilson 			   ),
495814e9b57SChris Wilson 
496814e9b57SChris Wilson 	    TP_printk("dev=%u, ring=%u, seqno=%u",
497814e9b57SChris Wilson 		      __entry->dev, __entry->ring, __entry->seqno)
4981c5d22f7SChris Wilson );
4991c5d22f7SChris Wilson 
500903cf20cSLi Zefan DEFINE_EVENT(i915_gem_request, i915_gem_request_retire,
50174328ee5SJohn Harrison 	    TP_PROTO(struct drm_i915_gem_request *req),
50274328ee5SJohn Harrison 	    TP_ARGS(req)
5031c5d22f7SChris Wilson );
5041c5d22f7SChris Wilson 
505bcfcc8baSJohn Harrison DEFINE_EVENT(i915_gem_request, i915_gem_request_complete,
506bcfcc8baSJohn Harrison 	    TP_PROTO(struct drm_i915_gem_request *req),
507bcfcc8baSJohn Harrison 	    TP_ARGS(req)
508bcfcc8baSJohn Harrison );
509bcfcc8baSJohn Harrison 
510f3fd3768SBen Widawsky TRACE_EVENT(i915_gem_request_wait_begin,
51174328ee5SJohn Harrison 	    TP_PROTO(struct drm_i915_gem_request *req),
51274328ee5SJohn Harrison 	    TP_ARGS(req),
513f3fd3768SBen Widawsky 
514f3fd3768SBen Widawsky 	    TP_STRUCT__entry(
515f3fd3768SBen Widawsky 			     __field(u32, dev)
516f3fd3768SBen Widawsky 			     __field(u32, ring)
517f3fd3768SBen Widawsky 			     __field(u32, seqno)
518f3fd3768SBen Widawsky 			     __field(bool, blocking)
519f3fd3768SBen Widawsky 			     ),
520f3fd3768SBen Widawsky 
521f3fd3768SBen Widawsky 	    /* NB: the blocking information is racy since mutex_is_locked
522f3fd3768SBen Widawsky 	     * doesn't check that the current thread holds the lock. The only
523f3fd3768SBen Widawsky 	     * other option would be to pass the boolean information of whether
524f3fd3768SBen Widawsky 	     * or not the class was blocking down through the stack which is
525f3fd3768SBen Widawsky 	     * less desirable.
526f3fd3768SBen Widawsky 	     */
527f3fd3768SBen Widawsky 	    TP_fast_assign(
52891c8a326SChris Wilson 			   __entry->dev = req->i915->drm.primary->index;
529c033666aSChris Wilson 			   __entry->ring = req->engine->id;
53065e4760eSChris Wilson 			   __entry->seqno = req->global_seqno;
53174328ee5SJohn Harrison 			   __entry->blocking =
53291c8a326SChris Wilson 				     mutex_is_locked(&req->i915->drm.struct_mutex);
533f3fd3768SBen Widawsky 			   ),
534f3fd3768SBen Widawsky 
535d7b9ca2fSChris Wilson 	    TP_printk("dev=%u, ring=%u, seqno=%u, blocking=%s",
536d7b9ca2fSChris Wilson 		      __entry->dev, __entry->ring,
537bcfcc8baSJohn Harrison 		      __entry->seqno, __entry->blocking ?  "yes (NB)" : "no")
5381c5d22f7SChris Wilson );
5391c5d22f7SChris Wilson 
540903cf20cSLi Zefan DEFINE_EVENT(i915_gem_request, i915_gem_request_wait_end,
54174328ee5SJohn Harrison 	    TP_PROTO(struct drm_i915_gem_request *req),
54274328ee5SJohn Harrison 	    TP_ARGS(req)
543903cf20cSLi Zefan );
544903cf20cSLi Zefan 
545e5510facSJesse Barnes TRACE_EVENT(i915_flip_request,
54605394f39SChris Wilson 	    TP_PROTO(int plane, struct drm_i915_gem_object *obj),
547e5510facSJesse Barnes 
548e5510facSJesse Barnes 	    TP_ARGS(plane, obj),
549e5510facSJesse Barnes 
550e5510facSJesse Barnes 	    TP_STRUCT__entry(
551e5510facSJesse Barnes 		    __field(int, plane)
55205394f39SChris Wilson 		    __field(struct drm_i915_gem_object *, obj)
553e5510facSJesse Barnes 		    ),
554e5510facSJesse Barnes 
555e5510facSJesse Barnes 	    TP_fast_assign(
556e5510facSJesse Barnes 		    __entry->plane = plane;
557e5510facSJesse Barnes 		    __entry->obj = obj;
558e5510facSJesse Barnes 		    ),
559e5510facSJesse Barnes 
560e5510facSJesse Barnes 	    TP_printk("plane=%d, obj=%p", __entry->plane, __entry->obj)
561e5510facSJesse Barnes );
562e5510facSJesse Barnes 
563e5510facSJesse Barnes TRACE_EVENT(i915_flip_complete,
56405394f39SChris Wilson 	    TP_PROTO(int plane, struct drm_i915_gem_object *obj),
565e5510facSJesse Barnes 
566e5510facSJesse Barnes 	    TP_ARGS(plane, obj),
567e5510facSJesse Barnes 
568e5510facSJesse Barnes 	    TP_STRUCT__entry(
569e5510facSJesse Barnes 		    __field(int, plane)
57005394f39SChris Wilson 		    __field(struct drm_i915_gem_object *, obj)
571e5510facSJesse Barnes 		    ),
572e5510facSJesse Barnes 
573e5510facSJesse Barnes 	    TP_fast_assign(
574e5510facSJesse Barnes 		    __entry->plane = plane;
575e5510facSJesse Barnes 		    __entry->obj = obj;
576e5510facSJesse Barnes 		    ),
577e5510facSJesse Barnes 
578e5510facSJesse Barnes 	    TP_printk("plane=%d, obj=%p", __entry->plane, __entry->obj)
579e5510facSJesse Barnes );
580e5510facSJesse Barnes 
581ed71f1b4SChris Wilson TRACE_EVENT_CONDITION(i915_reg_rw,
582f0f59a00SVille Syrjälä 	TP_PROTO(bool write, i915_reg_t reg, u64 val, int len, bool trace),
583ba4f01a3SYuanhan Liu 
584ed71f1b4SChris Wilson 	TP_ARGS(write, reg, val, len, trace),
585ed71f1b4SChris Wilson 
586ed71f1b4SChris Wilson 	TP_CONDITION(trace),
587ba4f01a3SYuanhan Liu 
588ba4f01a3SYuanhan Liu 	TP_STRUCT__entry(
589db53a302SChris Wilson 		__field(u64, val)
590db53a302SChris Wilson 		__field(u32, reg)
591db53a302SChris Wilson 		__field(u16, write)
592db53a302SChris Wilson 		__field(u16, len)
593ba4f01a3SYuanhan Liu 		),
594ba4f01a3SYuanhan Liu 
595ba4f01a3SYuanhan Liu 	TP_fast_assign(
596db53a302SChris Wilson 		__entry->val = (u64)val;
597f0f59a00SVille Syrjälä 		__entry->reg = i915_mmio_reg_offset(reg);
598db53a302SChris Wilson 		__entry->write = write;
599ba4f01a3SYuanhan Liu 		__entry->len = len;
600ba4f01a3SYuanhan Liu 		),
601ba4f01a3SYuanhan Liu 
602db53a302SChris Wilson 	TP_printk("%s reg=0x%x, len=%d, val=(0x%x, 0x%x)",
603db53a302SChris Wilson 		__entry->write ? "write" : "read",
604db53a302SChris Wilson 		__entry->reg, __entry->len,
605db53a302SChris Wilson 		(u32)(__entry->val & 0xffffffff),
606db53a302SChris Wilson 		(u32)(__entry->val >> 32))
607ba4f01a3SYuanhan Liu );
608ba4f01a3SYuanhan Liu 
609be2cde9aSDaniel Vetter TRACE_EVENT(intel_gpu_freq_change,
610be2cde9aSDaniel Vetter 	    TP_PROTO(u32 freq),
611be2cde9aSDaniel Vetter 	    TP_ARGS(freq),
612be2cde9aSDaniel Vetter 
613be2cde9aSDaniel Vetter 	    TP_STRUCT__entry(
614be2cde9aSDaniel Vetter 			     __field(u32, freq)
615be2cde9aSDaniel Vetter 			     ),
616be2cde9aSDaniel Vetter 
617be2cde9aSDaniel Vetter 	    TP_fast_assign(
618be2cde9aSDaniel Vetter 			   __entry->freq = freq;
619be2cde9aSDaniel Vetter 			   ),
620be2cde9aSDaniel Vetter 
621be2cde9aSDaniel Vetter 	    TP_printk("new_freq=%u", __entry->freq)
622be2cde9aSDaniel Vetter );
623be2cde9aSDaniel Vetter 
624198c974dSDaniele Ceraolo Spurio /**
625198c974dSDaniele Ceraolo Spurio  * DOC: i915_ppgtt_create and i915_ppgtt_release tracepoints
626198c974dSDaniele Ceraolo Spurio  *
627198c974dSDaniele Ceraolo Spurio  * With full ppgtt enabled each process using drm will allocate at least one
628198c974dSDaniele Ceraolo Spurio  * translation table. With these traces it is possible to keep track of the
629198c974dSDaniele Ceraolo Spurio  * allocation and of the lifetime of the tables; this can be used during
630198c974dSDaniele Ceraolo Spurio  * testing/debug to verify that we are not leaking ppgtts.
631198c974dSDaniele Ceraolo Spurio  * These traces identify the ppgtt through the vm pointer, which is also printed
632198c974dSDaniele Ceraolo Spurio  * by the i915_vma_bind and i915_vma_unbind tracepoints.
633198c974dSDaniele Ceraolo Spurio  */
634198c974dSDaniele Ceraolo Spurio DECLARE_EVENT_CLASS(i915_ppgtt,
635198c974dSDaniele Ceraolo Spurio 	TP_PROTO(struct i915_address_space *vm),
636198c974dSDaniele Ceraolo Spurio 	TP_ARGS(vm),
637198c974dSDaniele Ceraolo Spurio 
638198c974dSDaniele Ceraolo Spurio 	TP_STRUCT__entry(
639198c974dSDaniele Ceraolo Spurio 			__field(struct i915_address_space *, vm)
640198c974dSDaniele Ceraolo Spurio 			__field(u32, dev)
641198c974dSDaniele Ceraolo Spurio 	),
642198c974dSDaniele Ceraolo Spurio 
643198c974dSDaniele Ceraolo Spurio 	TP_fast_assign(
644198c974dSDaniele Ceraolo Spurio 			__entry->vm = vm;
645c6385c94SChris Wilson 			__entry->dev = vm->i915->drm.primary->index;
646198c974dSDaniele Ceraolo Spurio 	),
647198c974dSDaniele Ceraolo Spurio 
648198c974dSDaniele Ceraolo Spurio 	TP_printk("dev=%u, vm=%p", __entry->dev, __entry->vm)
649198c974dSDaniele Ceraolo Spurio )
650198c974dSDaniele Ceraolo Spurio 
651198c974dSDaniele Ceraolo Spurio DEFINE_EVENT(i915_ppgtt, i915_ppgtt_create,
652198c974dSDaniele Ceraolo Spurio 	TP_PROTO(struct i915_address_space *vm),
653198c974dSDaniele Ceraolo Spurio 	TP_ARGS(vm)
654198c974dSDaniele Ceraolo Spurio );
655198c974dSDaniele Ceraolo Spurio 
656198c974dSDaniele Ceraolo Spurio DEFINE_EVENT(i915_ppgtt, i915_ppgtt_release,
657198c974dSDaniele Ceraolo Spurio 	TP_PROTO(struct i915_address_space *vm),
658198c974dSDaniele Ceraolo Spurio 	TP_ARGS(vm)
659198c974dSDaniele Ceraolo Spurio );
660198c974dSDaniele Ceraolo Spurio 
661198c974dSDaniele Ceraolo Spurio /**
662198c974dSDaniele Ceraolo Spurio  * DOC: i915_context_create and i915_context_free tracepoints
663198c974dSDaniele Ceraolo Spurio  *
664198c974dSDaniele Ceraolo Spurio  * These tracepoints are used to track creation and deletion of contexts.
665198c974dSDaniele Ceraolo Spurio  * If full ppgtt is enabled, they also print the address of the vm assigned to
666198c974dSDaniele Ceraolo Spurio  * the context.
667198c974dSDaniele Ceraolo Spurio  */
668198c974dSDaniele Ceraolo Spurio DECLARE_EVENT_CLASS(i915_context,
669e2efd130SChris Wilson 	TP_PROTO(struct i915_gem_context *ctx),
670198c974dSDaniele Ceraolo Spurio 	TP_ARGS(ctx),
671198c974dSDaniele Ceraolo Spurio 
672198c974dSDaniele Ceraolo Spurio 	TP_STRUCT__entry(
673198c974dSDaniele Ceraolo Spurio 			__field(u32, dev)
674e2efd130SChris Wilson 			__field(struct i915_gem_context *, ctx)
675198c974dSDaniele Ceraolo Spurio 			__field(struct i915_address_space *, vm)
676198c974dSDaniele Ceraolo Spurio 	),
677198c974dSDaniele Ceraolo Spurio 
678198c974dSDaniele Ceraolo Spurio 	TP_fast_assign(
679198c974dSDaniele Ceraolo Spurio 			__entry->ctx = ctx;
680198c974dSDaniele Ceraolo Spurio 			__entry->vm = ctx->ppgtt ? &ctx->ppgtt->base : NULL;
68191c8a326SChris Wilson 			__entry->dev = ctx->i915->drm.primary->index;
682198c974dSDaniele Ceraolo Spurio 	),
683198c974dSDaniele Ceraolo Spurio 
684198c974dSDaniele Ceraolo Spurio 	TP_printk("dev=%u, ctx=%p, ctx_vm=%p",
685198c974dSDaniele Ceraolo Spurio 		  __entry->dev, __entry->ctx, __entry->vm)
686198c974dSDaniele Ceraolo Spurio )
687198c974dSDaniele Ceraolo Spurio 
688198c974dSDaniele Ceraolo Spurio DEFINE_EVENT(i915_context, i915_context_create,
689e2efd130SChris Wilson 	TP_PROTO(struct i915_gem_context *ctx),
690198c974dSDaniele Ceraolo Spurio 	TP_ARGS(ctx)
691198c974dSDaniele Ceraolo Spurio );
692198c974dSDaniele Ceraolo Spurio 
693198c974dSDaniele Ceraolo Spurio DEFINE_EVENT(i915_context, i915_context_free,
694e2efd130SChris Wilson 	TP_PROTO(struct i915_gem_context *ctx),
695198c974dSDaniele Ceraolo Spurio 	TP_ARGS(ctx)
696198c974dSDaniele Ceraolo Spurio );
697198c974dSDaniele Ceraolo Spurio 
698198c974dSDaniele Ceraolo Spurio /**
699198c974dSDaniele Ceraolo Spurio  * DOC: switch_mm tracepoint
700198c974dSDaniele Ceraolo Spurio  *
701198c974dSDaniele Ceraolo Spurio  * This tracepoint allows tracking of the mm switch, which is an important point
702198c974dSDaniele Ceraolo Spurio  * in the lifetime of the vm in the legacy submission path. This tracepoint is
703198c974dSDaniele Ceraolo Spurio  * called only if full ppgtt is enabled.
704198c974dSDaniele Ceraolo Spurio  */
705198c974dSDaniele Ceraolo Spurio TRACE_EVENT(switch_mm,
706e2efd130SChris Wilson 	TP_PROTO(struct intel_engine_cs *engine, struct i915_gem_context *to),
707198c974dSDaniele Ceraolo Spurio 
7084a570db5STvrtko Ursulin 	TP_ARGS(engine, to),
709198c974dSDaniele Ceraolo Spurio 
710198c974dSDaniele Ceraolo Spurio 	TP_STRUCT__entry(
711198c974dSDaniele Ceraolo Spurio 			__field(u32, ring)
712e2efd130SChris Wilson 			__field(struct i915_gem_context *, to)
713198c974dSDaniele Ceraolo Spurio 			__field(struct i915_address_space *, vm)
714198c974dSDaniele Ceraolo Spurio 			__field(u32, dev)
715198c974dSDaniele Ceraolo Spurio 	),
716198c974dSDaniele Ceraolo Spurio 
717198c974dSDaniele Ceraolo Spurio 	TP_fast_assign(
7184a570db5STvrtko Ursulin 			__entry->ring = engine->id;
719198c974dSDaniele Ceraolo Spurio 			__entry->to = to;
720198c974dSDaniele Ceraolo Spurio 			__entry->vm = to->ppgtt? &to->ppgtt->base : NULL;
72191c8a326SChris Wilson 			__entry->dev = engine->i915->drm.primary->index;
722198c974dSDaniele Ceraolo Spurio 	),
723198c974dSDaniele Ceraolo Spurio 
724198c974dSDaniele Ceraolo Spurio 	TP_printk("dev=%u, ring=%u, ctx=%p, ctx_vm=%p",
725198c974dSDaniele Ceraolo Spurio 		  __entry->dev, __entry->ring, __entry->to, __entry->vm)
726198c974dSDaniele Ceraolo Spurio );
727198c974dSDaniele Ceraolo Spurio 
7281c5d22f7SChris Wilson #endif /* _I915_TRACE_H_ */
7291c5d22f7SChris Wilson 
7301c5d22f7SChris Wilson /* This part must be outside protection */
7311c5d22f7SChris Wilson #undef TRACE_INCLUDE_PATH
732a7c54278SPeter Clifton #define TRACE_INCLUDE_PATH .
7331c5d22f7SChris Wilson #include <trace/define_trace.h>
734