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

Commit 7aab2d53 authored by Chris Wilson's avatar Chris Wilson
Browse files

drm/i915: Shrink objects prior to hibernation



In an attempt to keep the hibernation image as same as possible, let's
try and discard any unwanted pages and our own page arrays.

Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: default avatarJoonas Lahtinen <joonas.lahtinen@linux.intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/20160909190218.16831-1-chris@chris-wilson.co.uk
parent 851ba2d6
Loading
Loading
Loading
Loading
+14 −7
Original line number Diff line number Diff line
@@ -4589,6 +4589,11 @@ void i915_gem_load_cleanup(struct drm_device *dev)
int i915_gem_freeze_late(struct drm_i915_private *dev_priv)
{
	struct drm_i915_gem_object *obj;
	struct list_head *phases[] = {
		&dev_priv->mm.unbound_list,
		&dev_priv->mm.bound_list,
		NULL
	}, **p;

	/* Called just before we write the hibernation image.
	 *
@@ -4599,17 +4604,19 @@ int i915_gem_freeze_late(struct drm_i915_private *dev_priv)
	 *
	 * To make sure the hibernation image contains the latest state,
	 * we update that state just before writing out the image.
	 *
	 * To try and reduce the hibernation image, we manually shrink
	 * the objects as well.
	 */

	list_for_each_entry(obj, &dev_priv->mm.unbound_list, global_list) {
		obj->base.read_domains = I915_GEM_DOMAIN_CPU;
		obj->base.write_domain = I915_GEM_DOMAIN_CPU;
	}
	i915_gem_shrink_all(dev_priv);

	list_for_each_entry(obj, &dev_priv->mm.bound_list, global_list) {
	for (p = phases; *p; p++) {
		list_for_each_entry(obj, *p, global_list) {
			obj->base.read_domains = I915_GEM_DOMAIN_CPU;
			obj->base.write_domain = I915_GEM_DOMAIN_CPU;
		}
	}

	return 0;
}