winsys/svga: Don't abort on EBUSY errors from execbuffer
authorThomas Hellstrom <thellstrom@vmware.com>
Thu, 4 Apr 2019 10:20:54 +0000 (12:20 +0200)
committerThomas Hellstrom <thellstrom@vmware.com>
Thu, 2 May 2019 07:51:15 +0000 (09:51 +0200)
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 <thellstrom@vmware.com>
Reviewed-by: Brian Paul <brianp@vmware.com>
src/gallium/winsys/svga/drm/vmw_screen_ioctl.c

index ab60265bdd24609b7b7002b4dc1f5ec2405bca45..3b14f1d35136e58a5992d3f15ac195d924fd4100 100644 (file)
@@ -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();