OSDN Git Service

dma-buf: add peer2peer flag
authorChristian König <christian.koenig@amd.com>
Thu, 22 Mar 2018 16:09:42 +0000 (17:09 +0100)
committerChristian König <christian.koenig@amd.com>
Wed, 1 Apr 2020 07:02:45 +0000 (09:02 +0200)
Add a peer2peer flag noting that the importer can deal with device
resources which are not backed by pages.

Signed-off-by: Christian König <christian.koenig@amd.com>
Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Acked-by: Sumit Semwal <sumit.semwal@linaro.org>
Link: https://patchwork.freedesktop.org/patch/359286/
drivers/dma-buf/dma-buf.c
include/linux/dma-buf.h

index ccc9eda..570c923 100644 (file)
@@ -690,6 +690,8 @@ dma_buf_dynamic_attach(struct dma_buf *dmabuf, struct device *dev,
 
        attach->dev = dev;
        attach->dmabuf = dmabuf;
+       if (importer_ops)
+               attach->peer2peer = importer_ops->allow_peer2peer;
        attach->importer_ops = importer_ops;
        attach->importer_priv = importer_priv;
 
index 1ade486..82e0a4a 100644 (file)
@@ -335,6 +335,14 @@ struct dma_buf {
  */
 struct dma_buf_attach_ops {
        /**
+        * @allow_peer2peer:
+        *
+        * If this is set to true the importer must be able to handle peer
+        * resources without struct pages.
+        */
+       bool allow_peer2peer;
+
+       /**
         * @move_notify
         *
         * If this callback is provided the framework can avoid pinning the
@@ -362,6 +370,7 @@ struct dma_buf_attach_ops {
  * @node: list of dma_buf_attachment, protected by dma_resv lock of the dmabuf.
  * @sgt: cached mapping.
  * @dir: direction of cached mapping.
+ * @peer2peer: true if the importer can handle peer resources without pages.
  * @priv: exporter specific attachment data.
  * @importer_ops: importer operations for this attachment, if provided
  * dma_buf_map/unmap_attachment() must be called with the dma_resv lock held.
@@ -382,6 +391,7 @@ struct dma_buf_attachment {
        struct list_head node;
        struct sg_table *sgt;
        enum dma_data_direction dir;
+       bool peer2peer;
        const struct dma_buf_attach_ops *importer_ops;
        void *importer_priv;
        void *priv;