On Wed, May 31, 2017 at 07:51:59PM +0100, Matthew Auld wrote:
>       err = mutex_lock_interruptible(&obj->mm.lock);
> @@ -2533,7 +2543,33 @@ int __i915_gem_object_get_pages(struct 
> drm_i915_gem_object *obj)
>  
>  unlock:
>       mutex_unlock(&obj->mm.lock);
> -     return err;
> +
> +     if (err)
> +             return err;
> +
> +     for_each_sg(obj->mm.pages->sgl, sg, obj->mm.pages->nents, i)
> +             sg_mask |= sg->length;

This is the worst place to put a loop over sg. Not only is this
synchronous, but pages may not have been allocated yet. Using
set_pages was at least correct in that regard! The interface I will keep
nagging for is for each task to compute sg_mask as they populate the
scatterlist, and then they pass sg_mask to
__i915_gem_object_set_pages() alongside the pages.

Since this didn't fail BAT, that only means we do not have any userptr
tests there...
-Chris

-- 
Chris Wilson, Intel Open Source Technology Centre
_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to