xref: /openbmc/linux/drivers/gpu/drm/i915/i915_trace.h (revision 762d9936)
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,
2025ef284aSVille Syrjälä 	    TP_PROTO(struct intel_crtc *crtc, u32 min, u32 max),
2125ef284aSVille Syrjälä 	    TP_ARGS(crtc, min, max),
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);
3625ef284aSVille Syrjälä 			   __entry->min = min;
3725ef284aSVille Syrjälä 			   __entry->max = max;
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,
4625ef284aSVille Syrjälä 	    TP_PROTO(struct intel_crtc *crtc, u32 min, u32 max, u32 frame),
4725ef284aSVille Syrjälä 	    TP_ARGS(crtc, min, max, frame),
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;
5925ef284aSVille Syrjälä 			   __entry->frame = frame;
6025ef284aSVille Syrjälä 			   __entry->scanline = intel_get_crtc_scanline(crtc);
6125ef284aSVille Syrjälä 			   __entry->min = min;
6225ef284aSVille Syrjälä 			   __entry->max = max;
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,
7125ef284aSVille Syrjälä 	    TP_PROTO(struct intel_crtc *crtc, u32 frame),
7225ef284aSVille Syrjälä 	    TP_ARGS(crtc, frame),
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;
8325ef284aSVille Syrjälä 			   __entry->scanline = intel_get_crtc_scanline(crtc);
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 
11007fe0b12SBen Widawsky TRACE_EVENT(i915_vma_bind,
1111ec9e26dSDaniel Vetter 	    TP_PROTO(struct i915_vma *vma, unsigned flags),
1121ec9e26dSDaniel Vetter 	    TP_ARGS(vma, flags),
1131c5d22f7SChris Wilson 
1141c5d22f7SChris Wilson 	    TP_STRUCT__entry(
11505394f39SChris Wilson 			     __field(struct drm_i915_gem_object *, obj)
11607fe0b12SBen Widawsky 			     __field(struct i915_address_space *, vm)
11733938714SBen Widawsky 			     __field(u64, offset)
118db53a302SChris Wilson 			     __field(u32, size)
1191ec9e26dSDaniel Vetter 			     __field(unsigned, flags)
1201c5d22f7SChris Wilson 			     ),
1211c5d22f7SChris Wilson 
1221c5d22f7SChris Wilson 	    TP_fast_assign(
12307fe0b12SBen Widawsky 			   __entry->obj = vma->obj;
12407fe0b12SBen Widawsky 			   __entry->vm = vma->vm;
12507fe0b12SBen Widawsky 			   __entry->offset = vma->node.start;
12607fe0b12SBen Widawsky 			   __entry->size = vma->node.size;
1271ec9e26dSDaniel Vetter 			   __entry->flags = flags;
1281c5d22f7SChris Wilson 			   ),
1291c5d22f7SChris Wilson 
13033938714SBen Widawsky 	    TP_printk("obj=%p, offset=%016llx size=%x%s vm=%p",
131db53a302SChris Wilson 		      __entry->obj, __entry->offset, __entry->size,
1321ec9e26dSDaniel Vetter 		      __entry->flags & PIN_MAPPABLE ? ", mappable" : "",
13307fe0b12SBen Widawsky 		      __entry->vm)
1341c5d22f7SChris Wilson );
1351c5d22f7SChris Wilson 
13607fe0b12SBen Widawsky TRACE_EVENT(i915_vma_unbind,
13707fe0b12SBen Widawsky 	    TP_PROTO(struct i915_vma *vma),
13807fe0b12SBen Widawsky 	    TP_ARGS(vma),
139db53a302SChris Wilson 
140db53a302SChris Wilson 	    TP_STRUCT__entry(
141db53a302SChris Wilson 			     __field(struct drm_i915_gem_object *, obj)
14207fe0b12SBen Widawsky 			     __field(struct i915_address_space *, vm)
14333938714SBen Widawsky 			     __field(u64, offset)
144db53a302SChris Wilson 			     __field(u32, size)
145db53a302SChris Wilson 			     ),
146db53a302SChris Wilson 
147db53a302SChris Wilson 	    TP_fast_assign(
14807fe0b12SBen Widawsky 			   __entry->obj = vma->obj;
14907fe0b12SBen Widawsky 			   __entry->vm = vma->vm;
15007fe0b12SBen Widawsky 			   __entry->offset = vma->node.start;
15107fe0b12SBen Widawsky 			   __entry->size = vma->node.size;
152db53a302SChris Wilson 			   ),
153db53a302SChris Wilson 
15433938714SBen Widawsky 	    TP_printk("obj=%p, offset=%016llx size=%x vm=%p",
15507fe0b12SBen Widawsky 		      __entry->obj, __entry->offset, __entry->size, __entry->vm)
156db53a302SChris Wilson );
157db53a302SChris Wilson 
15872744cb1SMichel Thierry #define VM_TO_TRACE_NAME(vm) \
15972744cb1SMichel Thierry 	(i915_is_ggtt(vm) ? "G" : \
16072744cb1SMichel Thierry 		      "P")
16172744cb1SMichel Thierry 
16272744cb1SMichel Thierry DECLARE_EVENT_CLASS(i915_va,
16372744cb1SMichel Thierry 	TP_PROTO(struct i915_address_space *vm, u64 start, u64 length, const char *name),
16472744cb1SMichel Thierry 	TP_ARGS(vm, start, length, name),
16572744cb1SMichel Thierry 
16672744cb1SMichel Thierry 	TP_STRUCT__entry(
16772744cb1SMichel Thierry 		__field(struct i915_address_space *, vm)
16872744cb1SMichel Thierry 		__field(u64, start)
16972744cb1SMichel Thierry 		__field(u64, end)
17072744cb1SMichel Thierry 		__string(name, name)
17172744cb1SMichel Thierry 	),
17272744cb1SMichel Thierry 
17372744cb1SMichel Thierry 	TP_fast_assign(
17472744cb1SMichel Thierry 		__entry->vm = vm;
17572744cb1SMichel Thierry 		__entry->start = start;
17672744cb1SMichel Thierry 		__entry->end = start + length - 1;
17772744cb1SMichel Thierry 		__assign_str(name, name);
17872744cb1SMichel Thierry 	),
17972744cb1SMichel Thierry 
18072744cb1SMichel Thierry 	TP_printk("vm=%p (%s), 0x%llx-0x%llx",
18172744cb1SMichel Thierry 		  __entry->vm, __get_str(name),  __entry->start, __entry->end)
18272744cb1SMichel Thierry );
18372744cb1SMichel Thierry 
18472744cb1SMichel Thierry DEFINE_EVENT(i915_va, i915_va_alloc,
18572744cb1SMichel Thierry 	     TP_PROTO(struct i915_address_space *vm, u64 start, u64 length, const char *name),
18672744cb1SMichel Thierry 	     TP_ARGS(vm, start, length, name)
18772744cb1SMichel Thierry );
18872744cb1SMichel Thierry 
1894c06ec8dSMichel Thierry DECLARE_EVENT_CLASS(i915_px_entry,
1904c06ec8dSMichel Thierry 	TP_PROTO(struct i915_address_space *vm, u32 px, u64 start, u64 px_shift),
1914c06ec8dSMichel Thierry 	TP_ARGS(vm, px, start, px_shift),
19272744cb1SMichel Thierry 
19372744cb1SMichel Thierry 	TP_STRUCT__entry(
19472744cb1SMichel Thierry 		__field(struct i915_address_space *, vm)
1954c06ec8dSMichel Thierry 		__field(u32, px)
19672744cb1SMichel Thierry 		__field(u64, start)
19772744cb1SMichel Thierry 		__field(u64, end)
19872744cb1SMichel Thierry 	),
19972744cb1SMichel Thierry 
20072744cb1SMichel Thierry 	TP_fast_assign(
20172744cb1SMichel Thierry 		__entry->vm = vm;
2024c06ec8dSMichel Thierry 		__entry->px = px;
20372744cb1SMichel Thierry 		__entry->start = start;
2044c06ec8dSMichel Thierry 		__entry->end = ((start + (1ULL << px_shift)) & ~((1ULL << px_shift)-1)) - 1;
20572744cb1SMichel Thierry 	),
20672744cb1SMichel Thierry 
20772744cb1SMichel Thierry 	TP_printk("vm=%p, pde=%d (0x%llx-0x%llx)",
2084c06ec8dSMichel Thierry 		  __entry->vm, __entry->px, __entry->start, __entry->end)
20972744cb1SMichel Thierry );
21072744cb1SMichel Thierry 
2114c06ec8dSMichel Thierry DEFINE_EVENT(i915_px_entry, i915_page_table_entry_alloc,
21272744cb1SMichel Thierry 	     TP_PROTO(struct i915_address_space *vm, u32 pde, u64 start, u64 pde_shift),
21372744cb1SMichel Thierry 	     TP_ARGS(vm, pde, start, pde_shift)
21472744cb1SMichel Thierry );
21572744cb1SMichel Thierry 
2164c06ec8dSMichel Thierry DEFINE_EVENT_PRINT(i915_px_entry, i915_page_directory_entry_alloc,
2174c06ec8dSMichel Thierry 		   TP_PROTO(struct i915_address_space *vm, u32 pdpe, u64 start, u64 pdpe_shift),
2184c06ec8dSMichel Thierry 		   TP_ARGS(vm, pdpe, start, pdpe_shift),
2194c06ec8dSMichel Thierry 
2204c06ec8dSMichel Thierry 		   TP_printk("vm=%p, pdpe=%d (0x%llx-0x%llx)",
2214c06ec8dSMichel Thierry 			     __entry->vm, __entry->px, __entry->start, __entry->end)
2224c06ec8dSMichel Thierry );
2234c06ec8dSMichel Thierry 
224762d9936SMichel Thierry DEFINE_EVENT_PRINT(i915_px_entry, i915_page_directory_pointer_entry_alloc,
225762d9936SMichel Thierry 		   TP_PROTO(struct i915_address_space *vm, u32 pml4e, u64 start, u64 pml4e_shift),
226762d9936SMichel Thierry 		   TP_ARGS(vm, pml4e, start, pml4e_shift),
227762d9936SMichel Thierry 
228762d9936SMichel Thierry 		   TP_printk("vm=%p, pml4e=%d (0x%llx-0x%llx)",
229762d9936SMichel Thierry 			     __entry->vm, __entry->px, __entry->start, __entry->end)
230762d9936SMichel Thierry );
231762d9936SMichel Thierry 
23272744cb1SMichel Thierry /* Avoid extra math because we only support two sizes. The format is defined by
23372744cb1SMichel Thierry  * bitmap_scnprintf. Each 32 bits is 8 HEX digits followed by comma */
23472744cb1SMichel Thierry #define TRACE_PT_SIZE(bits) \
23572744cb1SMichel Thierry 	((((bits) == 1024) ? 288 : 144) + 1)
23672744cb1SMichel Thierry 
23772744cb1SMichel Thierry DECLARE_EVENT_CLASS(i915_page_table_entry_update,
23872744cb1SMichel Thierry 	TP_PROTO(struct i915_address_space *vm, u32 pde,
239ec565b3cSMichel Thierry 		 struct i915_page_table *pt, u32 first, u32 count, u32 bits),
24072744cb1SMichel Thierry 	TP_ARGS(vm, pde, pt, first, count, bits),
24172744cb1SMichel Thierry 
24272744cb1SMichel Thierry 	TP_STRUCT__entry(
24372744cb1SMichel Thierry 		__field(struct i915_address_space *, vm)
24472744cb1SMichel Thierry 		__field(u32, pde)
24572744cb1SMichel Thierry 		__field(u32, first)
24672744cb1SMichel Thierry 		__field(u32, last)
24772744cb1SMichel Thierry 		__dynamic_array(char, cur_ptes, TRACE_PT_SIZE(bits))
24872744cb1SMichel Thierry 	),
24972744cb1SMichel Thierry 
25072744cb1SMichel Thierry 	TP_fast_assign(
25172744cb1SMichel Thierry 		__entry->vm = vm;
25272744cb1SMichel Thierry 		__entry->pde = pde;
25372744cb1SMichel Thierry 		__entry->first = first;
25472744cb1SMichel Thierry 		__entry->last = first + count - 1;
25572744cb1SMichel Thierry 		scnprintf(__get_str(cur_ptes),
25672744cb1SMichel Thierry 			  TRACE_PT_SIZE(bits),
25772744cb1SMichel Thierry 			  "%*pb",
25872744cb1SMichel Thierry 			  bits,
25972744cb1SMichel Thierry 			  pt->used_ptes);
26072744cb1SMichel Thierry 	),
26172744cb1SMichel Thierry 
26272744cb1SMichel Thierry 	TP_printk("vm=%p, pde=%d, updating %u:%u\t%s",
26372744cb1SMichel Thierry 		  __entry->vm, __entry->pde, __entry->last, __entry->first,
26472744cb1SMichel Thierry 		  __get_str(cur_ptes))
26572744cb1SMichel Thierry );
26672744cb1SMichel Thierry 
26772744cb1SMichel Thierry DEFINE_EVENT(i915_page_table_entry_update, i915_page_table_entry_map,
26872744cb1SMichel Thierry 	TP_PROTO(struct i915_address_space *vm, u32 pde,
269ec565b3cSMichel Thierry 		 struct i915_page_table *pt, u32 first, u32 count, u32 bits),
27072744cb1SMichel Thierry 	TP_ARGS(vm, pde, pt, first, count, bits)
27172744cb1SMichel Thierry );
27272744cb1SMichel Thierry 
2731c5d22f7SChris Wilson TRACE_EVENT(i915_gem_object_change_domain,
274db53a302SChris Wilson 	    TP_PROTO(struct drm_i915_gem_object *obj, u32 old_read, u32 old_write),
275db53a302SChris Wilson 	    TP_ARGS(obj, old_read, old_write),
2761c5d22f7SChris Wilson 
2771c5d22f7SChris Wilson 	    TP_STRUCT__entry(
27805394f39SChris Wilson 			     __field(struct drm_i915_gem_object *, obj)
2791c5d22f7SChris Wilson 			     __field(u32, read_domains)
2801c5d22f7SChris Wilson 			     __field(u32, write_domain)
2811c5d22f7SChris Wilson 			     ),
2821c5d22f7SChris Wilson 
2831c5d22f7SChris Wilson 	    TP_fast_assign(
2841c5d22f7SChris Wilson 			   __entry->obj = obj;
285db53a302SChris Wilson 			   __entry->read_domains = obj->base.read_domains | (old_read << 16);
286db53a302SChris Wilson 			   __entry->write_domain = obj->base.write_domain | (old_write << 16);
2871c5d22f7SChris Wilson 			   ),
2881c5d22f7SChris Wilson 
289db53a302SChris Wilson 	    TP_printk("obj=%p, read=%02x=>%02x, write=%02x=>%02x",
2901c5d22f7SChris Wilson 		      __entry->obj,
291db53a302SChris Wilson 		      __entry->read_domains >> 16,
292db53a302SChris Wilson 		      __entry->read_domains & 0xffff,
293db53a302SChris Wilson 		      __entry->write_domain >> 16,
294db53a302SChris Wilson 		      __entry->write_domain & 0xffff)
295db53a302SChris Wilson );
296db53a302SChris Wilson 
297db53a302SChris Wilson TRACE_EVENT(i915_gem_object_pwrite,
298db53a302SChris Wilson 	    TP_PROTO(struct drm_i915_gem_object *obj, u32 offset, u32 len),
299db53a302SChris Wilson 	    TP_ARGS(obj, offset, len),
300db53a302SChris Wilson 
301db53a302SChris Wilson 	    TP_STRUCT__entry(
302db53a302SChris Wilson 			     __field(struct drm_i915_gem_object *, obj)
303db53a302SChris Wilson 			     __field(u32, offset)
304db53a302SChris Wilson 			     __field(u32, len)
305db53a302SChris Wilson 			     ),
306db53a302SChris Wilson 
307db53a302SChris Wilson 	    TP_fast_assign(
308db53a302SChris Wilson 			   __entry->obj = obj;
309db53a302SChris Wilson 			   __entry->offset = offset;
310db53a302SChris Wilson 			   __entry->len = len;
311db53a302SChris Wilson 			   ),
312db53a302SChris Wilson 
313db53a302SChris Wilson 	    TP_printk("obj=%p, offset=%u, len=%u",
314db53a302SChris Wilson 		      __entry->obj, __entry->offset, __entry->len)
315db53a302SChris Wilson );
316db53a302SChris Wilson 
317db53a302SChris Wilson TRACE_EVENT(i915_gem_object_pread,
318db53a302SChris Wilson 	    TP_PROTO(struct drm_i915_gem_object *obj, u32 offset, u32 len),
319db53a302SChris Wilson 	    TP_ARGS(obj, offset, len),
320db53a302SChris Wilson 
321db53a302SChris Wilson 	    TP_STRUCT__entry(
322db53a302SChris Wilson 			     __field(struct drm_i915_gem_object *, obj)
323db53a302SChris Wilson 			     __field(u32, offset)
324db53a302SChris Wilson 			     __field(u32, len)
325db53a302SChris Wilson 			     ),
326db53a302SChris Wilson 
327db53a302SChris Wilson 	    TP_fast_assign(
328db53a302SChris Wilson 			   __entry->obj = obj;
329db53a302SChris Wilson 			   __entry->offset = offset;
330db53a302SChris Wilson 			   __entry->len = len;
331db53a302SChris Wilson 			   ),
332db53a302SChris Wilson 
333db53a302SChris Wilson 	    TP_printk("obj=%p, offset=%u, len=%u",
334db53a302SChris Wilson 		      __entry->obj, __entry->offset, __entry->len)
335db53a302SChris Wilson );
336db53a302SChris Wilson 
337db53a302SChris Wilson TRACE_EVENT(i915_gem_object_fault,
338db53a302SChris Wilson 	    TP_PROTO(struct drm_i915_gem_object *obj, u32 index, bool gtt, bool write),
339db53a302SChris Wilson 	    TP_ARGS(obj, index, gtt, write),
340db53a302SChris Wilson 
341db53a302SChris Wilson 	    TP_STRUCT__entry(
342db53a302SChris Wilson 			     __field(struct drm_i915_gem_object *, obj)
343db53a302SChris Wilson 			     __field(u32, index)
344db53a302SChris Wilson 			     __field(bool, gtt)
345db53a302SChris Wilson 			     __field(bool, write)
346db53a302SChris Wilson 			     ),
347db53a302SChris Wilson 
348db53a302SChris Wilson 	    TP_fast_assign(
349db53a302SChris Wilson 			   __entry->obj = obj;
350db53a302SChris Wilson 			   __entry->index = index;
351db53a302SChris Wilson 			   __entry->gtt = gtt;
352db53a302SChris Wilson 			   __entry->write = write;
353db53a302SChris Wilson 			   ),
354db53a302SChris Wilson 
355db53a302SChris Wilson 	    TP_printk("obj=%p, %s index=%u %s",
356db53a302SChris Wilson 		      __entry->obj,
357db53a302SChris Wilson 		      __entry->gtt ? "GTT" : "CPU",
358db53a302SChris Wilson 		      __entry->index,
359db53a302SChris Wilson 		      __entry->write ? ", writable" : "")
3601c5d22f7SChris Wilson );
3611c5d22f7SChris Wilson 
362903cf20cSLi Zefan DECLARE_EVENT_CLASS(i915_gem_object,
36305394f39SChris Wilson 	    TP_PROTO(struct drm_i915_gem_object *obj),
3641c5d22f7SChris Wilson 	    TP_ARGS(obj),
3651c5d22f7SChris Wilson 
3661c5d22f7SChris Wilson 	    TP_STRUCT__entry(
36705394f39SChris Wilson 			     __field(struct drm_i915_gem_object *, obj)
3681c5d22f7SChris Wilson 			     ),
3691c5d22f7SChris Wilson 
3701c5d22f7SChris Wilson 	    TP_fast_assign(
3711c5d22f7SChris Wilson 			   __entry->obj = obj;
3721c5d22f7SChris Wilson 			   ),
3731c5d22f7SChris Wilson 
3741c5d22f7SChris Wilson 	    TP_printk("obj=%p", __entry->obj)
3751c5d22f7SChris Wilson );
3761c5d22f7SChris Wilson 
377f41275e8SLi Zefan DEFINE_EVENT(i915_gem_object, i915_gem_object_clflush,
37805394f39SChris Wilson 	     TP_PROTO(struct drm_i915_gem_object *obj),
379903cf20cSLi Zefan 	     TP_ARGS(obj)
380903cf20cSLi Zefan );
3811c5d22f7SChris Wilson 
382903cf20cSLi Zefan DEFINE_EVENT(i915_gem_object, i915_gem_object_destroy,
38305394f39SChris Wilson 	    TP_PROTO(struct drm_i915_gem_object *obj),
384903cf20cSLi Zefan 	    TP_ARGS(obj)
3851c5d22f7SChris Wilson );
3861c5d22f7SChris Wilson 
387db53a302SChris Wilson TRACE_EVENT(i915_gem_evict,
3881ec9e26dSDaniel Vetter 	    TP_PROTO(struct drm_device *dev, u32 size, u32 align, unsigned flags),
3891ec9e26dSDaniel Vetter 	    TP_ARGS(dev, size, align, flags),
3901c5d22f7SChris Wilson 
3911c5d22f7SChris Wilson 	    TP_STRUCT__entry(
3924f49be54SChris Wilson 			     __field(u32, dev)
393db53a302SChris Wilson 			     __field(u32, size)
394db53a302SChris Wilson 			     __field(u32, align)
3951ec9e26dSDaniel Vetter 			     __field(unsigned, flags)
3961c5d22f7SChris Wilson 			    ),
3971c5d22f7SChris Wilson 
3981c5d22f7SChris Wilson 	    TP_fast_assign(
3994f49be54SChris Wilson 			   __entry->dev = dev->primary->index;
400db53a302SChris Wilson 			   __entry->size = size;
401db53a302SChris Wilson 			   __entry->align = align;
4021ec9e26dSDaniel Vetter 			   __entry->flags = flags;
4031c5d22f7SChris Wilson 			  ),
4041c5d22f7SChris Wilson 
405db53a302SChris Wilson 	    TP_printk("dev=%d, size=%d, align=%d %s",
406db53a302SChris Wilson 		      __entry->dev, __entry->size, __entry->align,
4071ec9e26dSDaniel Vetter 		      __entry->flags & PIN_MAPPABLE ? ", mappable" : "")
4081c5d22f7SChris Wilson );
4091c5d22f7SChris Wilson 
410db53a302SChris Wilson TRACE_EVENT(i915_gem_evict_everything,
4116c085a72SChris Wilson 	    TP_PROTO(struct drm_device *dev),
4126c085a72SChris Wilson 	    TP_ARGS(dev),
4131c5d22f7SChris Wilson 
4141c5d22f7SChris Wilson 	    TP_STRUCT__entry(
4154f49be54SChris Wilson 			     __field(u32, dev)
4161c5d22f7SChris Wilson 			    ),
4171c5d22f7SChris Wilson 
4181c5d22f7SChris Wilson 	    TP_fast_assign(
4194f49be54SChris Wilson 			   __entry->dev = dev->primary->index;
4201c5d22f7SChris Wilson 			  ),
4211c5d22f7SChris Wilson 
4226c085a72SChris Wilson 	    TP_printk("dev=%d", __entry->dev)
423db53a302SChris Wilson );
424db53a302SChris Wilson 
425bcccff84SBen Widawsky TRACE_EVENT(i915_gem_evict_vm,
426bcccff84SBen Widawsky 	    TP_PROTO(struct i915_address_space *vm),
427bcccff84SBen Widawsky 	    TP_ARGS(vm),
428bcccff84SBen Widawsky 
429bcccff84SBen Widawsky 	    TP_STRUCT__entry(
4309297ebf2SSteven Rostedt 			     __field(u32, dev)
431bcccff84SBen Widawsky 			     __field(struct i915_address_space *, vm)
432bcccff84SBen Widawsky 			    ),
433bcccff84SBen Widawsky 
434bcccff84SBen Widawsky 	    TP_fast_assign(
4359297ebf2SSteven Rostedt 			   __entry->dev = vm->dev->primary->index;
436bcccff84SBen Widawsky 			   __entry->vm = vm;
437bcccff84SBen Widawsky 			  ),
438bcccff84SBen Widawsky 
4399297ebf2SSteven Rostedt 	    TP_printk("dev=%d, vm=%p", __entry->dev, __entry->vm)
440bcccff84SBen Widawsky );
441bcccff84SBen Widawsky 
442b52b89daSChris Wilson TRACE_EVENT(i915_gem_ring_sync_to,
443599d924cSJohn Harrison 	    TP_PROTO(struct drm_i915_gem_request *to_req,
444599d924cSJohn Harrison 		     struct intel_engine_cs *from,
44574328ee5SJohn Harrison 		     struct drm_i915_gem_request *req),
446599d924cSJohn Harrison 	    TP_ARGS(to_req, from, req),
447b52b89daSChris Wilson 
448b52b89daSChris Wilson 	    TP_STRUCT__entry(
449b52b89daSChris Wilson 			     __field(u32, dev)
450b52b89daSChris Wilson 			     __field(u32, sync_from)
451b52b89daSChris Wilson 			     __field(u32, sync_to)
452b52b89daSChris Wilson 			     __field(u32, seqno)
453b52b89daSChris Wilson 			     ),
454b52b89daSChris Wilson 
455b52b89daSChris Wilson 	    TP_fast_assign(
456b52b89daSChris Wilson 			   __entry->dev = from->dev->primary->index;
457b52b89daSChris Wilson 			   __entry->sync_from = from->id;
458599d924cSJohn Harrison 			   __entry->sync_to = to_req->ring->id;
45974328ee5SJohn Harrison 			   __entry->seqno = i915_gem_request_get_seqno(req);
460b52b89daSChris Wilson 			   ),
461b52b89daSChris Wilson 
462b52b89daSChris Wilson 	    TP_printk("dev=%u, sync-from=%u, sync-to=%u, seqno=%u",
463b52b89daSChris Wilson 		      __entry->dev,
464b52b89daSChris Wilson 		      __entry->sync_from, __entry->sync_to,
465b52b89daSChris Wilson 		      __entry->seqno)
466b52b89daSChris Wilson );
467b52b89daSChris Wilson 
468db53a302SChris Wilson TRACE_EVENT(i915_gem_ring_dispatch,
46974328ee5SJohn Harrison 	    TP_PROTO(struct drm_i915_gem_request *req, u32 flags),
47074328ee5SJohn Harrison 	    TP_ARGS(req, flags),
471db53a302SChris Wilson 
472db53a302SChris Wilson 	    TP_STRUCT__entry(
473db53a302SChris Wilson 			     __field(u32, dev)
474db53a302SChris Wilson 			     __field(u32, ring)
475db53a302SChris Wilson 			     __field(u32, seqno)
476d7d4eeddSChris Wilson 			     __field(u32, flags)
477db53a302SChris Wilson 			     ),
478db53a302SChris Wilson 
479db53a302SChris Wilson 	    TP_fast_assign(
48074328ee5SJohn Harrison 			   struct intel_engine_cs *ring =
48174328ee5SJohn Harrison 						i915_gem_request_get_ring(req);
482db53a302SChris Wilson 			   __entry->dev = ring->dev->primary->index;
483db53a302SChris Wilson 			   __entry->ring = ring->id;
48474328ee5SJohn Harrison 			   __entry->seqno = i915_gem_request_get_seqno(req);
485d7d4eeddSChris Wilson 			   __entry->flags = flags;
486581c26e8SJohn Harrison 			   i915_trace_irq_get(ring, req);
487db53a302SChris Wilson 			   ),
488db53a302SChris Wilson 
489d7d4eeddSChris Wilson 	    TP_printk("dev=%u, ring=%u, seqno=%u, flags=%x",
490d7d4eeddSChris Wilson 		      __entry->dev, __entry->ring, __entry->seqno, __entry->flags)
491db53a302SChris Wilson );
492db53a302SChris Wilson 
493db53a302SChris Wilson TRACE_EVENT(i915_gem_ring_flush,
494a84c3ae1SJohn Harrison 	    TP_PROTO(struct drm_i915_gem_request *req, u32 invalidate, u32 flush),
495a84c3ae1SJohn Harrison 	    TP_ARGS(req, invalidate, flush),
496db53a302SChris Wilson 
497db53a302SChris Wilson 	    TP_STRUCT__entry(
498db53a302SChris Wilson 			     __field(u32, dev)
499db53a302SChris Wilson 			     __field(u32, ring)
500db53a302SChris Wilson 			     __field(u32, invalidate)
501db53a302SChris Wilson 			     __field(u32, flush)
502db53a302SChris Wilson 			     ),
503db53a302SChris Wilson 
504db53a302SChris Wilson 	    TP_fast_assign(
505a84c3ae1SJohn Harrison 			   __entry->dev = req->ring->dev->primary->index;
506a84c3ae1SJohn Harrison 			   __entry->ring = req->ring->id;
507db53a302SChris Wilson 			   __entry->invalidate = invalidate;
508db53a302SChris Wilson 			   __entry->flush = flush;
509db53a302SChris Wilson 			   ),
510db53a302SChris Wilson 
511db53a302SChris Wilson 	    TP_printk("dev=%u, ring=%x, invalidate=%04x, flush=%04x",
512db53a302SChris Wilson 		      __entry->dev, __entry->ring,
513db53a302SChris Wilson 		      __entry->invalidate, __entry->flush)
5141c5d22f7SChris Wilson );
5151c5d22f7SChris Wilson 
516903cf20cSLi Zefan DECLARE_EVENT_CLASS(i915_gem_request,
51774328ee5SJohn Harrison 	    TP_PROTO(struct drm_i915_gem_request *req),
51874328ee5SJohn Harrison 	    TP_ARGS(req),
5191c5d22f7SChris Wilson 
5201c5d22f7SChris Wilson 	    TP_STRUCT__entry(
5214f49be54SChris Wilson 			     __field(u32, dev)
522db53a302SChris Wilson 			     __field(u32, ring)
5231c5d22f7SChris Wilson 			     __field(u32, seqno)
5241c5d22f7SChris Wilson 			     ),
5251c5d22f7SChris Wilson 
5261c5d22f7SChris Wilson 	    TP_fast_assign(
52774328ee5SJohn Harrison 			   struct intel_engine_cs *ring =
52874328ee5SJohn Harrison 						i915_gem_request_get_ring(req);
529db53a302SChris Wilson 			   __entry->dev = ring->dev->primary->index;
530db53a302SChris Wilson 			   __entry->ring = ring->id;
53174328ee5SJohn Harrison 			   __entry->seqno = i915_gem_request_get_seqno(req);
5321c5d22f7SChris Wilson 			   ),
5331c5d22f7SChris Wilson 
534d7b9ca2fSChris Wilson 	    TP_printk("dev=%u, ring=%u, seqno=%u",
535d7b9ca2fSChris Wilson 		      __entry->dev, __entry->ring, __entry->seqno)
536db53a302SChris Wilson );
537db53a302SChris Wilson 
538db53a302SChris Wilson DEFINE_EVENT(i915_gem_request, i915_gem_request_add,
53974328ee5SJohn Harrison 	    TP_PROTO(struct drm_i915_gem_request *req),
54074328ee5SJohn Harrison 	    TP_ARGS(req)
5411c5d22f7SChris Wilson );
5421c5d22f7SChris Wilson 
543bcfcc8baSJohn Harrison TRACE_EVENT(i915_gem_request_notify,
544a4872ba6SOscar Mateo 	    TP_PROTO(struct intel_engine_cs *ring),
545814e9b57SChris Wilson 	    TP_ARGS(ring),
546814e9b57SChris Wilson 
547814e9b57SChris Wilson 	    TP_STRUCT__entry(
548814e9b57SChris Wilson 			     __field(u32, dev)
549814e9b57SChris Wilson 			     __field(u32, ring)
550814e9b57SChris Wilson 			     __field(u32, seqno)
551814e9b57SChris Wilson 			     ),
552814e9b57SChris Wilson 
553814e9b57SChris Wilson 	    TP_fast_assign(
554814e9b57SChris Wilson 			   __entry->dev = ring->dev->primary->index;
555814e9b57SChris Wilson 			   __entry->ring = ring->id;
556814e9b57SChris Wilson 			   __entry->seqno = ring->get_seqno(ring, false);
557814e9b57SChris Wilson 			   ),
558814e9b57SChris Wilson 
559814e9b57SChris Wilson 	    TP_printk("dev=%u, ring=%u, seqno=%u",
560814e9b57SChris Wilson 		      __entry->dev, __entry->ring, __entry->seqno)
5611c5d22f7SChris Wilson );
5621c5d22f7SChris Wilson 
563903cf20cSLi Zefan DEFINE_EVENT(i915_gem_request, i915_gem_request_retire,
56474328ee5SJohn Harrison 	    TP_PROTO(struct drm_i915_gem_request *req),
56574328ee5SJohn Harrison 	    TP_ARGS(req)
5661c5d22f7SChris Wilson );
5671c5d22f7SChris Wilson 
568bcfcc8baSJohn Harrison DEFINE_EVENT(i915_gem_request, i915_gem_request_complete,
569bcfcc8baSJohn Harrison 	    TP_PROTO(struct drm_i915_gem_request *req),
570bcfcc8baSJohn Harrison 	    TP_ARGS(req)
571bcfcc8baSJohn Harrison );
572bcfcc8baSJohn Harrison 
573f3fd3768SBen Widawsky TRACE_EVENT(i915_gem_request_wait_begin,
57474328ee5SJohn Harrison 	    TP_PROTO(struct drm_i915_gem_request *req),
57574328ee5SJohn Harrison 	    TP_ARGS(req),
576f3fd3768SBen Widawsky 
577f3fd3768SBen Widawsky 	    TP_STRUCT__entry(
578f3fd3768SBen Widawsky 			     __field(u32, dev)
579f3fd3768SBen Widawsky 			     __field(u32, ring)
580f3fd3768SBen Widawsky 			     __field(u32, seqno)
581f3fd3768SBen Widawsky 			     __field(bool, blocking)
582f3fd3768SBen Widawsky 			     ),
583f3fd3768SBen Widawsky 
584f3fd3768SBen Widawsky 	    /* NB: the blocking information is racy since mutex_is_locked
585f3fd3768SBen Widawsky 	     * doesn't check that the current thread holds the lock. The only
586f3fd3768SBen Widawsky 	     * other option would be to pass the boolean information of whether
587f3fd3768SBen Widawsky 	     * or not the class was blocking down through the stack which is
588f3fd3768SBen Widawsky 	     * less desirable.
589f3fd3768SBen Widawsky 	     */
590f3fd3768SBen Widawsky 	    TP_fast_assign(
59174328ee5SJohn Harrison 			   struct intel_engine_cs *ring =
59274328ee5SJohn Harrison 						i915_gem_request_get_ring(req);
593f3fd3768SBen Widawsky 			   __entry->dev = ring->dev->primary->index;
594f3fd3768SBen Widawsky 			   __entry->ring = ring->id;
59574328ee5SJohn Harrison 			   __entry->seqno = i915_gem_request_get_seqno(req);
59674328ee5SJohn Harrison 			   __entry->blocking =
59774328ee5SJohn Harrison 				     mutex_is_locked(&ring->dev->struct_mutex);
598f3fd3768SBen Widawsky 			   ),
599f3fd3768SBen Widawsky 
600d7b9ca2fSChris Wilson 	    TP_printk("dev=%u, ring=%u, seqno=%u, blocking=%s",
601d7b9ca2fSChris Wilson 		      __entry->dev, __entry->ring,
602bcfcc8baSJohn Harrison 		      __entry->seqno, __entry->blocking ?  "yes (NB)" : "no")
6031c5d22f7SChris Wilson );
6041c5d22f7SChris Wilson 
605903cf20cSLi Zefan DEFINE_EVENT(i915_gem_request, i915_gem_request_wait_end,
60674328ee5SJohn Harrison 	    TP_PROTO(struct drm_i915_gem_request *req),
60774328ee5SJohn Harrison 	    TP_ARGS(req)
608903cf20cSLi Zefan );
609903cf20cSLi Zefan 
610e5510facSJesse Barnes TRACE_EVENT(i915_flip_request,
61105394f39SChris Wilson 	    TP_PROTO(int plane, struct drm_i915_gem_object *obj),
612e5510facSJesse Barnes 
613e5510facSJesse Barnes 	    TP_ARGS(plane, obj),
614e5510facSJesse Barnes 
615e5510facSJesse Barnes 	    TP_STRUCT__entry(
616e5510facSJesse Barnes 		    __field(int, plane)
61705394f39SChris Wilson 		    __field(struct drm_i915_gem_object *, obj)
618e5510facSJesse Barnes 		    ),
619e5510facSJesse Barnes 
620e5510facSJesse Barnes 	    TP_fast_assign(
621e5510facSJesse Barnes 		    __entry->plane = plane;
622e5510facSJesse Barnes 		    __entry->obj = obj;
623e5510facSJesse Barnes 		    ),
624e5510facSJesse Barnes 
625e5510facSJesse Barnes 	    TP_printk("plane=%d, obj=%p", __entry->plane, __entry->obj)
626e5510facSJesse Barnes );
627e5510facSJesse Barnes 
628e5510facSJesse Barnes TRACE_EVENT(i915_flip_complete,
62905394f39SChris Wilson 	    TP_PROTO(int plane, struct drm_i915_gem_object *obj),
630e5510facSJesse Barnes 
631e5510facSJesse Barnes 	    TP_ARGS(plane, obj),
632e5510facSJesse Barnes 
633e5510facSJesse Barnes 	    TP_STRUCT__entry(
634e5510facSJesse Barnes 		    __field(int, plane)
63505394f39SChris Wilson 		    __field(struct drm_i915_gem_object *, obj)
636e5510facSJesse Barnes 		    ),
637e5510facSJesse Barnes 
638e5510facSJesse Barnes 	    TP_fast_assign(
639e5510facSJesse Barnes 		    __entry->plane = plane;
640e5510facSJesse Barnes 		    __entry->obj = obj;
641e5510facSJesse Barnes 		    ),
642e5510facSJesse Barnes 
643e5510facSJesse Barnes 	    TP_printk("plane=%d, obj=%p", __entry->plane, __entry->obj)
644e5510facSJesse Barnes );
645e5510facSJesse Barnes 
646ed71f1b4SChris Wilson TRACE_EVENT_CONDITION(i915_reg_rw,
647ed71f1b4SChris Wilson 	TP_PROTO(bool write, u32 reg, u64 val, int len, bool trace),
648ba4f01a3SYuanhan Liu 
649ed71f1b4SChris Wilson 	TP_ARGS(write, reg, val, len, trace),
650ed71f1b4SChris Wilson 
651ed71f1b4SChris Wilson 	TP_CONDITION(trace),
652ba4f01a3SYuanhan Liu 
653ba4f01a3SYuanhan Liu 	TP_STRUCT__entry(
654db53a302SChris Wilson 		__field(u64, val)
655db53a302SChris Wilson 		__field(u32, reg)
656db53a302SChris Wilson 		__field(u16, write)
657db53a302SChris Wilson 		__field(u16, len)
658ba4f01a3SYuanhan Liu 		),
659ba4f01a3SYuanhan Liu 
660ba4f01a3SYuanhan Liu 	TP_fast_assign(
661db53a302SChris Wilson 		__entry->val = (u64)val;
662ba4f01a3SYuanhan Liu 		__entry->reg = reg;
663db53a302SChris Wilson 		__entry->write = write;
664ba4f01a3SYuanhan Liu 		__entry->len = len;
665ba4f01a3SYuanhan Liu 		),
666ba4f01a3SYuanhan Liu 
667db53a302SChris Wilson 	TP_printk("%s reg=0x%x, len=%d, val=(0x%x, 0x%x)",
668db53a302SChris Wilson 		__entry->write ? "write" : "read",
669db53a302SChris Wilson 		__entry->reg, __entry->len,
670db53a302SChris Wilson 		(u32)(__entry->val & 0xffffffff),
671db53a302SChris Wilson 		(u32)(__entry->val >> 32))
672ba4f01a3SYuanhan Liu );
673ba4f01a3SYuanhan Liu 
674be2cde9aSDaniel Vetter TRACE_EVENT(intel_gpu_freq_change,
675be2cde9aSDaniel Vetter 	    TP_PROTO(u32 freq),
676be2cde9aSDaniel Vetter 	    TP_ARGS(freq),
677be2cde9aSDaniel Vetter 
678be2cde9aSDaniel Vetter 	    TP_STRUCT__entry(
679be2cde9aSDaniel Vetter 			     __field(u32, freq)
680be2cde9aSDaniel Vetter 			     ),
681be2cde9aSDaniel Vetter 
682be2cde9aSDaniel Vetter 	    TP_fast_assign(
683be2cde9aSDaniel Vetter 			   __entry->freq = freq;
684be2cde9aSDaniel Vetter 			   ),
685be2cde9aSDaniel Vetter 
686be2cde9aSDaniel Vetter 	    TP_printk("new_freq=%u", __entry->freq)
687be2cde9aSDaniel Vetter );
688be2cde9aSDaniel Vetter 
689198c974dSDaniele Ceraolo Spurio /**
690198c974dSDaniele Ceraolo Spurio  * DOC: i915_ppgtt_create and i915_ppgtt_release tracepoints
691198c974dSDaniele Ceraolo Spurio  *
692198c974dSDaniele Ceraolo Spurio  * With full ppgtt enabled each process using drm will allocate at least one
693198c974dSDaniele Ceraolo Spurio  * translation table. With these traces it is possible to keep track of the
694198c974dSDaniele Ceraolo Spurio  * allocation and of the lifetime of the tables; this can be used during
695198c974dSDaniele Ceraolo Spurio  * testing/debug to verify that we are not leaking ppgtts.
696198c974dSDaniele Ceraolo Spurio  * These traces identify the ppgtt through the vm pointer, which is also printed
697198c974dSDaniele Ceraolo Spurio  * by the i915_vma_bind and i915_vma_unbind tracepoints.
698198c974dSDaniele Ceraolo Spurio  */
699198c974dSDaniele Ceraolo Spurio DECLARE_EVENT_CLASS(i915_ppgtt,
700198c974dSDaniele Ceraolo Spurio 	TP_PROTO(struct i915_address_space *vm),
701198c974dSDaniele Ceraolo Spurio 	TP_ARGS(vm),
702198c974dSDaniele Ceraolo Spurio 
703198c974dSDaniele Ceraolo Spurio 	TP_STRUCT__entry(
704198c974dSDaniele Ceraolo Spurio 			__field(struct i915_address_space *, vm)
705198c974dSDaniele Ceraolo Spurio 			__field(u32, dev)
706198c974dSDaniele Ceraolo Spurio 	),
707198c974dSDaniele Ceraolo Spurio 
708198c974dSDaniele Ceraolo Spurio 	TP_fast_assign(
709198c974dSDaniele Ceraolo Spurio 			__entry->vm = vm;
710198c974dSDaniele Ceraolo Spurio 			__entry->dev = vm->dev->primary->index;
711198c974dSDaniele Ceraolo Spurio 	),
712198c974dSDaniele Ceraolo Spurio 
713198c974dSDaniele Ceraolo Spurio 	TP_printk("dev=%u, vm=%p", __entry->dev, __entry->vm)
714198c974dSDaniele Ceraolo Spurio )
715198c974dSDaniele Ceraolo Spurio 
716198c974dSDaniele Ceraolo Spurio DEFINE_EVENT(i915_ppgtt, i915_ppgtt_create,
717198c974dSDaniele Ceraolo Spurio 	TP_PROTO(struct i915_address_space *vm),
718198c974dSDaniele Ceraolo Spurio 	TP_ARGS(vm)
719198c974dSDaniele Ceraolo Spurio );
720198c974dSDaniele Ceraolo Spurio 
721198c974dSDaniele Ceraolo Spurio DEFINE_EVENT(i915_ppgtt, i915_ppgtt_release,
722198c974dSDaniele Ceraolo Spurio 	TP_PROTO(struct i915_address_space *vm),
723198c974dSDaniele Ceraolo Spurio 	TP_ARGS(vm)
724198c974dSDaniele Ceraolo Spurio );
725198c974dSDaniele Ceraolo Spurio 
726198c974dSDaniele Ceraolo Spurio /**
727198c974dSDaniele Ceraolo Spurio  * DOC: i915_context_create and i915_context_free tracepoints
728198c974dSDaniele Ceraolo Spurio  *
729198c974dSDaniele Ceraolo Spurio  * These tracepoints are used to track creation and deletion of contexts.
730198c974dSDaniele Ceraolo Spurio  * If full ppgtt is enabled, they also print the address of the vm assigned to
731198c974dSDaniele Ceraolo Spurio  * the context.
732198c974dSDaniele Ceraolo Spurio  */
733198c974dSDaniele Ceraolo Spurio DECLARE_EVENT_CLASS(i915_context,
734198c974dSDaniele Ceraolo Spurio 	TP_PROTO(struct intel_context *ctx),
735198c974dSDaniele Ceraolo Spurio 	TP_ARGS(ctx),
736198c974dSDaniele Ceraolo Spurio 
737198c974dSDaniele Ceraolo Spurio 	TP_STRUCT__entry(
738198c974dSDaniele Ceraolo Spurio 			__field(u32, dev)
739198c974dSDaniele Ceraolo Spurio 			__field(struct intel_context *, ctx)
740198c974dSDaniele Ceraolo Spurio 			__field(struct i915_address_space *, vm)
741198c974dSDaniele Ceraolo Spurio 	),
742198c974dSDaniele Ceraolo Spurio 
743198c974dSDaniele Ceraolo Spurio 	TP_fast_assign(
744198c974dSDaniele Ceraolo Spurio 			__entry->ctx = ctx;
745198c974dSDaniele Ceraolo Spurio 			__entry->vm = ctx->ppgtt ? &ctx->ppgtt->base : NULL;
7469ea4feecSChris Wilson 			__entry->dev = ctx->i915->dev->primary->index;
747198c974dSDaniele Ceraolo Spurio 	),
748198c974dSDaniele Ceraolo Spurio 
749198c974dSDaniele Ceraolo Spurio 	TP_printk("dev=%u, ctx=%p, ctx_vm=%p",
750198c974dSDaniele Ceraolo Spurio 		  __entry->dev, __entry->ctx, __entry->vm)
751198c974dSDaniele Ceraolo Spurio )
752198c974dSDaniele Ceraolo Spurio 
753198c974dSDaniele Ceraolo Spurio DEFINE_EVENT(i915_context, i915_context_create,
754198c974dSDaniele Ceraolo Spurio 	TP_PROTO(struct intel_context *ctx),
755198c974dSDaniele Ceraolo Spurio 	TP_ARGS(ctx)
756198c974dSDaniele Ceraolo Spurio );
757198c974dSDaniele Ceraolo Spurio 
758198c974dSDaniele Ceraolo Spurio DEFINE_EVENT(i915_context, i915_context_free,
759198c974dSDaniele Ceraolo Spurio 	TP_PROTO(struct intel_context *ctx),
760198c974dSDaniele Ceraolo Spurio 	TP_ARGS(ctx)
761198c974dSDaniele Ceraolo Spurio );
762198c974dSDaniele Ceraolo Spurio 
763198c974dSDaniele Ceraolo Spurio /**
764198c974dSDaniele Ceraolo Spurio  * DOC: switch_mm tracepoint
765198c974dSDaniele Ceraolo Spurio  *
766198c974dSDaniele Ceraolo Spurio  * This tracepoint allows tracking of the mm switch, which is an important point
767198c974dSDaniele Ceraolo Spurio  * in the lifetime of the vm in the legacy submission path. This tracepoint is
768198c974dSDaniele Ceraolo Spurio  * called only if full ppgtt is enabled.
769198c974dSDaniele Ceraolo Spurio  */
770198c974dSDaniele Ceraolo Spurio TRACE_EVENT(switch_mm,
771198c974dSDaniele Ceraolo Spurio 	TP_PROTO(struct intel_engine_cs *ring, struct intel_context *to),
772198c974dSDaniele Ceraolo Spurio 
773198c974dSDaniele Ceraolo Spurio 	TP_ARGS(ring, to),
774198c974dSDaniele Ceraolo Spurio 
775198c974dSDaniele Ceraolo Spurio 	TP_STRUCT__entry(
776198c974dSDaniele Ceraolo Spurio 			__field(u32, ring)
777198c974dSDaniele Ceraolo Spurio 			__field(struct intel_context *, to)
778198c974dSDaniele Ceraolo Spurio 			__field(struct i915_address_space *, vm)
779198c974dSDaniele Ceraolo Spurio 			__field(u32, dev)
780198c974dSDaniele Ceraolo Spurio 	),
781198c974dSDaniele Ceraolo Spurio 
782198c974dSDaniele Ceraolo Spurio 	TP_fast_assign(
783198c974dSDaniele Ceraolo Spurio 			__entry->ring = ring->id;
784198c974dSDaniele Ceraolo Spurio 			__entry->to = to;
785198c974dSDaniele Ceraolo Spurio 			__entry->vm = to->ppgtt? &to->ppgtt->base : NULL;
786198c974dSDaniele Ceraolo Spurio 			__entry->dev = ring->dev->primary->index;
787198c974dSDaniele Ceraolo Spurio 	),
788198c974dSDaniele Ceraolo Spurio 
789198c974dSDaniele Ceraolo Spurio 	TP_printk("dev=%u, ring=%u, ctx=%p, ctx_vm=%p",
790198c974dSDaniele Ceraolo Spurio 		  __entry->dev, __entry->ring, __entry->to, __entry->vm)
791198c974dSDaniele Ceraolo Spurio );
792198c974dSDaniele Ceraolo Spurio 
7931c5d22f7SChris Wilson #endif /* _I915_TRACE_H_ */
7941c5d22f7SChris Wilson 
7951c5d22f7SChris Wilson /* This part must be outside protection */
7961c5d22f7SChris Wilson #undef TRACE_INCLUDE_PATH
797a7c54278SPeter Clifton #define TRACE_INCLUDE_PATH .
7981c5d22f7SChris Wilson #include <trace/define_trace.h>
799