[PATCH 6/7] flush-writes-before-suspend

Chris Wilson chris at chris-wilson.co.uk
Fri May 25 10:07:42 UTC 2018


---
 drivers/gpu/drm/i915/i915_gem.c | 20 +++++++++++++++++---
 1 file changed, 17 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index b0980b3186e7..239498191937 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -5060,8 +5060,15 @@ int i915_gem_suspend(struct drm_i915_private *dev_priv)
 	return ret;
 }
 
-void i915_gem_suspend_late(struct drm_i915_private *dev_priv)
+void i915_gem_suspend_late(struct drm_i915_private *i915)
 {
+	struct drm_i915_gem_object *obj;
+	struct list_head *phases[] = {
+		&i915->mm.unbound_list,
+		&i915->mm.bound_list,
+		NULL
+	}, **p;
+
 	/*
 	 * Neither the BIOS, ourselves or any other kernel
 	 * expects the system to be in execlists mode on startup,
@@ -5082,8 +5089,15 @@ void i915_gem_suspend_late(struct drm_i915_private *dev_priv)
 	 * machine in an unusable condition.
 	 */
 
-	intel_uc_sanitize(dev_priv);
-	i915_gem_sanitize(dev_priv);
+	spin_lock(&i915->mm.obj_lock);
+	for (p = phases; *p; p++) {
+		list_for_each_entry(obj, *p, mm.link)
+			WARN_ON(i915_gem_object_set_to_gtt_domain(obj, false));
+	}
+	spin_unlock(&i915->mm.obj_lock);
+
+	intel_uc_sanitize(i915);
+	i915_gem_sanitize(i915);
 }
 
 void i915_gem_resume(struct drm_i915_private *i915)
-- 
2.17.0



More information about the Intel-gfx-trybot mailing list