Commit 854acbe7 authored by Jared Kangas's avatar Jared Kangas Committed by Sumit Semwal
Browse files

dma-buf: heaps: Give default CMA heap a fixed name



The CMA heap's name in devtmpfs can vary depending on how the heap is
defined. Its name defaults to "reserved", but if a CMA area is defined
in the devicetree, the heap takes on the devicetree node's name, such as
"default-pool" or "linux,cma". To simplify naming, unconditionally name
it "default_cma_region", but keep a legacy node in place backed by the
same underlying allocator for backwards compatibility.

Reviewed-by: default avatarMaxime Ripard <mripard@kernel.org>
Signed-off-by: default avatarJared Kangas <jkangas@redhat.com>
Signed-off-by: default avatarSumit Semwal <sumit.semwal@linaro.org>
Link: https://lore.kernel.org/r/20250610131231.1724627-4-jkangas@redhat.com
parent 86e59cc5
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -21,5 +21,8 @@ following heaps:
   usually created either through the kernel commandline through the
   ``cma`` parameter, a memory region Device-Tree node with the
   ``linux,cma-default`` property set, or through the ``CMA_SIZE_MBYTES`` or
   ``CMA_SIZE_PERCENTAGE`` Kconfig options. Depending on the platform, it
   might be called ``reserved``, ``linux,cma``, or ``default-pool``.
   ``CMA_SIZE_PERCENTAGE`` Kconfig options. The heap's name in devtmpfs is
   ``default_cma_region``. For backwards compatibility, when the
   ``DMABUF_HEAPS_CMA_LEGACY`` Kconfig option is set, a duplicate node is
   created following legacy naming conventions; the legacy name might be
   ``reserved``, ``linux,cma``, or ``default-pool``.
+10 −0
Original line number Diff line number Diff line
@@ -12,3 +12,13 @@ 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_CMA_LEGACY
	bool "Legacy DMA-BUF CMA Heap"
	default y
	depends on DMABUF_HEAPS_CMA
	help
	  Add a duplicate CMA-backed dma-buf heap with legacy naming derived
	  from the CMA area's devicetree node, or "reserved" if the area is not
	  defined in the devicetree. This uses the same underlying allocator as
	  CONFIG_DMABUF_HEAPS_CMA.
+19 −1
Original line number Diff line number Diff line
@@ -9,6 +9,9 @@
 * Copyright (C) 2019 Texas Instruments Incorporated - http://www.ti.com/
 *	Andrew F. Davis <afd@ti.com>
 */

#define pr_fmt(fmt) "cma_heap: " fmt

#include <linux/cma.h>
#include <linux/dma-buf.h>
#include <linux/dma-heap.h>
@@ -22,6 +25,7 @@
#include <linux/slab.h>
#include <linux/vmalloc.h>

#define DEFAULT_CMA_NAME "default_cma_region"

struct cma_heap {
	struct dma_heap *heap;
@@ -394,15 +398,29 @@ static int __init __add_cma_heap(struct cma *cma, const char *name)
static int __init add_default_cma_heap(void)
{
	struct cma *default_cma = dev_get_cma_area(NULL);
	const char *legacy_cma_name;
	int ret;

	if (!default_cma)
		return 0;

	ret = __add_cma_heap(default_cma, cma_get_name(default_cma));
	ret = __add_cma_heap(default_cma, DEFAULT_CMA_NAME);
	if (ret)
		return ret;

	if (IS_ENABLED(CONFIG_DMABUF_HEAPS_CMA_LEGACY)) {
		legacy_cma_name = cma_get_name(default_cma);
		if (!strcmp(legacy_cma_name, DEFAULT_CMA_NAME)) {
			pr_warn("legacy name and default name are the same, skipping legacy heap\n");
			return 0;
		}

		ret = __add_cma_heap(default_cma, legacy_cma_name);
		if (ret)
			pr_warn("failed to add legacy heap: %pe\n",
				ERR_PTR(ret));
	}

	return 0;
}
module_init(add_default_cma_heap);