]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
drm/i915: Only drop the batch-pool's object reference
authorChris Wilson <chris@chris-wilson.co.uk>
Tue, 26 Jul 2016 11:01:53 +0000 (12:01 +0100)
committerChris Wilson <chris@chris-wilson.co.uk>
Tue, 26 Jul 2016 12:01:00 +0000 (13:01 +0100)
The obj->batch_pool_link is only inspected when traversing the batch
pool list and when on the batch pool list the object is referenced. Thus
when freeing the batch pool list, we only need to unreference the object
and do not have to worry about the obj->batch_pool_link.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Link: http://patchwork.freedesktop.org/patch/msgid/1469432687-22756-5-git-send-email-chris@chris-wilson.co.uk
Reviewed-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1469530913-17180-4-git-send-email-chris@chris-wilson.co.uk
drivers/gpu/drm/i915/i915_gem_batch_pool.c

index 3507b2753fd3d6fd335209022e2a6cd0bb67c88c..825981b5aa40bb0acf63d5092026baedd5e0f8f2 100644 (file)
@@ -68,15 +68,14 @@ void i915_gem_batch_pool_fini(struct i915_gem_batch_pool *pool)
        WARN_ON(!mutex_is_locked(&pool->dev->struct_mutex));
 
        for (n = 0; n < ARRAY_SIZE(pool->cache_list); n++) {
-               while (!list_empty(&pool->cache_list[n])) {
-                       struct drm_i915_gem_object *obj =
-                               list_first_entry(&pool->cache_list[n],
-                                                struct drm_i915_gem_object,
-                                                batch_pool_link);
+               struct drm_i915_gem_object *obj, *next;
 
-                       list_del(&obj->batch_pool_link);
+               list_for_each_entry_safe(obj, next,
+                                        &pool->cache_list[n],
+                                        batch_pool_link)
                        i915_gem_object_put(obj);
-               }
+
+               INIT_LIST_HEAD(&pool->cache_list[n]);
        }
 }