mirror of
https://github.com/torvalds/linux.git
synced 2024-12-29 14:21:47 +00:00
drm/i915: Simplify object is-pinned checking for shrinker
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>
This commit is contained in:
parent
149c86e74f
commit
f6234c1dee
@ -184,9 +184,12 @@ static int num_vma_bound(struct drm_i915_gem_object *obj)
|
|||||||
struct i915_vma *vma;
|
struct i915_vma *vma;
|
||||||
int count = 0;
|
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))
|
if (drm_mm_node_allocated(&vma->node))
|
||||||
count++;
|
count++;
|
||||||
|
if (vma->pin_count)
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
@ -210,8 +213,7 @@ i915_gem_shrinker_count(struct shrinker *shrinker, struct shrink_control *sc)
|
|||||||
count += obj->base.size >> PAGE_SHIFT;
|
count += obj->base.size >> PAGE_SHIFT;
|
||||||
|
|
||||||
list_for_each_entry(obj, &dev_priv->mm.bound_list, global_list) {
|
list_for_each_entry(obj, &dev_priv->mm.bound_list, global_list) {
|
||||||
if (!i915_gem_obj_is_pinned(obj) &&
|
if (obj->pages_pin_count == num_vma_bound(obj))
|
||||||
obj->pages_pin_count == num_vma_bound(obj))
|
|
||||||
count += obj->base.size >> PAGE_SHIFT;
|
count += obj->base.size >> PAGE_SHIFT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user