From 5411d7ce02717dc0528847b096558373603e421a Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Thu, 26 Sep 2013 08:59:44 +0100 Subject: [PATCH] drm/i915: Restore global mappings upon resume commit c6916417c8575637659686ff0e4f744babf0cb4e Author: Ben Widawsky 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: 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 Cc: Ben Widawsky --- drivers/gpu/drm/i915/i915_gem_gtt.c | 6 +++++- 1 file changed, 5 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..854d28f 100644 --- a/drivers/gpu/drm/i915/i915_gem_gtt.c +++ b/drivers/gpu/drm/i915/i915_gem_gtt.c @@ -509,7 +509,11 @@ void i915_gem_restore_gtt_mappings(struct drm_device *dev) struct i915_vma *vma = i915_gem_obj_to_vma(obj, &dev_priv->gtt.base); 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, obj->has_global_gtt_mapping ? GLOBAL_BIND : 0); } i915_gem_chipset_flush(dev); -- 1.8.4.rc3