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 <chris@xxxxxxxxxxxxxxxxxx> Reviewed-by: Joonas Lahtinen <joonas.lahtinen@xxxxxxxxxxxxxxx > --- > 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 Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx