drm/i915: Skip CPU synchronisation on dmabuf attachments
authorChris Wilson <chris@chris-wilson.co.uk>
Thu, 30 Nov 2017 18:07:02 +0000 (18:07 +0000)
committerChris Wilson <chris@chris-wilson.co.uk>
Tue, 11 Feb 2020 00:16:15 +0000 (00:16 +0000)
dma-bufs are device coherent, with explicit CPU synchronisation provided
via the begin/end cpu access ioctls. As the coherency of the dma-buf is
explicitly defined to be under user control, flushing any caches on
attach/detach of the dma-buf is additional work that doesn't aide the
user in the slightest.

Suggested-by: Lucas Stach <l.stach@pengutronix.de>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Acked-by: Dongwon Kim <dongwon.kim@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20171130180702.29357-1-chris@chris-wilson.co.uk
drivers/gpu/drm/i915/gem/i915_gem_dmabuf.c

index 372b57c..7db5a79 100644 (file)
@@ -48,7 +48,9 @@ static struct sg_table *i915_gem_map_dma_buf(struct dma_buf_attachment *attachme
                src = sg_next(src);
        }
 
-       if (!dma_map_sg(attachment->dev, st->sgl, st->nents, dir)) {
+       if (!dma_map_sg_attrs(attachment->dev,
+                             st->sgl, st->nents, dir,
+                             DMA_ATTR_SKIP_CPU_SYNC)) {
                ret = -ENOMEM;
                goto err_free_sg;
        }
@@ -71,7 +73,9 @@ static void i915_gem_unmap_dma_buf(struct dma_buf_attachment *attachment,
 {
        struct drm_i915_gem_object *obj = dma_buf_to_obj(attachment->dmabuf);
 
-       dma_unmap_sg(attachment->dev, sg->sgl, sg->nents, dir);
+       dma_unmap_sg_attrs(attachment->dev,
+                          sg->sgl, sg->nents, dir,
+                          DMA_ATTR_SKIP_CPU_SYNC);
        sg_free_table(sg);
        kfree(sg);