aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichel Thierry <michel.thierry@intel.com>2015-03-24 11:46:23 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2015-03-27 04:25:44 -0400
commit72744cb13c9ccc248331462f35468398160338bf (patch)
tree5b336e6441449e8cf877be67a98da0ef35395aa3
parent4933d51955aca6d2b05da5a7afe25f156016dfa8 (diff)
drm/i915: Add dynamic page trace events
Traces for page directories and tables allocation and map. v2: Removed references to teardown. v3: bitmap_scnprintf has been deprecated. v4: Replace bitmap_scnprintf with scnprintf correctly, and get right range lengths. (Mika) Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com> Signed-off-by: Michel Thierry <michel.thierry@intel.com> Reviewed-by: Mika Kuoppala <mika.kuoppala@intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-rw-r--r--drivers/gpu/drm/i915/i915_gem.c2
-rw-r--r--drivers/gpu/drm/i915/i915_gem_gtt.c5
-rw-r--r--drivers/gpu/drm/i915/i915_trace.h99
3 files changed, 106 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 538cae2ca94e..c13e65994654 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -3512,6 +3512,8 @@ search_free:
3512 3512
3513 /* allocate before insert / bind */ 3513 /* allocate before insert / bind */
3514 if (vma->vm->allocate_va_range) { 3514 if (vma->vm->allocate_va_range) {
3515 trace_i915_va_alloc(vma->vm, vma->node.start, vma->node.size,
3516 VM_TO_TRACE_NAME(vma->vm));
3515 ret = vma->vm->allocate_va_range(vma->vm, 3517 ret = vma->vm->allocate_va_range(vma->vm,
3516 vma->node.start, 3518 vma->node.start,
3517 vma->node.size); 3519 vma->node.size);
diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c b/drivers/gpu/drm/i915/i915_gem_gtt.c
index 641d3f45aa1e..e33b1214c4d8 100644
--- a/drivers/gpu/drm/i915/i915_gem_gtt.c
+++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
@@ -1225,6 +1225,7 @@ static int gen6_alloc_va_range(struct i915_address_space *vm,
1225 1225
1226 ppgtt->pd.page_table[pde] = pt; 1226 ppgtt->pd.page_table[pde] = pt;
1227 set_bit(pde, new_page_tables); 1227 set_bit(pde, new_page_tables);
1228 trace_i915_page_table_entry_alloc(vm, pde, start, GEN6_PDE_SHIFT);
1228 } 1229 }
1229 1230
1230 start = start_save; 1231 start = start_save;
@@ -1240,6 +1241,10 @@ static int gen6_alloc_va_range(struct i915_address_space *vm,
1240 if (test_and_clear_bit(pde, new_page_tables)) 1241 if (test_and_clear_bit(pde, new_page_tables))
1241 gen6_write_pde(&ppgtt->pd, pde, pt); 1242 gen6_write_pde(&ppgtt->pd, pde, pt);
1242 1243
1244 trace_i915_page_table_entry_map(vm, pde, pt,
1245 gen6_pte_index(start),
1246 gen6_pte_count(start, length),
1247 GEN6_PTES);
1243 bitmap_or(pt->used_ptes, tmp_bitmap, pt->used_ptes, 1248 bitmap_or(pt->used_ptes, tmp_bitmap, pt->used_ptes,
1244 GEN6_PTES); 1249 GEN6_PTES);
1245 } 1250 }
diff --git a/drivers/gpu/drm/i915/i915_trace.h b/drivers/gpu/drm/i915/i915_trace.h
index f004d3d89b87..b3070a4501ab 100644
--- a/drivers/gpu/drm/i915/i915_trace.h
+++ b/drivers/gpu/drm/i915/i915_trace.h
@@ -156,6 +156,105 @@ TRACE_EVENT(i915_vma_unbind,
156 __entry->obj, __entry->offset, __entry->size, __entry->vm) 156 __entry->obj, __entry->offset, __entry->size, __entry->vm)
157); 157);
158 158
159#define VM_TO_TRACE_NAME(vm) \
160 (i915_is_ggtt(vm) ? "G" : \
161 "P")
162
163DECLARE_EVENT_CLASS(i915_va,
164 TP_PROTO(struct i915_address_space *vm, u64 start, u64 length, const char *name),
165 TP_ARGS(vm, start, length, name),
166
167 TP_STRUCT__entry(
168 __field(struct i915_address_space *, vm)
169 __field(u64, start)
170 __field(u64, end)
171 __string(name, name)
172 ),
173
174 TP_fast_assign(
175 __entry->vm = vm;
176 __entry->start = start;
177 __entry->end = start + length - 1;
178 __assign_str(name, name);
179 ),
180
181 TP_printk("vm=%p (%s), 0x%llx-0x%llx",
182 __entry->vm, __get_str(name), __entry->start, __entry->end)
183);
184
185DEFINE_EVENT(i915_va, i915_va_alloc,
186 TP_PROTO(struct i915_address_space *vm, u64 start, u64 length, const char *name),
187 TP_ARGS(vm, start, length, name)
188);
189
190DECLARE_EVENT_CLASS(i915_page_table_entry,
191 TP_PROTO(struct i915_address_space *vm, u32 pde, u64 start, u64 pde_shift),
192 TP_ARGS(vm, pde, start, pde_shift),
193
194 TP_STRUCT__entry(
195 __field(struct i915_address_space *, vm)
196 __field(u32, pde)
197 __field(u64, start)
198 __field(u64, end)
199 ),
200
201 TP_fast_assign(
202 __entry->vm = vm;
203 __entry->pde = pde;
204 __entry->start = start;
205 __entry->end = ((start + (1ULL << pde_shift)) & ~((1ULL << pde_shift)-1)) - 1;
206 ),
207
208 TP_printk("vm=%p, pde=%d (0x%llx-0x%llx)",
209 __entry->vm, __entry->pde, __entry->start, __entry->end)
210);
211
212DEFINE_EVENT(i915_page_table_entry, i915_page_table_entry_alloc,
213 TP_PROTO(struct i915_address_space *vm, u32 pde, u64 start, u64 pde_shift),
214 TP_ARGS(vm, pde, start, pde_shift)
215);
216
217/* Avoid extra math because we only support two sizes. The format is defined by
218 * bitmap_scnprintf. Each 32 bits is 8 HEX digits followed by comma */
219#define TRACE_PT_SIZE(bits) \
220 ((((bits) == 1024) ? 288 : 144) + 1)
221
222DECLARE_EVENT_CLASS(i915_page_table_entry_update,
223 TP_PROTO(struct i915_address_space *vm, u32 pde,
224 struct i915_page_table_entry *pt, u32 first, u32 count, u32 bits),
225 TP_ARGS(vm, pde, pt, first, count, bits),
226
227 TP_STRUCT__entry(
228 __field(struct i915_address_space *, vm)
229 __field(u32, pde)
230 __field(u32, first)
231 __field(u32, last)
232 __dynamic_array(char, cur_ptes, TRACE_PT_SIZE(bits))
233 ),
234
235 TP_fast_assign(
236 __entry->vm = vm;
237 __entry->pde = pde;
238 __entry->first = first;
239 __entry->last = first + count - 1;
240 scnprintf(__get_str(cur_ptes),
241 TRACE_PT_SIZE(bits),
242 "%*pb",
243 bits,
244 pt->used_ptes);
245 ),
246
247 TP_printk("vm=%p, pde=%d, updating %u:%u\t%s",
248 __entry->vm, __entry->pde, __entry->last, __entry->first,
249 __get_str(cur_ptes))
250);
251
252DEFINE_EVENT(i915_page_table_entry_update, i915_page_table_entry_map,
253 TP_PROTO(struct i915_address_space *vm, u32 pde,
254 struct i915_page_table_entry *pt, u32 first, u32 count, u32 bits),
255 TP_ARGS(vm, pde, pt, first, count, bits)
256);
257
159TRACE_EVENT(i915_gem_object_change_domain, 258TRACE_EVENT(i915_gem_object_change_domain,
160 TP_PROTO(struct drm_i915_gem_object *obj, u32 old_read, u32 old_write), 259 TP_PROTO(struct drm_i915_gem_object *obj, u32 old_read, u32 old_write),
161 TP_ARGS(obj, old_read, old_write), 260 TP_ARGS(obj, old_read, old_write),