winsys/svga: Resolve command submission buffer contention v3
authorThomas Hellstrom <thellstrom@vmware.com>
Thu, 15 Sep 2016 11:18:13 +0000 (13:18 +0200)
committerBrian Paul <brianp@vmware.com>
Fri, 7 Apr 2017 19:46:44 +0000 (13:46 -0600)
commit0864f9c77a16aefa2512d47c5cc4089c3b6fb30d
tree35102f2e63ee0b5a4c2662a0f0e37247d8560a51
parent0baa372b6fa4b21e0214e8f208fe08b2ab2b0ecc
winsys/svga: Resolve command submission buffer contention v3

If two contexts wanted to access the same buffer at the same time, it would
end up on two validation lists simultaneously, which might cause a
PIPE_ERROR_RETRY when trying to validate it from one context while the other
context already had it validated but not yet fenced.

In that situation we could spin until the error goes away, or apply various
more or less expensive locking schemes to save cpu.
Here we use a scheme that briefly locks after fencing but avoids locking on
validation in the non-contended case.

v2:
Make sure we broadcast not only on releasing buffers after fencing, but also
after releasing buffers in the pb_validate_validate error path.
v3:
Don't broadcast on PIPE_ERROR_RETRY because that would increase the chance
of starvation.

Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com>
src/gallium/winsys/svga/drm/vmw_context.c
src/gallium/winsys/svga/drm/vmw_screen.c
src/gallium/winsys/svga/drm/vmw_screen.h