summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLingfeng Yang <lfy@google.com>2020-04-16 09:40:16 -0700
committerAlistair Delva <adelva@google.com>2020-04-22 13:34:17 -0700
commitc8776caae8aa433622bed98c9650af799ade2a0e (patch)
tree7f3473eca74ba58f59200802712b1377ac8517a2
parent99ce2a46ec5d92626decfbe3bfbb70cc8ff5778a (diff)
downloadcuttlefish-modules-c8776caae8aa433622bed98c9650af799ade2a0e.tar.gz
CHROMIUM: drm/virtio: Add interfaces to share dma bufs via virtwl.
BUG=chromium:892342 TEST=xeyes repeatedly does not fail Signed-off-by: David Riley <davidriley@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/1351815 Reviewed-by: Tomasz Figa <tfiga@chromium.org> Reviewed-by: Zach Reizner <zachr@chromium.org> Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org> [rebase54(groeck): rebase53(rrangel): * Context conflict * Added missing includes. ] Signed-off-by: Guenter Roeck <groeck@chromium.org> Bug: 153580313 Signed-off-by: Lingfeng Yang <lfy@google.com> Change-Id: I3bf87dcab93c8ec28461fa69f8c7072c0e3abdd9
-rw-r--r--virtio_gpu/virtgpu_object.c22
1 files changed, 21 insertions, 1 deletions
diff --git a/virtio_gpu/virtgpu_object.c b/virtio_gpu/virtgpu_object.c
index 44a787f..d95edc7 100644
--- a/virtio_gpu/virtgpu_object.c
+++ b/virtio_gpu/virtgpu_object.c
@@ -26,7 +26,7 @@
#include <linux/moduleparam.h>
#include <drm/ttm/ttm_execbuf_util.h>
-
+#include <linux/dma-buf.h>
#include "virtgpu_drv.h"
static int virtio_gpu_virglrenderer_workaround = 1;
@@ -249,3 +249,23 @@ int virtio_gpu_object_wait(struct virtio_gpu_object *bo, bool no_wait)
return r;
}
+int virtio_gpu_dma_buf_to_handle(struct dma_buf *dma_buf, bool no_wait,
+ uint32_t *handle)
+{
+ struct virtio_gpu_object *qobj;
+ struct virtio_gpu_device *vgdev;
+
+ if (dma_buf->ops != &virtgpu_dmabuf_ops)
+ return -EINVAL;
+
+ qobj = gem_to_virtio_gpu_obj(dma_buf->priv);
+ vgdev = (struct virtio_gpu_device *)qobj->gem_base.dev->dev_private;
+ if (!qobj->create_callback_done && !no_wait)
+ wait_event(vgdev->resp_wq, qobj->create_callback_done);
+ if (!qobj->create_callback_done)
+ return -ETIMEDOUT;
+
+ *handle = qobj->hw_res_handle;
+ return 0;
+}
+