Now that we track objects for their entire lifetime in a list, we can
move the cost of the bookkeeping to the infrequent query of
i915_gem_objects. This also removes the race where we would increment the
global object count and size without holding any locks.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=67121
Signed-off-by: Chris Wilson <[email protected]>
---
 drivers/gpu/drm/i915/i915_debugfs.c |  9 ++++++---
 drivers/gpu/drm/i915/i915_drv.h     |  4 ----
 drivers/gpu/drm/i915/i915_gem.c     | 19 -------------------
 3 files changed, 6 insertions(+), 26 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_debugfs.c 
b/drivers/gpu/drm/i915/i915_debugfs.c
index cc3e74a..baefd8b 100644
--- a/drivers/gpu/drm/i915/i915_debugfs.c
+++ b/drivers/gpu/drm/i915/i915_debugfs.c
@@ -228,9 +228,12 @@ static int i915_gem_object_info(struct seq_file *m, void 
*data)
        if (ret)
                return ret;
 
-       seq_printf(m, "%u objects, %zu bytes\n",
-                  dev_priv->mm.object_count,
-                  dev_priv->mm.object_memory);
+       size = count = 0;
+       list_for_each_entry(obj, &dev_priv->mm.unbound_list, global_list)
+               size += obj->base.size, ++count;
+       list_for_each_entry(obj, &dev_priv->mm.bound_list, global_list)
+               size += obj->base.size, ++count;
+       seq_printf(m, "%u objects, %zu bytes\n", count, size);
 
        size = count = mappable_size = mappable_count = 0;
        count_objects(&dev_priv->mm.bound_list, global_list);
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 2cfa12c..54d5627 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -932,10 +932,6 @@ struct i915_gem_mm {
 
        /* storage for physical objects */
        struct drm_i915_gem_phys_object *phys_objs[I915_MAX_PHYS_OBJECT];
-
-       /* accounting, useful for userland debugging */
-       size_t object_memory;
-       u32 object_count;
 };
 
 struct drm_i915_error_state_buf {
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 321a187..2283765 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -71,21 +71,6 @@ static inline void i915_gem_object_fence_lost(struct 
drm_i915_gem_object *obj)
        obj->fence_reg = I915_FENCE_REG_NONE;
 }
 
-/* some bookkeeping */
-static void i915_gem_info_add_obj(struct drm_i915_private *dev_priv,
-                                 size_t size)
-{
-       dev_priv->mm.object_count++;
-       dev_priv->mm.object_memory += size;
-}
-
-static void i915_gem_info_remove_obj(struct drm_i915_private *dev_priv,
-                                    size_t size)
-{
-       dev_priv->mm.object_count--;
-       dev_priv->mm.object_memory -= size;
-}
-
 static int
 i915_gem_wait_for_error(struct i915_gpu_error *error)
 {
@@ -221,7 +206,6 @@ i915_gem_create(struct drm_file *file,
        ret = drm_gem_handle_create(file, &obj->base, &handle);
        if (ret) {
                drm_gem_object_release(&obj->base);
-               i915_gem_info_remove_obj(dev->dev_private, obj->base.size);
                i915_gem_object_free(obj);
                return ret;
        }
@@ -3883,8 +3867,6 @@ void i915_gem_object_init(struct drm_i915_gem_object *obj,
        obj->madv = I915_MADV_WILLNEED;
        /* Avoid an unnecessary call to unbind on the first bind. */
        obj->map_and_fenceable = true;
-
-       i915_gem_info_add_obj(obj->base.dev->dev_private, obj->base.size);
 }
 
 static const struct drm_i915_gem_object_ops i915_gem_object_ops = {
@@ -3990,7 +3972,6 @@ void i915_gem_free_object(struct drm_gem_object *gem_obj)
                drm_prime_gem_destroy(&obj->base, NULL);
 
        drm_gem_object_release(&obj->base);
-       i915_gem_info_remove_obj(dev_priv, obj->base.size);
 
        kfree(obj->bit_17);
        i915_gem_object_free(obj);
-- 
1.8.3.2

_______________________________________________
Intel-gfx mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to