On Tue, Jun 30, 2015 at 05:55:31PM +0100, Chris Wilson wrote: > The userptr worker allows for a slight race condition where upon there > may two or more threads calling get_user_pages for the same object. When > we have the array of pages, then we serialise the update of the object. > However, the worker should only overwrite the obj->userptr.work pointer > if and only if it is the active one. Currently we clear it for a > secondary worker with the effect that we may rarely force a second > lookup. > > Signed-off-by: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> Whole series: Tested-by: Michał Winiarski <michal.winiarski@xxxxxxxxx> > --- > drivers/gpu/drm/i915/i915_gem_userptr.c | 16 ++++++++-------- > 1 file changed, 8 insertions(+), 8 deletions(-) > > diff --git a/drivers/gpu/drm/i915/i915_gem_userptr.c b/drivers/gpu/drm/i915/i915_gem_userptr.c > index 7a5242cd5ea5..cb367d9f7909 100644 > --- a/drivers/gpu/drm/i915/i915_gem_userptr.c > +++ b/drivers/gpu/drm/i915/i915_gem_userptr.c > @@ -581,17 +581,17 @@ __i915_gem_userptr_get_pages_worker(struct work_struct *_work) > } > > mutex_lock(&dev->struct_mutex); > - if (obj->userptr.work != &work->work) { > - ret = 0; > - } else if (pinned == num_pages) { > - ret = st_set_pages(&obj->pages, pvec, num_pages); > - if (ret == 0) { > - list_add_tail(&obj->global_list, &to_i915(dev)->mm.unbound_list); > - pinned = 0; > + if (obj->userptr.work == &work->work) { > + if (pinned == num_pages) { > + ret = st_set_pages(&obj->pages, pvec, num_pages); > + if (ret == 0) { > + list_add_tail(&obj->global_list, &to_i915(dev)->mm.unbound_list); > + pinned = 0; > + } > } > + obj->userptr.work = ERR_PTR(ret); > } > > - obj->userptr.work = ERR_PTR(ret); > obj->userptr.workers--; > drm_gem_object_unreference(&obj->base); > mutex_unlock(&dev->struct_mutex); > -- > 2.1.4 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@xxxxxxxxxxxxxxxxxxxxx > http://lists.freedesktop.org/mailman/listinfo/intel-gfx _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx