On Fri, Jan 12, 2024 at 05:20:09PM +0800, Yong Wu wrote:
Initialize a restricted heap. Currently just add a null heap, Prepare for the later patches.
Signed-off-by: Yong Wu yong.wu@mediatek.com
drivers/dma-buf/heaps/Kconfig | 9 ++++ drivers/dma-buf/heaps/Makefile | 3 +- drivers/dma-buf/heaps/restricted_heap.c | 67 +++++++++++++++++++++++++ drivers/dma-buf/heaps/restricted_heap.h | 22 ++++++++ 4 files changed, 100 insertions(+), 1 deletion(-) create mode 100644 drivers/dma-buf/heaps/restricted_heap.c create mode 100644 drivers/dma-buf/heaps/restricted_heap.h
diff --git a/drivers/dma-buf/heaps/Kconfig b/drivers/dma-buf/heaps/Kconfig index a5eef06c4226..e54506f480ea 100644 --- a/drivers/dma-buf/heaps/Kconfig +++ b/drivers/dma-buf/heaps/Kconfig @@ -12,3 +12,12 @@ config DMABUF_HEAPS_CMA Choose this option to enable dma-buf CMA heap. This heap is backed by the Contiguous Memory Allocator (CMA). If your system has these regions, you should say Y here.
+config DMABUF_HEAPS_RESTRICTED
- bool "DMA-BUF Restricted Heap"
- depends on DMABUF_HEAPS
- help
Choose this option to enable dma-buf restricted heap. The purpose of this
heap is to manage buffers that are inaccessible to the kernel and user space.
There may be several ways to restrict it, for example it may be encrypted or
protected by a TEE or hypervisor. If in doubt, say N.
diff --git a/drivers/dma-buf/heaps/Makefile b/drivers/dma-buf/heaps/Makefile index 974467791032..a2437c1817e2 100644 --- a/drivers/dma-buf/heaps/Makefile +++ b/drivers/dma-buf/heaps/Makefile @@ -1,3 +1,4 @@ # SPDX-License-Identifier: GPL-2.0 -obj-$(CONFIG_DMABUF_HEAPS_SYSTEM) += system_heap.o obj-$(CONFIG_DMABUF_HEAPS_CMA) += cma_heap.o +obj-$(CONFIG_DMABUF_HEAPS_RESTRICTED) += restricted_heap.o +obj-$(CONFIG_DMABUF_HEAPS_SYSTEM) += system_heap.o diff --git a/drivers/dma-buf/heaps/restricted_heap.c b/drivers/dma-buf/heaps/restricted_heap.c new file mode 100644 index 000000000000..fd7c82abd42e --- /dev/null +++ b/drivers/dma-buf/heaps/restricted_heap.c @@ -0,0 +1,67 @@ +// SPDX-License-Identifier: GPL-2.0 +/*
- DMABUF restricted heap exporter
- Copyright (C) 2024 MediaTek Inc.
- */
+#include <linux/dma-buf.h> +#include <linux/dma-heap.h> +#include <linux/err.h> +#include <linux/slab.h>
+#include "restricted_heap.h"
+static struct dma_buf * +restricted_heap_allocate(struct dma_heap *heap, unsigned long size,
unsigned long fd_flags, unsigned long heap_flags)
+{
- struct restricted_buffer *restricted_buf;
- DEFINE_DMA_BUF_EXPORT_INFO(exp_info);
- struct dma_buf *dmabuf;
- int ret;
- restricted_buf = kzalloc(sizeof(*restricted_buf), GFP_KERNEL);
- if (!restricted_buf)
return ERR_PTR(-ENOMEM);
- restricted_buf->size = ALIGN(size, PAGE_SIZE);
- restricted_buf->heap = heap;
- exp_info.exp_name = dma_heap_get_name(heap);
- exp_info.size = restricted_buf->size;
- exp_info.flags = fd_flags;
- exp_info.priv = restricted_buf;
- dmabuf = dma_buf_export(&exp_info);
- if (IS_ERR(dmabuf)) {
ret = PTR_ERR(dmabuf);
goto err_free_buf;
- }
- return dmabuf;
+err_free_buf:
- kfree(restricted_buf);
- return ERR_PTR(ret);
+}
+static const struct dma_heap_ops restricted_heap_ops = {
- .allocate = restricted_heap_allocate,
+};
+int restricted_heap_add(struct restricted_heap *rstrd_heap)
Nothing wrong, but what about shortening rstrd_heap throughout the patch set to "rheap", I would find that easier to read.
+{
- struct dma_heap_export_info exp_info;
- struct dma_heap *heap;
- exp_info.name = rstrd_heap->name;
- exp_info.ops = &restricted_heap_ops;
- exp_info.priv = (void *)rstrd_heap;
- heap = dma_heap_add(&exp_info);
- if (IS_ERR(heap))
return PTR_ERR(heap);
- return 0;
+} +EXPORT_SYMBOL_GPL(restricted_heap_add); diff --git a/drivers/dma-buf/heaps/restricted_heap.h b/drivers/dma-buf/heaps/restricted_heap.h new file mode 100644 index 000000000000..443028f6ba3b --- /dev/null +++ b/drivers/dma-buf/heaps/restricted_heap.h @@ -0,0 +1,22 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/*
- Restricted heap Header.
- Copyright (C) 2024 MediaTek, Inc.
- */
+#ifndef _DMABUF_RESTRICTED_HEAP_H_ +#define _DMABUF_RESTRICTED_HEAP_H_
+struct restricted_buffer {
- struct dma_heap *heap;
- size_t size;
+};
+struct restricted_heap {
- const char *name;
+};
+int restricted_heap_add(struct restricted_heap *rstrd_heap);
+#endif
2.25.1