drm/i915: Simplify object is-pinned checking for shrinker
authorChris Wilson <chris@chris-wilson.co.uk>
Tue, 7 Apr 2015 16:28:17 +0000 (17:28 +0100)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Fri, 10 Apr 2015 08:58:34 +0000 (10:58 +0200)
When looking for viable candidates to shrink, we only want objects that
are not pinned. However to do so we performed a double iteration over
the vma in the objects, first looking for the pin-count, then looking
for allocations. We can do both at once and be slightly more explicit in
our validity test.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/i915_gem_shrinker.c

index f7929e769250705284b31733acb1311084a35028..f6ecbda2c60475297b36b1da6cff0766fb0fe833 100644 (file)
@@ -184,9 +184,12 @@ static int num_vma_bound(struct drm_i915_gem_object *obj)
        struct i915_vma *vma;
        int count = 0;
 
-       list_for_each_entry(vma, &obj->vma_list, vma_link)
+       list_for_each_entry(vma, &obj->vma_list, vma_link) {
                if (drm_mm_node_allocated(&vma->node))
                        count++;
+               if (vma->pin_count)
+                       count++;
+       }
 
        return count;
 }
@@ -210,8 +213,7 @@ i915_gem_shrinker_count(struct shrinker *shrinker, struct shrink_control *sc)
                        count += obj->base.size >> PAGE_SHIFT;
 
        list_for_each_entry(obj, &dev_priv->mm.bound_list, global_list) {
-               if (!i915_gem_obj_is_pinned(obj) &&
-                   obj->pages_pin_count == num_vma_bound(obj))
+               if (obj->pages_pin_count == num_vma_bound(obj))
                        count += obj->base.size >> PAGE_SHIFT;
        }