Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+1 −3
Original line number Diff line number Diff line
@@ -36,7 +36,6 @@ static bool
mark_free(struct drm_i915_gem_object *obj, struct list_head *unwind)
{
	list_add(&obj->exec_list, unwind);
	drm_gem_object_reference(&obj->base);
	return drm_mm_scan_add_block(obj->gtt_space);
}

@@ -139,7 +138,6 @@ i915_gem_evict_something(struct drm_device *dev, int min_size,
		BUG_ON(ret);

		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.
@@ -158,10 +156,10 @@ i915_gem_evict_something(struct drm_device *dev, int min_size,
				       exec_list);
		if (drm_mm_scan_remove_block(obj->gtt_space)) {
			list_move(&obj->exec_list, &eviction_list);
			drm_gem_object_reference(&obj->base);
			continue;
		}
		list_del_init(&obj->exec_list);
		drm_gem_object_unreference(&obj->base);
	}

	/* Unbinding will emit any required flushes */