diff options
author | Lingfeng Yang <lfy@google.com> | 2020-04-16 09:40:16 -0700 |
---|---|---|
committer | Alistair Delva <adelva@google.com> | 2020-04-22 13:34:17 -0700 |
commit | c8776caae8aa433622bed98c9650af799ade2a0e (patch) | |
tree | 7f3473eca74ba58f59200802712b1377ac8517a2 | |
parent | 99ce2a46ec5d92626decfbe3bfbb70cc8ff5778a (diff) | |
download | cuttlefish-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.c | 22 |
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; +} + |