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 1c237d0..de25b6e 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))