From 3bff12eab232addedb6367b78f421264a19a8260 Mon Sep 17 00:00:00 2001 From: hlb194802 Date: Mon, 15 Apr 2024 03:11:58 +0000 Subject: [PATCH] virtio_vdmabuf: dma skip cpu sync if buf flag has VIRTIO_VDAMBUF_NONCACHED optimize cpu usage for nonecached dma buf used in g2d gpu vpu etc. Change-Id: I191ebe6ad748dc9cb8f1946d1e51f6d606bde182 Signed-off-by: Han Gao --- drivers/virtio/virtio_vdmabuf.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/virtio/virtio_vdmabuf.c b/drivers/virtio/virtio_vdmabuf.c index 71eff21ba..337737ff0 100644 --- a/drivers/virtio/virtio_vdmabuf.c +++ b/drivers/virtio/virtio_vdmabuf.c @@ -165,7 +165,8 @@ static int sg_table_map(struct device *dev, struct virtio_vdmabuf_buf *exp_buf, case VIRTIO_VDMABUF_HEAP_TYPE_SYSTEM: case VIRTIO_VDMABUF_HEAP_TYPE_SYSTEM_CONTIG: /* SYSTEM, SYSTEM_CONFIG has the same logic */ - if (dma_map_sgtable(dev, sgt, dir, 0)) { + if (dma_map_sgtable(dev, sgt, dir, exp_buf->flags & + VIRTIO_VDAMBUF_NONCACHED ? DMA_ATTR_SKIP_CPU_SYNC : 0)) { dev_err(dev, "[%s:%d] error\n", __func__, __LINE__); sg_free_table(sgt); @@ -204,7 +205,8 @@ static int sg_table_unmap(struct device *dev, struct virtio_vdmabuf_buf *exp_buf case VIRTIO_VDMABUF_HEAP_TYPE_USER: case VIRTIO_VDMABUF_HEAP_TYPE_SYSTEM: case VIRTIO_VDMABUF_HEAP_TYPE_SYSTEM_CONTIG: - dma_unmap_sgtable(dev, sgt, dir, 0); + dma_unmap_sgtable(dev, sgt, dir, exp_buf->flags & + VIRTIO_VDAMBUF_NONCACHED ? DMA_ATTR_SKIP_CPU_SYNC : 0); break; case VIRTIO_VDMABUF_HEAP_TYPE_CARVEOUT: