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 <ch...@chris-wilson.co.uk>
---
 drivers/gpu/drm/i915/i915_debugfs.c | 46 +++++++++++++++----------------------
 1 file changed, 18 insertions(+), 28 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_debugfs.c 
b/drivers/gpu/drm/i915/i915_debugfs.c
index fdcf90757eb0..c04ba9981e9b 100644
--- a/drivers/gpu/drm/i915/i915_debugfs.c
+++ b/drivers/gpu/drm/i915/i915_debugfs.c
@@ -332,6 +332,7 @@ 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;
@@ -339,41 +340,30 @@ static int per_file_stats(int id, void *ptr, void *data)
        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 (i915_is_ggtt(vma->vm)) {
-                               stats->global += obj->base.size;
-                               continue;
-                       }
-
-                       ppgtt = container_of(vma->vm, struct i915_hw_ppgtt, 
base);
+               if (i915_is_ggtt(vma->vm)) {
+                       stats->global += vma->node.size;
+               } else {
+                       struct i915_hw_ppgtt *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;
-- 
2.6.4

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to