Intel G41 doesn't see any screens connected after suspend/resume
Nikolay Martynov
mar.kolya at gmail.com
Thu Mar 20 16:17:00 PDT 2014
2014-03-20 9:43 GMT-04:00 Chris Wilson <chris at 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!
--
Martynov Nikolay.
Email: mar.kolya at gmail.com
More information about the dri-devel
mailing list