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

Commit fcb4a578 authored by Ben Widawsky's avatar Ben Widawsky Committed by Daniel Vetter
Browse files

drm/i915: Use bound list for inactive shrink



Do to the move active/inactive lists, it no longer makes sense to use
them for shrinking, since shrinking isn't VM specific (such a need may
also exist, but doesn't yet).

What we can do instead is use the global bound list to find all objects
which aren't active.

Signed-off-by: default avatarBen Widawsky <ben@bwidawsk.net>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent a70a3148
Loading
Loading
Loading
Loading
+6 −2
Original line number Original line Diff line number Diff line
@@ -4635,7 +4635,6 @@ i915_gem_inactive_shrink(struct shrinker *shrinker, struct shrink_control *sc)
			     struct drm_i915_private,
			     struct drm_i915_private,
			     mm.inactive_shrinker);
			     mm.inactive_shrinker);
	struct drm_device *dev = dev_priv->dev;
	struct drm_device *dev = dev_priv->dev;
	struct i915_address_space *vm = &dev_priv->gtt.base;
	struct drm_i915_gem_object *obj;
	struct drm_i915_gem_object *obj;
	int nr_to_scan = sc->nr_to_scan;
	int nr_to_scan = sc->nr_to_scan;
	bool unlock = true;
	bool unlock = true;
@@ -4664,9 +4663,14 @@ i915_gem_inactive_shrink(struct shrinker *shrinker, struct shrink_control *sc)
	list_for_each_entry(obj, &dev_priv->mm.unbound_list, global_list)
	list_for_each_entry(obj, &dev_priv->mm.unbound_list, global_list)
		if (obj->pages_pin_count == 0)
		if (obj->pages_pin_count == 0)
			cnt += obj->base.size >> PAGE_SHIFT;
			cnt += obj->base.size >> PAGE_SHIFT;
	list_for_each_entry(obj, &vm->inactive_list, mm_list)

	list_for_each_entry(obj, &dev_priv->mm.bound_list, global_list) {
		if (obj->active)
			continue;

		if (obj->pin_count == 0 && obj->pages_pin_count == 0)
		if (obj->pin_count == 0 && obj->pages_pin_count == 0)
			cnt += obj->base.size >> PAGE_SHIFT;
			cnt += obj->base.size >> PAGE_SHIFT;
	}


	if (unlock)
	if (unlock)
		mutex_unlock(&dev->struct_mutex);
		mutex_unlock(&dev->struct_mutex);