drm/i915: Treat a framebuffer reference as an active reference whilst shrinking
authorChris Wilson <chris@chris-wilson.co.uk>
Wed, 12 Oct 2016 12:48:24 +0000 (13:48 +0100)
committerChris Wilson <chris@chris-wilson.co.uk>
Wed, 12 Oct 2016 16:17:20 +0000 (17:17 +0100)
Treat a framebuffer reference with the same priority as an active
reference whilst shrinking. Framebuffers are likely to be reused and
typically cost more to migrate to and from GPU memory (on LLC
architectures we need to clflush), so defer the temptation to purge them
during a kswapd run until we have run out of cheap buffers.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: John Harrison <john.c.harrison@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/20161012124824.23521-1-chris@chris-wilson.co.uk
drivers/gpu/drm/i915/i915_gem_shrinker.c

index 1c237d02f30b1307deef2938f4a54e50629b68f6..de25b6e0a101a09f4bfc06b57b7baf707e659a56 100644 (file)
@@ -182,8 +182,9 @@ i915_gem_shrink(struct drm_i915_private *dev_priv,
                            !is_vmalloc_addr(obj->mapping))
                                continue;
 
-                       if ((flags & I915_SHRINK_ACTIVE) == 0 &&
-                           i915_gem_object_is_active(obj))
+                       if (!(flags & I915_SHRINK_ACTIVE) &&
+                           (i915_gem_object_is_active(obj) ||
+                            obj->framebuffer_references))
                                continue;
 
                        if (!can_release_pages(obj))