[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20200302121524.7543-3-stevensd@chromium.org>
Date: Mon, 2 Mar 2020 21:15:22 +0900
From: David Stevens <stevensd@...omium.org>
To: Gerd Hoffmann <kraxel@...hat.com>, David Airlie <airlied@...ux.ie>
Cc: Daniel Vetter <daniel@...ll.ch>,
"Michael S . Tsirkin" <mst@...hat.com>,
Jason Wang <jasowang@...hat.com>,
Sumit Semwal <sumit.semwal@...aro.org>,
Maarten Lankhorst <maarten.lankhorst@...ux.intel.com>,
Maxime Ripard <mripard@...nel.org>,
Thomas Zimmermann <tzimmermann@...e.de>,
David Stevens <stevensd@...omium.org>,
linux-kernel@...r.kernel.org, dri-devel@...ts.freedesktop.org,
virtualization@...ts.linux-foundation.org,
linux-media@...r.kernel.org, linaro-mm-sig@...ts.linaro.org,
virtio-dev@...ts.oasis-open.org
Subject: [PATCH v2 2/4] drm/prime: add support for virtio exported objects
This change exposes dma-buf's get_uuid callback to PRIME drivers.
Signed-off-by: David Stevens <stevensd@...omium.org>
---
drivers/gpu/drm/drm_prime.c | 27 +++++++++++++++++++++++++++
include/drm/drm_drv.h | 15 +++++++++++++++
2 files changed, 42 insertions(+)
diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c
index 86d9b0e45c8c..fc6e932a4fa6 100644
--- a/drivers/gpu/drm/drm_prime.c
+++ b/drivers/gpu/drm/drm_prime.c
@@ -779,6 +779,30 @@ int drm_gem_dmabuf_mmap(struct dma_buf *dma_buf, struct vm_area_struct *vma)
}
EXPORT_SYMBOL(drm_gem_dmabuf_mmap);
+#ifdef CONFIG_VIRTIO
+/**
+ * drm_gem_dmabuf_get_uuid - dma_buf get_uuid implementation for GEM
+ * @dma_buf: buffer to query
+ * @uuid: uuid outparam
+ *
+ * Queries the buffer's virtio UUID. This can be used as the
+ * &dma_buf_ops.get_uuid callback. Calls into &drm_driver.gem_prime_get_uuid.
+ *
+ * Returns 0 on success or a negative error code on failure.
+ */
+int drm_gem_dmabuf_get_uuid(struct dma_buf *dma_buf, uuid_t *uuid)
+{
+ struct drm_gem_object *obj = dma_buf->priv;
+ struct drm_device *dev = obj->dev;
+
+ if (!dev->driver->gem_prime_get_uuid)
+ return -ENODEV;
+
+ return dev->driver->gem_prime_get_uuid(obj, uuid);
+}
+EXPORT_SYMBOL(drm_gem_dmabuf_get_uuid);
+#endif
+
static const struct dma_buf_ops drm_gem_prime_dmabuf_ops = {
.cache_sgt_mapping = true,
.attach = drm_gem_map_attach,
@@ -789,6 +813,9 @@ static const struct dma_buf_ops drm_gem_prime_dmabuf_ops = {
.mmap = drm_gem_dmabuf_mmap,
.vmap = drm_gem_dmabuf_vmap,
.vunmap = drm_gem_dmabuf_vunmap,
+#ifdef CONFIG_VIRTIO
+ .get_uuid = drm_gem_dmabuf_get_uuid,
+#endif
};
/**
diff --git a/include/drm/drm_drv.h b/include/drm/drm_drv.h
index 77685ed7aa65..3cbe9aa6b44a 100644
--- a/include/drm/drm_drv.h
+++ b/include/drm/drm_drv.h
@@ -32,6 +32,10 @@
#include <drm/drm_device.h>
+#ifdef CONFIG_VIRTIO
+#include <linux/uuid.h>
+#endif
+
struct drm_file;
struct drm_gem_object;
struct drm_master;
@@ -639,6 +643,17 @@ struct drm_driver {
int (*gem_prime_mmap)(struct drm_gem_object *obj,
struct vm_area_struct *vma);
+#ifdef CONFIG_VIRTIO
+ /**
+ * @gem_prime_get_uuid
+ *
+ * get_uuid hook for GEM drivers. Retrieves the virtio uuid of the
+ * given GEM buffer.
+ */
+ int (*gem_prime_get_uuid)(struct drm_gem_object *obj,
+ uuid_t *uuid);
+#endif
+
/**
* @dumb_create:
*
--
2.25.0.265.gbab2e86ba0-goog
Powered by blists - more mailing lists