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(>t_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 _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel