Commit b6708242 authored by Chris Wilson's avatar Chris Wilson Committed by Daniel Vetter

drm/i915: Only bump refcnt on objects scheduled for eviction

Incrementing the reference count on all objects walked when searching
for space in the aperture is a non-neglible amount of overhead. In fact,
we only need to hold on to a reference for objects that we will evict,
so we can therefore delay the referencing until we find a suitable hole
and only add those objects that fall inside.
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent bd45545f
...@@ -36,7 +36,6 @@ static bool ...@@ -36,7 +36,6 @@ static bool
mark_free(struct drm_i915_gem_object *obj, struct list_head *unwind) mark_free(struct drm_i915_gem_object *obj, struct list_head *unwind)
{ {
list_add(&obj->exec_list, unwind); list_add(&obj->exec_list, unwind);
drm_gem_object_reference(&obj->base);
return drm_mm_scan_add_block(obj->gtt_space); return drm_mm_scan_add_block(obj->gtt_space);
} }
...@@ -139,7 +138,6 @@ i915_gem_evict_something(struct drm_device *dev, int min_size, ...@@ -139,7 +138,6 @@ i915_gem_evict_something(struct drm_device *dev, int min_size,
BUG_ON(ret); BUG_ON(ret);
list_del_init(&obj->exec_list); list_del_init(&obj->exec_list);
drm_gem_object_unreference(&obj->base);
} }
/* We expect the caller to unpin, evict all and try again, or give up. /* We expect the caller to unpin, evict all and try again, or give up.
...@@ -158,10 +156,10 @@ i915_gem_evict_something(struct drm_device *dev, int min_size, ...@@ -158,10 +156,10 @@ i915_gem_evict_something(struct drm_device *dev, int min_size,
exec_list); exec_list);
if (drm_mm_scan_remove_block(obj->gtt_space)) { if (drm_mm_scan_remove_block(obj->gtt_space)) {
list_move(&obj->exec_list, &eviction_list); list_move(&obj->exec_list, &eviction_list);
drm_gem_object_reference(&obj->base);
continue; continue;
} }
list_del_init(&obj->exec_list); list_del_init(&obj->exec_list);
drm_gem_object_unreference(&obj->base);
} }
/* Unbinding will emit any required flushes */ /* Unbinding will emit any required flushes */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment