gallium/swr: Fix multi-context sync fence deadlock.
authorBruce Cherniak <bruce.cherniak@intel.com>
Fri, 4 Jan 2019 20:53:59 +0000 (14:53 -0600)
committerAlok Hota <alok.hota@intel.com>
Wed, 16 Jan 2019 15:26:36 +0000 (09:26 -0600)
commited7673afd2d1a31bfcec0520743acd2681b462e6
tree56515968e0518ec31c38efa1f74a1c094060d0e4
parentd5d7b5e950a60827f65410b4d4cc7dbfa571952b
gallium/swr: Fix multi-context sync fence deadlock.

Various recreation scenarios lead to API thread getting stuck in
swr_fence_finish().  This is a multi-context issue, whereby one context
overwrites the fence read-value with a previous sync's lesser value.
The fence sync value is supposed to be always increasing.

In swr_fence_cb(), only update the "read" value if the new value is
greater.

(This may seem like we're not waiting on the other context to finish, but
had we needed for it to finish there would have been a wait prior to
submitting a new sync.)

cc: mesa-stable@lists.freedesktop.org
src/gallium/drivers/swr/swr_fence.cpp