Quoting Matthew Auld (2019-06-05 15:03:03) > On Mon, 3 Jun 2019 at 18:49, Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> wrote: > > diff --git a/drivers/gpu/drm/i915/gem/i915_gem_pages.c b/drivers/gpu/drm/i915/gem/i915_gem_pages.c > > index 7868dd48d931..68262231f56f 100644 > > --- a/drivers/gpu/drm/i915/gem/i915_gem_pages.c > > +++ b/drivers/gpu/drm/i915/gem/i915_gem_pages.c > > @@ -72,21 +72,18 @@ void __i915_gem_object_set_pages(struct drm_i915_gem_object *obj, > > > > spin_unlock(&i915->mm.obj_lock); > > } > > + > > + complete_all(&obj->mm.completion); > > } > > Worth having __i915_gem_object_set_pages_error(struct > drm_i915_gem_object, int err) at some point? I don't think it's required, in my current sketch, actually setting the obj->mm.pages is central: static void get_pages_worker(struct work_struct *_work) { struct get_pages_work *work = container_of(_work, typeof(*work), work); struct drm_i915_gem_object *obj = work->ctx.object; struct sg_table *pages; unsigned int sizes = 0; if (!work->dma.error) { pages = obj->ops->get_pages(&work->ctx, &sizes); if (!IS_ERR(pages)) __set_pages(obj, pages, sizes); else dma_fence_set_error(&work->dma, PTR_ERR(pages)); } else { pages = ERR_PTR(work->dma.error); } obj->mm.pages = pages; complete_all(&obj->mm.completion); atomic_dec(&obj->mm.pages_pin_count); i915_gem_object_put(obj); put_task_struct(work->ctx.task); dma_fence_signal(&work->dma); dma_fence_put(&work->dma); } That may all change with blitter integration :) -Chris _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx