[Intel-gfx] [PATCH] drm/i915: Restore global mappings upon resume
Chris Wilson
chris at chris-wilson.co.uk
Thu Sep 26 10:22:45 CEST 2013
commit c6916417c8575637659686ff0e4f744babf0cb4e
Author: Ben Widawsky <ben at bwidawsk.net>
Date: Tue Sep 24 09:58:00 2013 -0700
drm/i915: Use the new vm [un]bind functions
changes the interpretation of the bind routines, and in particular we
only bind into the global GTT if we pass a flag to the routine. So upon
resume, we need to ask for whatever we thing is bound into the global
GTT (cursors, fences, scanouts) to be rebound or else glorious
corruption ensues.
v2.1: Clear the is-bound flags before attempting to rebind.
Fixes: i-g-t/gem_suspend
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=69834
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
Cc: Ben Widawsky <ben at bwidawsk.net>
---
drivers/gpu/drm/i915/i915_gem_gtt.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c b/drivers/gpu/drm/i915/i915_gem_gtt.c
index e053f14..55a8d87 100644
--- a/drivers/gpu/drm/i915/i915_gem_gtt.c
+++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
@@ -508,8 +508,14 @@ void i915_gem_restore_gtt_mappings(struct drm_device *dev)
list_for_each_entry(obj, &dev_priv->mm.bound_list, global_list) {
struct i915_vma *vma = i915_gem_obj_to_vma(obj,
&dev_priv->gtt.base);
+ unsigned flags = obj->has_global_gtt_mapping ? GLOBAL_BIND : 0;
+
i915_gem_clflush_object(obj, obj->pin_display);
- vma->vm->bind_vma(vma, obj->cache_level, 0);
+
+ obj->has_global_gtt_mapping = false;
+ obj->has_aliasing_ppgtt_mapping = false;
+
+ vma->vm->bind_vma(vma, obj->cache_level, flags);
}
i915_gem_chipset_flush(dev);
--
1.8.4.rc3
More information about the Intel-gfx
mailing list