2014-03-20 9:43 GMT-04:00 Chris Wilson chris@chris-wilson.co.uk:
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)
--
Yes, that seem to help. It didn't freeze anymore in 15 mins I used it. Thanks!