On ma, 2016-07-25 at 18:32 +0100, Chris Wilson wrote:
> If the object is active and we need to perform a relocation upon it, we
> need to take the slow relocation path. Before we do, double check the
> active requests to see if they have completed.
> 
> Signed-off-by: Chris Wilson <[email protected]>

Reviewed-by: Joonas Lahtinen <[email protected]

> ---
>  drivers/gpu/drm/i915/i915_gem_execbuffer.c | 16 +++++++++++++++-
>  1 file changed, 15 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c 
> b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
> index e1dfdbd8fc2e..9778b1bc6336 100644
> --- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c
> +++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
> @@ -441,6 +441,20 @@ relocate_entry_clflush(struct drm_i915_gem_object *obj,
>       return 0;
>  }
>  
> +static bool object_is_idle(struct drm_i915_gem_object *obj)
> +{
> +     unsigned long active = obj->active;
> +     int idx;
> +
> +     for_each_active(active, idx) {
> +             if (!i915_gem_active_is_idle(&obj->last_read[idx],
> +                                          &obj->base.dev->struct_mutex))
> +                     return false;
> +     }
> +
> +     return true;
> +}
> +
>  static int
>  i915_gem_execbuffer_relocate_entry(struct drm_i915_gem_object *obj,
>                                  struct eb_vmas *eb,
> @@ -524,7 +538,7 @@ i915_gem_execbuffer_relocate_entry(struct 
> drm_i915_gem_object *obj,
>       }
>  
>       /* We can't wait for rendering with pagefaults disabled */
> -     if (obj->active && pagefault_disabled())
> +     if (pagefault_disabled() && !object_is_idle(obj))
>               return -EFAULT;
>  
>       if (use_cpu_reloc(obj))
-- 
Joonas Lahtinen
Open Source Technology Center
Intel Corporation
_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to