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(&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)
>
> --

  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