Intel G41 doesn't see any screens connected after suspend/resume

Chris Wilson chris at chris-wilson.co.uk
Thu Mar 20 06:43:07 PDT 2014


On Thu, Mar 20, 2014 at 09:38:17AM -0400, Nikolay Martynov wrote:
> (gdb) list *i915_gem_object_set_cache_level+0x8a
> 0x24e3a is in i915_gem_object_set_cache_level
> (drivers/gpu/drm/i915/i915_gem.c:3147).
> 3142         * crossing memory domains and dying.
> 3143         */
> 3144        if (HAS_LLC(dev))
> 3145            return true;
> 3146
> 3147        if (!drm_mm_node_allocated(gtt_space))
> 3148            return true;
> 3149
> 3150        if (list_empty(&gtt_space->node_list))
> 3151            return true;
> 
> Please let me know if there's anything else I can do.

Can you please try:


diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 13fc490d1f62..4f71125493fd 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -3676,7 +3676,7 @@ int i915_gem_object_set_cache_level(struct drm_i915_gem_object *obj,
                                    enum i915_cache_level cache_level)
 {
        struct drm_device *dev = obj->base.dev;
-       struct i915_vma *vma;
+       struct i915_vma *vma, *next;
        int ret;
 
        if (obj->cache_level == cache_level)
@@ -3687,7 +3687,7 @@ int i915_gem_object_set_cache_level(struct drm_i915_gem_object *obj,
                return -EBUSY;
        }
 
-       list_for_each_entry(vma, &obj->vma_list, vma_link) {
+       list_for_each_entry_safe(vma, next, &obj->vma_list, vma_link) {
                if (!i915_gem_valid_gtt_space(dev, &vma->node, cache_level)) {
                        ret = i915_vma_unbind(vma);
                        if (ret)

-- 
Chris Wilson, Intel Open Source Technology Centre


More information about the dri-devel mailing list