]>
Commit | Line | Data |
---|---|---|
b2441318 | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
1c5d22f7 CW |
2 | #if !defined(_I915_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ) |
3 | #define _I915_TRACE_H_ | |
4 | ||
5 | #include <linux/stringify.h> | |
6 | #include <linux/types.h> | |
7 | #include <linux/tracepoint.h> | |
8 | ||
fcd70cd3 DV |
9 | #include <drm/drm_drv.h> |
10 | ||
1d455f8d | 11 | #include "display/intel_display_types.h" |
112ed2d3 CW |
12 | #include "gt/intel_engine.h" |
13 | ||
05394f39 | 14 | #include "i915_drv.h" |
440e2b3d | 15 | #include "i915_irq.h" |
1c5d22f7 CW |
16 | |
17 | #undef TRACE_SYSTEM | |
18 | #define TRACE_SYSTEM i915 | |
1c5d22f7 CW |
19 | #define TRACE_INCLUDE_FILE i915_trace |
20 | ||
c137d660 VS |
21 | /* watermark/fifo updates */ |
22 | ||
0b2599a4 | 23 | TRACE_EVENT(intel_pipe_enable, |
4c888e7b VS |
24 | TP_PROTO(struct intel_crtc *crtc), |
25 | TP_ARGS(crtc), | |
0b2599a4 VS |
26 | |
27 | TP_STRUCT__entry( | |
28 | __array(u32, frame, 3) | |
29 | __array(u32, scanline, 3) | |
30 | __field(enum pipe, pipe) | |
31 | ), | |
0b2599a4 | 32 | TP_fast_assign( |
4c888e7b VS |
33 | struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); |
34 | struct intel_crtc *it__; | |
35 | for_each_intel_crtc(&dev_priv->drm, it__) { | |
36 | __entry->frame[it__->pipe] = intel_crtc_get_vblank_counter(it__); | |
37 | __entry->scanline[it__->pipe] = intel_get_crtc_scanline(it__); | |
0b2599a4 | 38 | } |
4c888e7b | 39 | __entry->pipe = crtc->pipe; |
0b2599a4 VS |
40 | ), |
41 | ||
42 | TP_printk("pipe %c enable, pipe A: frame=%u, scanline=%u, pipe B: frame=%u, scanline=%u, pipe C: frame=%u, scanline=%u", | |
43 | pipe_name(__entry->pipe), | |
44 | __entry->frame[PIPE_A], __entry->scanline[PIPE_A], | |
45 | __entry->frame[PIPE_B], __entry->scanline[PIPE_B], | |
46 | __entry->frame[PIPE_C], __entry->scanline[PIPE_C]) | |
47 | ); | |
48 | ||
49 | TRACE_EVENT(intel_pipe_disable, | |
4c888e7b VS |
50 | TP_PROTO(struct intel_crtc *crtc), |
51 | TP_ARGS(crtc), | |
0b2599a4 VS |
52 | |
53 | TP_STRUCT__entry( | |
54 | __array(u32, frame, 3) | |
55 | __array(u32, scanline, 3) | |
56 | __field(enum pipe, pipe) | |
57 | ), | |
58 | ||
59 | TP_fast_assign( | |
4c888e7b VS |
60 | struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); |
61 | struct intel_crtc *it__; | |
62 | for_each_intel_crtc(&dev_priv->drm, it__) { | |
63 | __entry->frame[it__->pipe] = intel_crtc_get_vblank_counter(it__); | |
64 | __entry->scanline[it__->pipe] = intel_get_crtc_scanline(it__); | |
0b2599a4 | 65 | } |
4c888e7b | 66 | __entry->pipe = crtc->pipe; |
0b2599a4 VS |
67 | ), |
68 | ||
69 | TP_printk("pipe %c disable, pipe A: frame=%u, scanline=%u, pipe B: frame=%u, scanline=%u, pipe C: frame=%u, scanline=%u", | |
70 | pipe_name(__entry->pipe), | |
71 | __entry->frame[PIPE_A], __entry->scanline[PIPE_A], | |
72 | __entry->frame[PIPE_B], __entry->scanline[PIPE_B], | |
73 | __entry->frame[PIPE_C], __entry->scanline[PIPE_C]) | |
74 | ); | |
75 | ||
5cee6c45 VS |
76 | TRACE_EVENT(intel_pipe_crc, |
77 | TP_PROTO(struct intel_crtc *crtc, const u32 *crcs), | |
78 | TP_ARGS(crtc, crcs), | |
79 | ||
80 | TP_STRUCT__entry( | |
81 | __field(enum pipe, pipe) | |
82 | __field(u32, frame) | |
83 | __field(u32, scanline) | |
84 | __array(u32, crcs, 5) | |
85 | ), | |
86 | ||
87 | TP_fast_assign( | |
88 | __entry->pipe = crtc->pipe; | |
4c888e7b | 89 | __entry->frame = intel_crtc_get_vblank_counter(crtc); |
5cee6c45 VS |
90 | __entry->scanline = intel_get_crtc_scanline(crtc); |
91 | memcpy(__entry->crcs, crcs, sizeof(__entry->crcs)); | |
92 | ), | |
93 | ||
94 | TP_printk("pipe %c, frame=%u, scanline=%u crc=%08x %08x %08x %08x %08x", | |
95 | pipe_name(__entry->pipe), __entry->frame, __entry->scanline, | |
96 | __entry->crcs[0], __entry->crcs[1], __entry->crcs[2], | |
97 | __entry->crcs[3], __entry->crcs[4]) | |
98 | ); | |
99 | ||
53a7915c VS |
100 | TRACE_EVENT(intel_cpu_fifo_underrun, |
101 | TP_PROTO(struct drm_i915_private *dev_priv, enum pipe pipe), | |
102 | TP_ARGS(dev_priv, pipe), | |
103 | ||
104 | TP_STRUCT__entry( | |
105 | __field(enum pipe, pipe) | |
106 | __field(u32, frame) | |
107 | __field(u32, scanline) | |
108 | ), | |
109 | ||
110 | TP_fast_assign( | |
4c888e7b | 111 | struct intel_crtc *crtc = intel_get_crtc_for_pipe(dev_priv, pipe); |
53a7915c | 112 | __entry->pipe = pipe; |
4c888e7b VS |
113 | __entry->frame = intel_crtc_get_vblank_counter(crtc); |
114 | __entry->scanline = intel_get_crtc_scanline(crtc); | |
53a7915c VS |
115 | ), |
116 | ||
117 | TP_printk("pipe %c, frame=%u, scanline=%u", | |
118 | pipe_name(__entry->pipe), | |
119 | __entry->frame, __entry->scanline) | |
120 | ); | |
121 | ||
122 | TRACE_EVENT(intel_pch_fifo_underrun, | |
034263a3 | 123 | TP_PROTO(struct drm_i915_private *dev_priv, enum pipe pch_transcoder), |
53a7915c VS |
124 | TP_ARGS(dev_priv, pch_transcoder), |
125 | ||
126 | TP_STRUCT__entry( | |
127 | __field(enum pipe, pipe) | |
128 | __field(u32, frame) | |
129 | __field(u32, scanline) | |
130 | ), | |
131 | ||
132 | TP_fast_assign( | |
034263a3 | 133 | enum pipe pipe = pch_transcoder; |
4c888e7b | 134 | struct intel_crtc *crtc = intel_get_crtc_for_pipe(dev_priv, pipe); |
53a7915c | 135 | __entry->pipe = pipe; |
4c888e7b VS |
136 | __entry->frame = intel_crtc_get_vblank_counter(crtc); |
137 | __entry->scanline = intel_get_crtc_scanline(crtc); | |
53a7915c VS |
138 | ), |
139 | ||
140 | TP_printk("pch transcoder %c, frame=%u, scanline=%u", | |
141 | pipe_name(__entry->pipe), | |
142 | __entry->frame, __entry->scanline) | |
143 | ); | |
144 | ||
1489bba8 VS |
145 | TRACE_EVENT(intel_memory_cxsr, |
146 | TP_PROTO(struct drm_i915_private *dev_priv, bool old, bool new), | |
147 | TP_ARGS(dev_priv, old, new), | |
148 | ||
149 | TP_STRUCT__entry( | |
150 | __array(u32, frame, 3) | |
151 | __array(u32, scanline, 3) | |
152 | __field(bool, old) | |
153 | __field(bool, new) | |
154 | ), | |
155 | ||
156 | TP_fast_assign( | |
4c888e7b VS |
157 | struct intel_crtc *crtc; |
158 | for_each_intel_crtc(&dev_priv->drm, crtc) { | |
159 | __entry->frame[crtc->pipe] = intel_crtc_get_vblank_counter(crtc); | |
160 | __entry->scanline[crtc->pipe] = intel_get_crtc_scanline(crtc); | |
1489bba8 VS |
161 | } |
162 | __entry->old = old; | |
163 | __entry->new = new; | |
164 | ), | |
165 | ||
166 | TP_printk("%s->%s, pipe A: frame=%u, scanline=%u, pipe B: frame=%u, scanline=%u, pipe C: frame=%u, scanline=%u", | |
167 | onoff(__entry->old), onoff(__entry->new), | |
168 | __entry->frame[PIPE_A], __entry->scanline[PIPE_A], | |
169 | __entry->frame[PIPE_B], __entry->scanline[PIPE_B], | |
170 | __entry->frame[PIPE_C], __entry->scanline[PIPE_C]) | |
171 | ); | |
172 | ||
e93329a5 VS |
173 | TRACE_EVENT(g4x_wm, |
174 | TP_PROTO(struct intel_crtc *crtc, const struct g4x_wm_values *wm), | |
175 | TP_ARGS(crtc, wm), | |
176 | ||
177 | TP_STRUCT__entry( | |
178 | __field(enum pipe, pipe) | |
179 | __field(u32, frame) | |
180 | __field(u32, scanline) | |
181 | __field(u16, primary) | |
182 | __field(u16, sprite) | |
183 | __field(u16, cursor) | |
184 | __field(u16, sr_plane) | |
185 | __field(u16, sr_cursor) | |
186 | __field(u16, sr_fbc) | |
187 | __field(u16, hpll_plane) | |
188 | __field(u16, hpll_cursor) | |
189 | __field(u16, hpll_fbc) | |
190 | __field(bool, cxsr) | |
191 | __field(bool, hpll) | |
192 | __field(bool, fbc) | |
193 | ), | |
194 | ||
195 | TP_fast_assign( | |
196 | __entry->pipe = crtc->pipe; | |
4c888e7b | 197 | __entry->frame = intel_crtc_get_vblank_counter(crtc); |
e93329a5 VS |
198 | __entry->scanline = intel_get_crtc_scanline(crtc); |
199 | __entry->primary = wm->pipe[crtc->pipe].plane[PLANE_PRIMARY]; | |
200 | __entry->sprite = wm->pipe[crtc->pipe].plane[PLANE_SPRITE0]; | |
201 | __entry->cursor = wm->pipe[crtc->pipe].plane[PLANE_CURSOR]; | |
202 | __entry->sr_plane = wm->sr.plane; | |
203 | __entry->sr_cursor = wm->sr.cursor; | |
204 | __entry->sr_fbc = wm->sr.fbc; | |
205 | __entry->hpll_plane = wm->hpll.plane; | |
206 | __entry->hpll_cursor = wm->hpll.cursor; | |
207 | __entry->hpll_fbc = wm->hpll.fbc; | |
208 | __entry->cxsr = wm->cxsr; | |
209 | __entry->hpll = wm->hpll_en; | |
210 | __entry->fbc = wm->fbc_en; | |
211 | ), | |
212 | ||
213 | TP_printk("pipe %c, frame=%u, scanline=%u, wm %d/%d/%d, sr %s/%d/%d/%d, hpll %s/%d/%d/%d, fbc %s", | |
214 | pipe_name(__entry->pipe), __entry->frame, __entry->scanline, | |
215 | __entry->primary, __entry->sprite, __entry->cursor, | |
216 | yesno(__entry->cxsr), __entry->sr_plane, __entry->sr_cursor, __entry->sr_fbc, | |
217 | yesno(__entry->hpll), __entry->hpll_plane, __entry->hpll_cursor, __entry->hpll_fbc, | |
218 | yesno(__entry->fbc)) | |
219 | ); | |
220 | ||
c137d660 VS |
221 | TRACE_EVENT(vlv_wm, |
222 | TP_PROTO(struct intel_crtc *crtc, const struct vlv_wm_values *wm), | |
223 | TP_ARGS(crtc, wm), | |
224 | ||
225 | TP_STRUCT__entry( | |
226 | __field(enum pipe, pipe) | |
227 | __field(u32, frame) | |
228 | __field(u32, scanline) | |
229 | __field(u32, level) | |
230 | __field(u32, cxsr) | |
231 | __field(u32, primary) | |
232 | __field(u32, sprite0) | |
233 | __field(u32, sprite1) | |
234 | __field(u32, cursor) | |
235 | __field(u32, sr_plane) | |
236 | __field(u32, sr_cursor) | |
237 | ), | |
238 | ||
239 | TP_fast_assign( | |
240 | __entry->pipe = crtc->pipe; | |
4c888e7b | 241 | __entry->frame = intel_crtc_get_vblank_counter(crtc); |
c137d660 VS |
242 | __entry->scanline = intel_get_crtc_scanline(crtc); |
243 | __entry->level = wm->level; | |
244 | __entry->cxsr = wm->cxsr; | |
245 | __entry->primary = wm->pipe[crtc->pipe].plane[PLANE_PRIMARY]; | |
246 | __entry->sprite0 = wm->pipe[crtc->pipe].plane[PLANE_SPRITE0]; | |
247 | __entry->sprite1 = wm->pipe[crtc->pipe].plane[PLANE_SPRITE1]; | |
248 | __entry->cursor = wm->pipe[crtc->pipe].plane[PLANE_CURSOR]; | |
249 | __entry->sr_plane = wm->sr.plane; | |
250 | __entry->sr_cursor = wm->sr.cursor; | |
251 | ), | |
252 | ||
253 | TP_printk("pipe %c, frame=%u, scanline=%u, level=%d, cxsr=%d, wm %d/%d/%d/%d, sr %d/%d", | |
254 | pipe_name(__entry->pipe), __entry->frame, | |
255 | __entry->scanline, __entry->level, __entry->cxsr, | |
256 | __entry->primary, __entry->sprite0, __entry->sprite1, __entry->cursor, | |
257 | __entry->sr_plane, __entry->sr_cursor) | |
258 | ); | |
259 | ||
260 | TRACE_EVENT(vlv_fifo_size, | |
261 | TP_PROTO(struct intel_crtc *crtc, u32 sprite0_start, u32 sprite1_start, u32 fifo_size), | |
262 | TP_ARGS(crtc, sprite0_start, sprite1_start, fifo_size), | |
263 | ||
264 | TP_STRUCT__entry( | |
265 | __field(enum pipe, pipe) | |
266 | __field(u32, frame) | |
267 | __field(u32, scanline) | |
268 | __field(u32, sprite0_start) | |
269 | __field(u32, sprite1_start) | |
270 | __field(u32, fifo_size) | |
271 | ), | |
272 | ||
273 | TP_fast_assign( | |
274 | __entry->pipe = crtc->pipe; | |
4c888e7b | 275 | __entry->frame = intel_crtc_get_vblank_counter(crtc); |
c137d660 VS |
276 | __entry->scanline = intel_get_crtc_scanline(crtc); |
277 | __entry->sprite0_start = sprite0_start; | |
278 | __entry->sprite1_start = sprite1_start; | |
279 | __entry->fifo_size = fifo_size; | |
280 | ), | |
281 | ||
282 | TP_printk("pipe %c, frame=%u, scanline=%u, %d/%d/%d", | |
283 | pipe_name(__entry->pipe), __entry->frame, | |
284 | __entry->scanline, __entry->sprite0_start, | |
285 | __entry->sprite1_start, __entry->fifo_size) | |
286 | ); | |
287 | ||
72259536 VS |
288 | /* plane updates */ |
289 | ||
290 | TRACE_EVENT(intel_update_plane, | |
291 | TP_PROTO(struct drm_plane *plane, struct intel_crtc *crtc), | |
292 | TP_ARGS(plane, crtc), | |
293 | ||
294 | TP_STRUCT__entry( | |
295 | __field(enum pipe, pipe) | |
72259536 VS |
296 | __field(u32, frame) |
297 | __field(u32, scanline) | |
298 | __array(int, src, 4) | |
299 | __array(int, dst, 4) | |
86c9640b | 300 | __string(name, plane->name) |
72259536 VS |
301 | ), |
302 | ||
303 | TP_fast_assign( | |
86c9640b | 304 | __assign_str(name, plane->name); |
72259536 | 305 | __entry->pipe = crtc->pipe; |
4c888e7b | 306 | __entry->frame = intel_crtc_get_vblank_counter(crtc); |
72259536 VS |
307 | __entry->scanline = intel_get_crtc_scanline(crtc); |
308 | memcpy(__entry->src, &plane->state->src, sizeof(__entry->src)); | |
309 | memcpy(__entry->dst, &plane->state->dst, sizeof(__entry->dst)); | |
310 | ), | |
311 | ||
312 | TP_printk("pipe %c, plane %s, frame=%u, scanline=%u, " DRM_RECT_FP_FMT " -> " DRM_RECT_FMT, | |
86c9640b | 313 | pipe_name(__entry->pipe), __get_str(name), |
72259536 VS |
314 | __entry->frame, __entry->scanline, |
315 | DRM_RECT_FP_ARG((const struct drm_rect *)__entry->src), | |
316 | DRM_RECT_ARG((const struct drm_rect *)__entry->dst)) | |
317 | ); | |
318 | ||
319 | TRACE_EVENT(intel_disable_plane, | |
320 | TP_PROTO(struct drm_plane *plane, struct intel_crtc *crtc), | |
321 | TP_ARGS(plane, crtc), | |
322 | ||
323 | TP_STRUCT__entry( | |
324 | __field(enum pipe, pipe) | |
72259536 VS |
325 | __field(u32, frame) |
326 | __field(u32, scanline) | |
86c9640b | 327 | __string(name, plane->name) |
72259536 VS |
328 | ), |
329 | ||
330 | TP_fast_assign( | |
86c9640b | 331 | __assign_str(name, plane->name); |
72259536 | 332 | __entry->pipe = crtc->pipe; |
4c888e7b | 333 | __entry->frame = intel_crtc_get_vblank_counter(crtc); |
72259536 VS |
334 | __entry->scanline = intel_get_crtc_scanline(crtc); |
335 | ), | |
336 | ||
337 | TP_printk("pipe %c, plane %s, frame=%u, scanline=%u", | |
86c9640b | 338 | pipe_name(__entry->pipe), __get_str(name), |
72259536 VS |
339 | __entry->frame, __entry->scanline) |
340 | ); | |
341 | ||
25ef284a VS |
342 | /* pipe updates */ |
343 | ||
344 | TRACE_EVENT(i915_pipe_update_start, | |
d637ce3f JB |
345 | TP_PROTO(struct intel_crtc *crtc), |
346 | TP_ARGS(crtc), | |
25ef284a VS |
347 | |
348 | TP_STRUCT__entry( | |
349 | __field(enum pipe, pipe) | |
350 | __field(u32, frame) | |
351 | __field(u32, scanline) | |
352 | __field(u32, min) | |
353 | __field(u32, max) | |
354 | ), | |
355 | ||
356 | TP_fast_assign( | |
357 | __entry->pipe = crtc->pipe; | |
4c888e7b | 358 | __entry->frame = intel_crtc_get_vblank_counter(crtc); |
25ef284a | 359 | __entry->scanline = intel_get_crtc_scanline(crtc); |
d637ce3f JB |
360 | __entry->min = crtc->debug.min_vbl; |
361 | __entry->max = crtc->debug.max_vbl; | |
25ef284a VS |
362 | ), |
363 | ||
364 | TP_printk("pipe %c, frame=%u, scanline=%u, min=%u, max=%u", | |
365 | pipe_name(__entry->pipe), __entry->frame, | |
366 | __entry->scanline, __entry->min, __entry->max) | |
367 | ); | |
368 | ||
369 | TRACE_EVENT(i915_pipe_update_vblank_evaded, | |
d637ce3f JB |
370 | TP_PROTO(struct intel_crtc *crtc), |
371 | TP_ARGS(crtc), | |
25ef284a VS |
372 | |
373 | TP_STRUCT__entry( | |
374 | __field(enum pipe, pipe) | |
375 | __field(u32, frame) | |
376 | __field(u32, scanline) | |
377 | __field(u32, min) | |
378 | __field(u32, max) | |
379 | ), | |
380 | ||
381 | TP_fast_assign( | |
382 | __entry->pipe = crtc->pipe; | |
d637ce3f JB |
383 | __entry->frame = crtc->debug.start_vbl_count; |
384 | __entry->scanline = crtc->debug.scanline_start; | |
385 | __entry->min = crtc->debug.min_vbl; | |
386 | __entry->max = crtc->debug.max_vbl; | |
25ef284a VS |
387 | ), |
388 | ||
389 | TP_printk("pipe %c, frame=%u, scanline=%u, min=%u, max=%u", | |
390 | pipe_name(__entry->pipe), __entry->frame, | |
391 | __entry->scanline, __entry->min, __entry->max) | |
392 | ); | |
393 | ||
394 | TRACE_EVENT(i915_pipe_update_end, | |
d637ce3f JB |
395 | TP_PROTO(struct intel_crtc *crtc, u32 frame, int scanline_end), |
396 | TP_ARGS(crtc, frame, scanline_end), | |
25ef284a VS |
397 | |
398 | TP_STRUCT__entry( | |
399 | __field(enum pipe, pipe) | |
400 | __field(u32, frame) | |
401 | __field(u32, scanline) | |
402 | ), | |
403 | ||
404 | TP_fast_assign( | |
405 | __entry->pipe = crtc->pipe; | |
406 | __entry->frame = frame; | |
d637ce3f | 407 | __entry->scanline = scanline_end; |
25ef284a VS |
408 | ), |
409 | ||
410 | TP_printk("pipe %c, frame=%u, scanline=%u", | |
411 | pipe_name(__entry->pipe), __entry->frame, | |
412 | __entry->scanline) | |
413 | ); | |
414 | ||
1c5d22f7 CW |
415 | /* object tracking */ |
416 | ||
417 | TRACE_EVENT(i915_gem_object_create, | |
05394f39 | 418 | TP_PROTO(struct drm_i915_gem_object *obj), |
1c5d22f7 CW |
419 | TP_ARGS(obj), |
420 | ||
421 | TP_STRUCT__entry( | |
05394f39 | 422 | __field(struct drm_i915_gem_object *, obj) |
6c1fa341 | 423 | __field(u64, size) |
1c5d22f7 CW |
424 | ), |
425 | ||
426 | TP_fast_assign( | |
427 | __entry->obj = obj; | |
05394f39 | 428 | __entry->size = obj->base.size; |
1c5d22f7 CW |
429 | ), |
430 | ||
6c1fa341 | 431 | TP_printk("obj=%p, size=0x%llx", __entry->obj, __entry->size) |
1c5d22f7 CW |
432 | ); |
433 | ||
3abafa53 CW |
434 | TRACE_EVENT(i915_gem_shrink, |
435 | TP_PROTO(struct drm_i915_private *i915, unsigned long target, unsigned flags), | |
436 | TP_ARGS(i915, target, flags), | |
437 | ||
438 | TP_STRUCT__entry( | |
439 | __field(int, dev) | |
440 | __field(unsigned long, target) | |
441 | __field(unsigned, flags) | |
442 | ), | |
443 | ||
444 | TP_fast_assign( | |
91c8a326 | 445 | __entry->dev = i915->drm.primary->index; |
3abafa53 CW |
446 | __entry->target = target; |
447 | __entry->flags = flags; | |
448 | ), | |
449 | ||
450 | TP_printk("dev=%d, target=%lu, flags=%x", | |
451 | __entry->dev, __entry->target, __entry->flags) | |
452 | ); | |
453 | ||
07fe0b12 | 454 | TRACE_EVENT(i915_vma_bind, |
1ec9e26d DV |
455 | TP_PROTO(struct i915_vma *vma, unsigned flags), |
456 | TP_ARGS(vma, flags), | |
1c5d22f7 CW |
457 | |
458 | TP_STRUCT__entry( | |
05394f39 | 459 | __field(struct drm_i915_gem_object *, obj) |
07fe0b12 | 460 | __field(struct i915_address_space *, vm) |
33938714 | 461 | __field(u64, offset) |
6c1fa341 | 462 | __field(u64, size) |
1ec9e26d | 463 | __field(unsigned, flags) |
1c5d22f7 CW |
464 | ), |
465 | ||
466 | TP_fast_assign( | |
07fe0b12 BW |
467 | __entry->obj = vma->obj; |
468 | __entry->vm = vma->vm; | |
469 | __entry->offset = vma->node.start; | |
470 | __entry->size = vma->node.size; | |
1ec9e26d | 471 | __entry->flags = flags; |
1c5d22f7 CW |
472 | ), |
473 | ||
6c1fa341 | 474 | TP_printk("obj=%p, offset=0x%016llx size=0x%llx%s vm=%p", |
db53a302 | 475 | __entry->obj, __entry->offset, __entry->size, |
1ec9e26d | 476 | __entry->flags & PIN_MAPPABLE ? ", mappable" : "", |
07fe0b12 | 477 | __entry->vm) |
1c5d22f7 CW |
478 | ); |
479 | ||
07fe0b12 BW |
480 | TRACE_EVENT(i915_vma_unbind, |
481 | TP_PROTO(struct i915_vma *vma), | |
482 | TP_ARGS(vma), | |
db53a302 CW |
483 | |
484 | TP_STRUCT__entry( | |
485 | __field(struct drm_i915_gem_object *, obj) | |
07fe0b12 | 486 | __field(struct i915_address_space *, vm) |
33938714 | 487 | __field(u64, offset) |
6c1fa341 | 488 | __field(u64, size) |
db53a302 | 489 | ), |
1c5d22f7 | 490 | |
db53a302 | 491 | TP_fast_assign( |
07fe0b12 BW |
492 | __entry->obj = vma->obj; |
493 | __entry->vm = vma->vm; | |
494 | __entry->offset = vma->node.start; | |
495 | __entry->size = vma->node.size; | |
db53a302 | 496 | ), |
1c5d22f7 | 497 | |
6c1fa341 | 498 | TP_printk("obj=%p, offset=0x%016llx size=0x%llx vm=%p", |
07fe0b12 | 499 | __entry->obj, __entry->offset, __entry->size, __entry->vm) |
db53a302 CW |
500 | ); |
501 | ||
db53a302 | 502 | TRACE_EVENT(i915_gem_object_pwrite, |
6c1fa341 | 503 | TP_PROTO(struct drm_i915_gem_object *obj, u64 offset, u64 len), |
db53a302 | 504 | TP_ARGS(obj, offset, len), |
1c5d22f7 | 505 | |
db53a302 CW |
506 | TP_STRUCT__entry( |
507 | __field(struct drm_i915_gem_object *, obj) | |
6c1fa341 CW |
508 | __field(u64, offset) |
509 | __field(u64, len) | |
db53a302 | 510 | ), |
1c5d22f7 | 511 | |
db53a302 CW |
512 | TP_fast_assign( |
513 | __entry->obj = obj; | |
514 | __entry->offset = offset; | |
515 | __entry->len = len; | |
516 | ), | |
517 | ||
6c1fa341 | 518 | TP_printk("obj=%p, offset=0x%llx, len=0x%llx", |
db53a302 CW |
519 | __entry->obj, __entry->offset, __entry->len) |
520 | ); | |
521 | ||
522 | TRACE_EVENT(i915_gem_object_pread, | |
6c1fa341 | 523 | TP_PROTO(struct drm_i915_gem_object *obj, u64 offset, u64 len), |
db53a302 | 524 | TP_ARGS(obj, offset, len), |
1c5d22f7 CW |
525 | |
526 | TP_STRUCT__entry( | |
05394f39 | 527 | __field(struct drm_i915_gem_object *, obj) |
6c1fa341 CW |
528 | __field(u64, offset) |
529 | __field(u64, len) | |
1c5d22f7 CW |
530 | ), |
531 | ||
532 | TP_fast_assign( | |
533 | __entry->obj = obj; | |
db53a302 CW |
534 | __entry->offset = offset; |
535 | __entry->len = len; | |
1c5d22f7 CW |
536 | ), |
537 | ||
6c1fa341 | 538 | TP_printk("obj=%p, offset=0x%llx, len=0x%llx", |
db53a302 | 539 | __entry->obj, __entry->offset, __entry->len) |
1c5d22f7 CW |
540 | ); |
541 | ||
db53a302 | 542 | TRACE_EVENT(i915_gem_object_fault, |
6c1fa341 | 543 | TP_PROTO(struct drm_i915_gem_object *obj, u64 index, bool gtt, bool write), |
db53a302 CW |
544 | TP_ARGS(obj, index, gtt, write), |
545 | ||
546 | TP_STRUCT__entry( | |
547 | __field(struct drm_i915_gem_object *, obj) | |
6c1fa341 | 548 | __field(u64, index) |
db53a302 CW |
549 | __field(bool, gtt) |
550 | __field(bool, write) | |
551 | ), | |
552 | ||
553 | TP_fast_assign( | |
554 | __entry->obj = obj; | |
555 | __entry->index = index; | |
556 | __entry->gtt = gtt; | |
557 | __entry->write = write; | |
558 | ), | |
f41275e8 | 559 | |
6c1fa341 | 560 | TP_printk("obj=%p, %s index=%llu %s", |
db53a302 CW |
561 | __entry->obj, |
562 | __entry->gtt ? "GTT" : "CPU", | |
563 | __entry->index, | |
564 | __entry->write ? ", writable" : "") | |
565 | ); | |
566 | ||
567 | DECLARE_EVENT_CLASS(i915_gem_object, | |
05394f39 | 568 | TP_PROTO(struct drm_i915_gem_object *obj), |
db53a302 | 569 | TP_ARGS(obj), |
f41275e8 | 570 | |
db53a302 CW |
571 | TP_STRUCT__entry( |
572 | __field(struct drm_i915_gem_object *, obj) | |
573 | ), | |
574 | ||
575 | TP_fast_assign( | |
576 | __entry->obj = obj; | |
577 | ), | |
578 | ||
579 | TP_printk("obj=%p", __entry->obj) | |
f41275e8 LZ |
580 | ); |
581 | ||
db53a302 CW |
582 | DEFINE_EVENT(i915_gem_object, i915_gem_object_clflush, |
583 | TP_PROTO(struct drm_i915_gem_object *obj), | |
584 | TP_ARGS(obj) | |
585 | ); | |
1c5d22f7 | 586 | |
db53a302 | 587 | DEFINE_EVENT(i915_gem_object, i915_gem_object_destroy, |
05394f39 | 588 | TP_PROTO(struct drm_i915_gem_object *obj), |
903cf20c LZ |
589 | TP_ARGS(obj) |
590 | ); | |
1c5d22f7 | 591 | |
db53a302 | 592 | TRACE_EVENT(i915_gem_evict, |
6c1fa341 | 593 | TP_PROTO(struct i915_address_space *vm, u64 size, u64 align, unsigned int flags), |
e522ac23 | 594 | TP_ARGS(vm, size, align, flags), |
1c5d22f7 | 595 | |
db53a302 CW |
596 | TP_STRUCT__entry( |
597 | __field(u32, dev) | |
e522ac23 | 598 | __field(struct i915_address_space *, vm) |
6c1fa341 CW |
599 | __field(u64, size) |
600 | __field(u64, align) | |
e522ac23 | 601 | __field(unsigned int, flags) |
db53a302 | 602 | ), |
1c5d22f7 | 603 | |
db53a302 | 604 | TP_fast_assign( |
c6385c94 | 605 | __entry->dev = vm->i915->drm.primary->index; |
e522ac23 | 606 | __entry->vm = vm; |
db53a302 CW |
607 | __entry->size = size; |
608 | __entry->align = align; | |
1ec9e26d | 609 | __entry->flags = flags; |
db53a302 CW |
610 | ), |
611 | ||
6c1fa341 | 612 | TP_printk("dev=%d, vm=%p, size=0x%llx, align=0x%llx %s", |
e522ac23 | 613 | __entry->dev, __entry->vm, __entry->size, __entry->align, |
1ec9e26d | 614 | __entry->flags & PIN_MAPPABLE ? ", mappable" : "") |
1c5d22f7 CW |
615 | ); |
616 | ||
625d988a CW |
617 | TRACE_EVENT(i915_gem_evict_node, |
618 | TP_PROTO(struct i915_address_space *vm, struct drm_mm_node *node, unsigned int flags), | |
619 | TP_ARGS(vm, node, flags), | |
172ae5b4 CW |
620 | |
621 | TP_STRUCT__entry( | |
622 | __field(u32, dev) | |
623 | __field(struct i915_address_space *, vm) | |
624 | __field(u64, start) | |
625 | __field(u64, size) | |
626 | __field(unsigned long, color) | |
627 | __field(unsigned int, flags) | |
628 | ), | |
629 | ||
630 | TP_fast_assign( | |
625d988a CW |
631 | __entry->dev = vm->i915->drm.primary->index; |
632 | __entry->vm = vm; | |
633 | __entry->start = node->start; | |
634 | __entry->size = node->size; | |
635 | __entry->color = node->color; | |
172ae5b4 CW |
636 | __entry->flags = flags; |
637 | ), | |
638 | ||
6c1fa341 | 639 | TP_printk("dev=%d, vm=%p, start=0x%llx size=0x%llx, color=0x%lx, flags=%x", |
172ae5b4 CW |
640 | __entry->dev, __entry->vm, |
641 | __entry->start, __entry->size, | |
642 | __entry->color, __entry->flags) | |
643 | ); | |
644 | ||
65921223 CW |
645 | TRACE_EVENT(i915_gem_evict_vm, |
646 | TP_PROTO(struct i915_address_space *vm), | |
647 | TP_ARGS(vm), | |
648 | ||
649 | TP_STRUCT__entry( | |
650 | __field(u32, dev) | |
651 | __field(struct i915_address_space *, vm) | |
652 | ), | |
653 | ||
654 | TP_fast_assign( | |
655 | __entry->dev = vm->i915->drm.primary->index; | |
656 | __entry->vm = vm; | |
657 | ), | |
658 | ||
659 | TP_printk("dev=%d, vm=%p", __entry->dev, __entry->vm) | |
660 | ); | |
661 | ||
e61e0f51 CW |
662 | TRACE_EVENT(i915_request_queue, |
663 | TP_PROTO(struct i915_request *rq, u32 flags), | |
664 | TP_ARGS(rq, flags), | |
1c5d22f7 CW |
665 | |
666 | TP_STRUCT__entry( | |
4f49be54 | 667 | __field(u32, dev) |
151a99ec | 668 | __field(u32, hw_id) |
57d7116c | 669 | __field(u64, ctx) |
2956e970 TU |
670 | __field(u16, class) |
671 | __field(u16, instance) | |
1c5d22f7 | 672 | __field(u32, seqno) |
d7d4eedd | 673 | __field(u32, flags) |
1c5d22f7 CW |
674 | ), |
675 | ||
676 | TP_fast_assign( | |
e61e0f51 | 677 | __entry->dev = rq->i915->drm.primary->index; |
4e0d64db | 678 | __entry->hw_id = rq->gem_context->hw_id; |
2956e970 | 679 | __entry->class = rq->engine->uabi_class; |
750e76b4 | 680 | __entry->instance = rq->engine->uabi_instance; |
e61e0f51 CW |
681 | __entry->ctx = rq->fence.context; |
682 | __entry->seqno = rq->fence.seqno; | |
d7d4eedd | 683 | __entry->flags = flags; |
1c5d22f7 CW |
684 | ), |
685 | ||
57d7116c | 686 | TP_printk("dev=%u, engine=%u:%u, hw_id=%u, ctx=%llu, seqno=%u, flags=0x%x", |
f24e74a7 TU |
687 | __entry->dev, __entry->class, __entry->instance, |
688 | __entry->hw_id, __entry->ctx, __entry->seqno, | |
2956e970 | 689 | __entry->flags) |
1c5d22f7 CW |
690 | ); |
691 | ||
e61e0f51 CW |
692 | DECLARE_EVENT_CLASS(i915_request, |
693 | TP_PROTO(struct i915_request *rq), | |
694 | TP_ARGS(rq), | |
1c5d22f7 CW |
695 | |
696 | TP_STRUCT__entry( | |
4f49be54 | 697 | __field(u32, dev) |
151a99ec | 698 | __field(u32, hw_id) |
57d7116c | 699 | __field(u64, ctx) |
2956e970 TU |
700 | __field(u16, class) |
701 | __field(u16, instance) | |
1c5d22f7 CW |
702 | __field(u32, seqno) |
703 | ), | |
704 | ||
705 | TP_fast_assign( | |
e61e0f51 | 706 | __entry->dev = rq->i915->drm.primary->index; |
4e0d64db | 707 | __entry->hw_id = rq->gem_context->hw_id; |
2956e970 | 708 | __entry->class = rq->engine->uabi_class; |
750e76b4 | 709 | __entry->instance = rq->engine->uabi_instance; |
e61e0f51 CW |
710 | __entry->ctx = rq->fence.context; |
711 | __entry->seqno = rq->fence.seqno; | |
1c5d22f7 CW |
712 | ), |
713 | ||
b300fde8 | 714 | TP_printk("dev=%u, engine=%u:%u, hw_id=%u, ctx=%llu, seqno=%u", |
f24e74a7 | 715 | __entry->dev, __entry->class, __entry->instance, |
b300fde8 | 716 | __entry->hw_id, __entry->ctx, __entry->seqno) |
1c5d22f7 CW |
717 | ); |
718 | ||
e61e0f51 CW |
719 | DEFINE_EVENT(i915_request, i915_request_add, |
720 | TP_PROTO(struct i915_request *rq), | |
721 | TP_ARGS(rq) | |
db53a302 | 722 | ); |
1c5d22f7 | 723 | |
354d036f | 724 | #if defined(CONFIG_DRM_I915_LOW_LEVEL_TRACEPOINTS) |
e61e0f51 CW |
725 | DEFINE_EVENT(i915_request, i915_request_submit, |
726 | TP_PROTO(struct i915_request *rq), | |
727 | TP_ARGS(rq) | |
354d036f TU |
728 | ); |
729 | ||
e61e0f51 CW |
730 | DEFINE_EVENT(i915_request, i915_request_execute, |
731 | TP_PROTO(struct i915_request *rq), | |
732 | TP_ARGS(rq) | |
354d036f | 733 | ); |
d7d96833 | 734 | |
f2742e47 TU |
735 | TRACE_EVENT(i915_request_in, |
736 | TP_PROTO(struct i915_request *rq, unsigned int port), | |
737 | TP_ARGS(rq, port), | |
738 | ||
739 | TP_STRUCT__entry( | |
740 | __field(u32, dev) | |
741 | __field(u32, hw_id) | |
57d7116c | 742 | __field(u64, ctx) |
2956e970 TU |
743 | __field(u16, class) |
744 | __field(u16, instance) | |
f2742e47 | 745 | __field(u32, seqno) |
f2742e47 TU |
746 | __field(u32, port) |
747 | __field(u32, prio) | |
748 | ), | |
d7d96833 | 749 | |
f2742e47 TU |
750 | TP_fast_assign( |
751 | __entry->dev = rq->i915->drm.primary->index; | |
4e0d64db | 752 | __entry->hw_id = rq->gem_context->hw_id; |
2956e970 | 753 | __entry->class = rq->engine->uabi_class; |
750e76b4 | 754 | __entry->instance = rq->engine->uabi_instance; |
f2742e47 TU |
755 | __entry->ctx = rq->fence.context; |
756 | __entry->seqno = rq->fence.seqno; | |
f2742e47 TU |
757 | __entry->prio = rq->sched.attr.priority; |
758 | __entry->port = port; | |
759 | ), | |
760 | ||
b300fde8 | 761 | TP_printk("dev=%u, engine=%u:%u, hw_id=%u, ctx=%llu, seqno=%u, prio=%u, port=%u", |
f24e74a7 TU |
762 | __entry->dev, __entry->class, __entry->instance, |
763 | __entry->hw_id, __entry->ctx, __entry->seqno, | |
b300fde8 | 764 | __entry->prio, __entry->port) |
d7d96833 TU |
765 | ); |
766 | ||
f2742e47 TU |
767 | TRACE_EVENT(i915_request_out, |
768 | TP_PROTO(struct i915_request *rq), | |
769 | TP_ARGS(rq), | |
770 | ||
771 | TP_STRUCT__entry( | |
772 | __field(u32, dev) | |
773 | __field(u32, hw_id) | |
57d7116c | 774 | __field(u64, ctx) |
2956e970 TU |
775 | __field(u16, class) |
776 | __field(u16, instance) | |
f2742e47 | 777 | __field(u32, seqno) |
f2742e47 TU |
778 | __field(u32, completed) |
779 | ), | |
780 | ||
781 | TP_fast_assign( | |
782 | __entry->dev = rq->i915->drm.primary->index; | |
4e0d64db | 783 | __entry->hw_id = rq->gem_context->hw_id; |
2956e970 | 784 | __entry->class = rq->engine->uabi_class; |
750e76b4 | 785 | __entry->instance = rq->engine->uabi_instance; |
f2742e47 TU |
786 | __entry->ctx = rq->fence.context; |
787 | __entry->seqno = rq->fence.seqno; | |
f2742e47 TU |
788 | __entry->completed = i915_request_completed(rq); |
789 | ), | |
790 | ||
b300fde8 | 791 | TP_printk("dev=%u, engine=%u:%u, hw_id=%u, ctx=%llu, seqno=%u, completed?=%u", |
f24e74a7 TU |
792 | __entry->dev, __entry->class, __entry->instance, |
793 | __entry->hw_id, __entry->ctx, __entry->seqno, | |
b300fde8 | 794 | __entry->completed) |
d7d96833 | 795 | ); |
f2742e47 | 796 | |
354d036f TU |
797 | #else |
798 | #if !defined(TRACE_HEADER_MULTI_READ) | |
799 | static inline void | |
e61e0f51 | 800 | trace_i915_request_submit(struct i915_request *rq) |
354d036f TU |
801 | { |
802 | } | |
803 | ||
804 | static inline void | |
e61e0f51 | 805 | trace_i915_request_execute(struct i915_request *rq) |
354d036f TU |
806 | { |
807 | } | |
d7d96833 TU |
808 | |
809 | static inline void | |
e61e0f51 | 810 | trace_i915_request_in(struct i915_request *rq, unsigned int port) |
d7d96833 TU |
811 | { |
812 | } | |
813 | ||
814 | static inline void | |
e61e0f51 | 815 | trace_i915_request_out(struct i915_request *rq) |
d7d96833 TU |
816 | { |
817 | } | |
354d036f TU |
818 | #endif |
819 | #endif | |
820 | ||
e61e0f51 CW |
821 | DEFINE_EVENT(i915_request, i915_request_retire, |
822 | TP_PROTO(struct i915_request *rq), | |
823 | TP_ARGS(rq) | |
1c5d22f7 CW |
824 | ); |
825 | ||
e61e0f51 CW |
826 | TRACE_EVENT(i915_request_wait_begin, |
827 | TP_PROTO(struct i915_request *rq, unsigned int flags), | |
828 | TP_ARGS(rq, flags), | |
f3fd3768 BW |
829 | |
830 | TP_STRUCT__entry( | |
831 | __field(u32, dev) | |
151a99ec | 832 | __field(u32, hw_id) |
57d7116c | 833 | __field(u64, ctx) |
2956e970 TU |
834 | __field(u16, class) |
835 | __field(u16, instance) | |
f3fd3768 | 836 | __field(u32, seqno) |
93692502 | 837 | __field(unsigned int, flags) |
f3fd3768 BW |
838 | ), |
839 | ||
840 | /* NB: the blocking information is racy since mutex_is_locked | |
841 | * doesn't check that the current thread holds the lock. The only | |
842 | * other option would be to pass the boolean information of whether | |
843 | * or not the class was blocking down through the stack which is | |
844 | * less desirable. | |
845 | */ | |
846 | TP_fast_assign( | |
e61e0f51 | 847 | __entry->dev = rq->i915->drm.primary->index; |
4e0d64db | 848 | __entry->hw_id = rq->gem_context->hw_id; |
2956e970 | 849 | __entry->class = rq->engine->uabi_class; |
750e76b4 | 850 | __entry->instance = rq->engine->uabi_instance; |
e61e0f51 CW |
851 | __entry->ctx = rq->fence.context; |
852 | __entry->seqno = rq->fence.seqno; | |
93692502 | 853 | __entry->flags = flags; |
f3fd3768 BW |
854 | ), |
855 | ||
2f530945 | 856 | TP_printk("dev=%u, engine=%u:%u, hw_id=%u, ctx=%llu, seqno=%u, flags=0x%x", |
f24e74a7 TU |
857 | __entry->dev, __entry->class, __entry->instance, |
858 | __entry->hw_id, __entry->ctx, __entry->seqno, | |
2956e970 | 859 | __entry->flags) |
903cf20c | 860 | ); |
1c5d22f7 | 861 | |
e61e0f51 CW |
862 | DEFINE_EVENT(i915_request, i915_request_wait_end, |
863 | TP_PROTO(struct i915_request *rq), | |
864 | TP_ARGS(rq) | |
1c5d22f7 CW |
865 | ); |
866 | ||
ed71f1b4 | 867 | TRACE_EVENT_CONDITION(i915_reg_rw, |
f0f59a00 | 868 | TP_PROTO(bool write, i915_reg_t reg, u64 val, int len, bool trace), |
0206e353 | 869 | |
ed71f1b4 CW |
870 | TP_ARGS(write, reg, val, len, trace), |
871 | ||
872 | TP_CONDITION(trace), | |
0206e353 AJ |
873 | |
874 | TP_STRUCT__entry( | |
875 | __field(u64, val) | |
876 | __field(u32, reg) | |
877 | __field(u16, write) | |
878 | __field(u16, len) | |
879 | ), | |
880 | ||
881 | TP_fast_assign( | |
882 | __entry->val = (u64)val; | |
f0f59a00 | 883 | __entry->reg = i915_mmio_reg_offset(reg); |
0206e353 AJ |
884 | __entry->write = write; |
885 | __entry->len = len; | |
886 | ), | |
887 | ||
888 | TP_printk("%s reg=0x%x, len=%d, val=(0x%x, 0x%x)", | |
889 | __entry->write ? "write" : "read", | |
890 | __entry->reg, __entry->len, | |
891 | (u32)(__entry->val & 0xffffffff), | |
892 | (u32)(__entry->val >> 32)) | |
ba4f01a3 YL |
893 | ); |
894 | ||
be2cde9a DV |
895 | TRACE_EVENT(intel_gpu_freq_change, |
896 | TP_PROTO(u32 freq), | |
897 | TP_ARGS(freq), | |
898 | ||
899 | TP_STRUCT__entry( | |
900 | __field(u32, freq) | |
901 | ), | |
902 | ||
903 | TP_fast_assign( | |
904 | __entry->freq = freq; | |
905 | ), | |
906 | ||
907 | TP_printk("new_freq=%u", __entry->freq) | |
908 | ); | |
909 | ||
198c974d DCS |
910 | /** |
911 | * DOC: i915_ppgtt_create and i915_ppgtt_release tracepoints | |
912 | * | |
913 | * With full ppgtt enabled each process using drm will allocate at least one | |
914 | * translation table. With these traces it is possible to keep track of the | |
915 | * allocation and of the lifetime of the tables; this can be used during | |
916 | * testing/debug to verify that we are not leaking ppgtts. | |
917 | * These traces identify the ppgtt through the vm pointer, which is also printed | |
918 | * by the i915_vma_bind and i915_vma_unbind tracepoints. | |
919 | */ | |
920 | DECLARE_EVENT_CLASS(i915_ppgtt, | |
921 | TP_PROTO(struct i915_address_space *vm), | |
922 | TP_ARGS(vm), | |
923 | ||
924 | TP_STRUCT__entry( | |
925 | __field(struct i915_address_space *, vm) | |
926 | __field(u32, dev) | |
927 | ), | |
928 | ||
929 | TP_fast_assign( | |
930 | __entry->vm = vm; | |
c6385c94 | 931 | __entry->dev = vm->i915->drm.primary->index; |
198c974d DCS |
932 | ), |
933 | ||
934 | TP_printk("dev=%u, vm=%p", __entry->dev, __entry->vm) | |
935 | ) | |
936 | ||
937 | DEFINE_EVENT(i915_ppgtt, i915_ppgtt_create, | |
938 | TP_PROTO(struct i915_address_space *vm), | |
939 | TP_ARGS(vm) | |
940 | ); | |
941 | ||
942 | DEFINE_EVENT(i915_ppgtt, i915_ppgtt_release, | |
943 | TP_PROTO(struct i915_address_space *vm), | |
944 | TP_ARGS(vm) | |
945 | ); | |
946 | ||
947 | /** | |
948 | * DOC: i915_context_create and i915_context_free tracepoints | |
949 | * | |
950 | * These tracepoints are used to track creation and deletion of contexts. | |
951 | * If full ppgtt is enabled, they also print the address of the vm assigned to | |
952 | * the context. | |
953 | */ | |
954 | DECLARE_EVENT_CLASS(i915_context, | |
e2efd130 | 955 | TP_PROTO(struct i915_gem_context *ctx), |
198c974d DCS |
956 | TP_ARGS(ctx), |
957 | ||
958 | TP_STRUCT__entry( | |
959 | __field(u32, dev) | |
e2efd130 | 960 | __field(struct i915_gem_context *, ctx) |
99c181a0 | 961 | __field(u32, hw_id) |
198c974d DCS |
962 | __field(struct i915_address_space *, vm) |
963 | ), | |
964 | ||
965 | TP_fast_assign( | |
99c181a0 | 966 | __entry->dev = ctx->i915->drm.primary->index; |
198c974d | 967 | __entry->ctx = ctx; |
99c181a0 | 968 | __entry->hw_id = ctx->hw_id; |
e568ac38 | 969 | __entry->vm = ctx->vm; |
198c974d DCS |
970 | ), |
971 | ||
99c181a0 TU |
972 | TP_printk("dev=%u, ctx=%p, ctx_vm=%p, hw_id=%u", |
973 | __entry->dev, __entry->ctx, __entry->vm, __entry->hw_id) | |
198c974d DCS |
974 | ) |
975 | ||
976 | DEFINE_EVENT(i915_context, i915_context_create, | |
e2efd130 | 977 | TP_PROTO(struct i915_gem_context *ctx), |
198c974d DCS |
978 | TP_ARGS(ctx) |
979 | ); | |
980 | ||
981 | DEFINE_EVENT(i915_context, i915_context_free, | |
e2efd130 | 982 | TP_PROTO(struct i915_gem_context *ctx), |
198c974d DCS |
983 | TP_ARGS(ctx) |
984 | ); | |
985 | ||
1c5d22f7 CW |
986 | #endif /* _I915_TRACE_H_ */ |
987 | ||
988 | /* This part must be outside protection */ | |
989 | #undef TRACE_INCLUDE_PATH | |
4e6d7719 | 990 | #define TRACE_INCLUDE_PATH ../../drivers/gpu/drm/i915 |
1c5d22f7 | 991 | #include <trace/define_trace.h> |