diff options
Diffstat (limited to 'target/linux/bcm27xx/patches-5.4/950-0729-udmabuf-separate-out-creating-destroying-scatter-tab.patch')
-rw-r--r-- | target/linux/bcm27xx/patches-5.4/950-0729-udmabuf-separate-out-creating-destroying-scatter-tab.patch | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/target/linux/bcm27xx/patches-5.4/950-0729-udmabuf-separate-out-creating-destroying-scatter-tab.patch b/target/linux/bcm27xx/patches-5.4/950-0729-udmabuf-separate-out-creating-destroying-scatter-tab.patch new file mode 100644 index 0000000000..5a0a59ced1 --- /dev/null +++ b/target/linux/bcm27xx/patches-5.4/950-0729-udmabuf-separate-out-creating-destroying-scatter-tab.patch @@ -0,0 +1,71 @@ +From 118802c75e04a2f1b94245695076d2506f667ae7 Mon Sep 17 00:00:00 2001 +From: Gurchetan Singh <gurchetansingh@chromium.org> +Date: Mon, 2 Dec 2019 17:36:26 -0800 +Subject: [PATCH] udmabuf: separate out creating/destroying + scatter-table + +Commit 17a7ce203490459cff14fb1c8f9a15d65fd1c544 upstream. + +These are nice functions and can be re-used. + +Signed-off-by: Gurchetan Singh <gurchetansingh@chromium.org> +Link: http://patchwork.freedesktop.org/patch/msgid/20191203013627.85991-3-gurchetansingh@chromium.org +Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> +--- + drivers/dma-buf/udmabuf.c | 26 +++++++++++++++++++------- + 1 file changed, 19 insertions(+), 7 deletions(-) + +--- a/drivers/dma-buf/udmabuf.c ++++ b/drivers/dma-buf/udmabuf.c +@@ -47,10 +47,10 @@ static int mmap_udmabuf(struct dma_buf * + return 0; + } + +-static struct sg_table *map_udmabuf(struct dma_buf_attachment *at, +- enum dma_data_direction direction) ++static struct sg_table *get_sg_table(struct device *dev, struct dma_buf *buf, ++ enum dma_data_direction direction) + { +- struct udmabuf *ubuf = at->dmabuf->priv; ++ struct udmabuf *ubuf = buf->priv; + struct sg_table *sg; + int ret; + +@@ -62,7 +62,7 @@ static struct sg_table *map_udmabuf(stru + GFP_KERNEL); + if (ret < 0) + goto err; +- if (!dma_map_sg(at->dev, sg->sgl, sg->nents, direction)) { ++ if (!dma_map_sg(dev, sg->sgl, sg->nents, direction)) { + ret = -EINVAL; + goto err; + } +@@ -74,13 +74,25 @@ err: + return ERR_PTR(ret); + } + ++static void put_sg_table(struct device *dev, struct sg_table *sg, ++ enum dma_data_direction direction) ++{ ++ dma_unmap_sg(dev, sg->sgl, sg->nents, direction); ++ sg_free_table(sg); ++ kfree(sg); ++} ++ ++static struct sg_table *map_udmabuf(struct dma_buf_attachment *at, ++ enum dma_data_direction direction) ++{ ++ return get_sg_table(at->dev, at->dmabuf, direction); ++} ++ + static void unmap_udmabuf(struct dma_buf_attachment *at, + struct sg_table *sg, + enum dma_data_direction direction) + { +- dma_unmap_sg(at->dev, sg->sgl, sg->nents, direction); +- sg_free_table(sg); +- kfree(sg); ++ return put_sg_table(at->dev, sg, direction); + } + + static void release_udmabuf(struct dma_buf *buf) |