diff options
author | Thomas Hellstrom <[email protected]> | 2019-04-04 12:20:54 +0200 |
---|---|---|
committer | Thomas Hellstrom <[email protected]> | 2019-05-02 09:51:15 +0200 |
commit | 20b78393920f138f6f521251df7f98768706089e (patch) | |
tree | ed66c01ad42c80db65bfdd8e15d44f4ed4a101ca /src/gallium | |
parent | c69557c4a24574d6755e47d51e4f72ca262b018e (diff) |
winsys/svga: Don't abort on EBUSY errors from execbuffer
This error code typically indicated that a buffer object that was referenced
by the command stream was being used for CPU access by another client.
The correct action here is to retry after a while. Use usleep() until we
have proper kernel support for this wait.
Signed-off-by: Thomas Hellstrom <[email protected]>
Reviewed-by: Brian Paul <[email protected]>
Diffstat (limited to 'src/gallium')
-rw-r--r-- | src/gallium/winsys/svga/drm/vmw_screen_ioctl.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/src/gallium/winsys/svga/drm/vmw_screen_ioctl.c b/src/gallium/winsys/svga/drm/vmw_screen_ioctl.c index ab60265bdd2..3b14f1d3513 100644 --- a/src/gallium/winsys/svga/drm/vmw_screen_ioctl.c +++ b/src/gallium/winsys/svga/drm/vmw_screen_ioctl.c @@ -564,7 +564,9 @@ vmw_ioctl_command(struct vmw_winsys_screen *vws, int32_t cid, offsetof(struct drm_vmw_execbuf_arg, context_handle); do { ret = drmCommandWrite(vws->ioctl.drm_fd, DRM_VMW_EXECBUF, &arg, argsize); - } while(ret == -ERESTART); + if (ret == -EBUSY) + usleep(1000); + } while(ret == -ERESTART || ret == -EBUSY); if (ret) { vmw_error("%s error %s.\n", __FUNCTION__, strerror(-ret)); abort(); |