@@ -463,29 +463,25 @@ out:
}
static int virtio_gpu_wait_ioctl(struct drm_device *dev, void *data,
- struct drm_file *file)
+ struct drm_file *file)
{
struct drm_virtgpu_3d_wait *args = data;
- struct drm_gem_object *obj;
- long timeout = 15 * HZ;
+ struct drm_gem_object *gobj = NULL;
+ struct virtio_gpu_object *qobj = NULL;
int ret;
+ bool nowait = false;
- obj = drm_gem_object_lookup(file, args->handle);
- if (obj == NULL)
+ gobj = drm_gem_object_lookup(file, args->handle);
+ if (gobj == NULL)
return -ENOENT;
- if (args->flags & VIRTGPU_WAIT_NOWAIT) {
- ret = dma_resv_test_signaled_rcu(obj->resv, true);
- } else {
- ret = dma_resv_wait_timeout_rcu(obj->resv, true, true,
- timeout);
- }
- if (ret == 0)
- ret = -EBUSY;
- else if (ret > 0)
- ret = 0;
+ qobj = gem_to_virtio_gpu_obj(gobj);
- drm_gem_object_put_unlocked(obj);
+ if (args->flags & VIRTGPU_WAIT_NOWAIT)
+ nowait = true;
+ ret = virtio_gpu_object_wait(qobj, nowait);
+
+ drm_gem_object_put_unlocked(gobj);
return ret;
}