Skip to content

Commit

Permalink
drm/i915: Amalgamate GGTT/ppGTT vma debug list walkers
Browse files Browse the repository at this point in the history
As we can now have multiple VMA inside the global GTT (with partial
mappings, rotations, etc), it is no longer true that there may just be a
single GGTT entry and so we should walk the full vma_list to count up
the actual usage. In addition to unifying the two walkers, switch from
multiplying the object size for each vma to summing the bound vma sizes.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1470293567-10811-1-git-send-email-chris@chris-wilson.co.uk
  • Loading branch information
Chris Wilson committed Aug 4, 2016
1 parent 8dac1e1 commit 894eeec
Showing 1 changed file with 15 additions and 27 deletions.
42 changes: 15 additions & 27 deletions drivers/gpu/drm/i915/i915_debugfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -335,48 +335,36 @@ static int per_file_stats(int id, void *ptr, void *data)
struct drm_i915_gem_object *obj = ptr;
struct file_stats *stats = data;
struct i915_vma *vma;
int bound = 0;

stats->count++;
stats->total += obj->base.size;

if (obj->base.name || obj->base.dma_buf)
stats->shared += obj->base.size;

if (USES_FULL_PPGTT(obj->base.dev)) {
list_for_each_entry(vma, &obj->vma_list, obj_link) {
struct i915_hw_ppgtt *ppgtt;
list_for_each_entry(vma, &obj->vma_list, obj_link) {
if (!drm_mm_node_allocated(&vma->node))
continue;

if (!drm_mm_node_allocated(&vma->node))
continue;
bound++;

if (vma->is_ggtt) {
stats->global += obj->base.size;
continue;
}
if (vma->is_ggtt) {
stats->global += vma->node.size;
} else {
struct i915_hw_ppgtt *ppgtt = i915_vm_to_ppgtt(vma->vm);

ppgtt = container_of(vma->vm, struct i915_hw_ppgtt, base);
if (ppgtt->file_priv != stats->file_priv)
continue;

if (obj->active) /* XXX per-vma statistic */
stats->active += obj->base.size;
else
stats->inactive += obj->base.size;

return 0;
}
} else {
if (i915_gem_obj_ggtt_bound(obj)) {
stats->global += obj->base.size;
if (obj->active)
stats->active += obj->base.size;
else
stats->inactive += obj->base.size;
return 0;
}

if (obj->active) /* XXX per-vma statistic */
stats->active += vma->node.size;
else
stats->inactive += vma->node.size;
}

if (!list_empty(&obj->global_list))
if (!bound)
stats->unbound += obj->base.size;

return 0;
Expand Down

0 comments on commit 894eeec

Please sign in to comment.