From: Thomas Hellstrom Date: Thu, 4 Apr 2019 10:20:54 +0000 (+0200) Subject: winsys/svga: Don't abort on EBUSY errors from execbuffer X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=20b78393920f138f6f521251df7f98768706089e;p=mesa.git 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 Reviewed-by: Brian Paul --- 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();