[Mesa-dev] [PATCH] i965: store reference to the context within struct brw_fence

Chad Versace chad.versace at intel.com
Tue Sep 29 14:36:38 PDT 2015


On Mon 28 Sep 2015, Marek Olšák wrote:
> On Mon, Sep 28, 2015 at 1:29 PM, Emil Velikov <emil.l.velikov at gmail.com> wrote:
> > As the spec allows for {server,client}_wait_sync to be called without
> > currently bound context, while our implementation requires context
> > pointer.
> >
> > UNTESTED.
> >
> > Cc: Chad Versace <chad.versace at intel.com>
> > Cc: Marek Olšák <marek.olsak at amd.com>
> > Cc: Chih-Wei Huang <cwhuang at android-x86.org>
> > Cc: Mauro Rossi <issor.oruam at gmail.com>
> > Cc: 10.6 11.0 <mesa-stable at lists.freedesktop.org>
> > Signed-off-by: Emil Velikov <emil.l.velikov at gmail.com>
> > ---
> >
> > Upon second thought I'm leaning that we should move this to the API
> > specific library (i.e. libEGL) rather than keeping it here. It will give
> > us remove API specific from the DRI extension, plus it'll give us better
> > mix'n'match (loader+dri module) compatibility.
> >
> > How do you guys feel on the topic ?
> 
> I don't think there is anything to move into libEGL. st/dri doesn't
> add a context pointer to the fence, instead it adds a screen pointer,
> which is a different thing.

I agree with Mark here.  Even if there was something you could move into
libEGL, I don't it could be done safely. It needs to remain in the
driver.

> This i965 fix is probably not thread-safe, because eglClientWaitSync
> can be called from another thread and contexts typically contain no
> locks.

Emil, the fix is not thread-safe because drm_intel_gem_bo_wait() mutates
the bo. Thread-safety matters because some Chromium Ozone code that's
cooking does call eglCreateSync and eglClientWaitSync from different
threads.

If you add a mutex to struct brw_fence, and lock it for the duration of
brw_fence_client_wait() and brw_fence_is_completed(), then I think
that's sufficient for ensuring thread-safety.


More information about the mesa-dev mailing list