···4242#include <linux/memblock.h>4343#include <linux/err.h>4444#include <linux/sizes.h>4545-#include <linux/dma-buf/heaps/cma.h>4645#include <linux/dma-map-ops.h>4746#include <linux/cma.h>4847#include <linux/nospec.h>···5253#define CMA_SIZE_MBYTES 05354#endif54555555-struct cma *dma_contiguous_default_area;5656+static struct cma *dma_contiguous_areas[MAX_CMA_AREAS];5757+static unsigned int dma_contiguous_areas_num;5858+5959+static int dma_contiguous_insert_area(struct cma *cma)6060+{6161+ if (dma_contiguous_areas_num >= ARRAY_SIZE(dma_contiguous_areas))6262+ return -EINVAL;6363+6464+ dma_contiguous_areas[dma_contiguous_areas_num++] = cma;6565+6666+ return 0;6767+}6868+6969+/**7070+ * dma_contiguous_get_area_by_idx() - Get contiguous area at given index7171+ * @idx: index of the area we query7272+ *7373+ * Queries for the contiguous area located at index @idx.7474+ *7575+ * Returns:7676+ * A pointer to the requested contiguous area, or NULL otherwise.7777+ */7878+struct cma *dma_contiguous_get_area_by_idx(unsigned int idx)7979+{8080+ if (idx >= dma_contiguous_areas_num)8181+ return NULL;8282+8383+ return dma_contiguous_areas[idx];8484+}8585+EXPORT_SYMBOL_GPL(dma_contiguous_get_area_by_idx);8686+8787+static struct cma *dma_contiguous_default_area;56885789/*5890 * Default global CMA area size can be defined in kernel's .config.···12090 return 0;12191}12292early_param("cma", early_cma);9393+9494+struct cma *dev_get_cma_area(struct device *dev)9595+{9696+ if (dev && dev->cma_area)9797+ return dev->cma_area;9898+9999+ return dma_contiguous_default_area;100100+}101101+EXPORT_SYMBOL_GPL(dev_get_cma_area);123102124103#ifdef CONFIG_DMA_NUMA_CMA125104···293254 if (ret)294255 return;295256296296- ret = dma_heap_cma_register_heap(dma_contiguous_default_area);257257+ /*258258+ * We need to insert the new area in our list to avoid259259+ * any inconsistencies between having the default area260260+ * listed in the DT or not.261261+ *262262+ * The DT case is handled by rmem_cma_setup() and will263263+ * always insert all its areas in our list. However, if264264+ * it didn't run (because OF_RESERVED_MEM isn't set, or265265+ * there's no DT region specified), then we don't have a266266+ * default area yet, and no area in our list.267267+ *268268+ * This block creates the default area in such a case,269269+ * but we also need to insert it in our list to avoid270270+ * having a default area but an empty list.271271+ */272272+ ret = dma_contiguous_insert_area(dma_contiguous_default_area);297273 if (ret)298298- pr_warn("Couldn't register default CMA heap.");274274+ pr_warn("Couldn't queue default CMA region for heap creation.");299275 }300276}301277···583529 pr_info("Reserved memory: created CMA memory pool at %pa, size %ld MiB\n",584530 &rmem->base, (unsigned long)rmem->size / SZ_1M);585531586586- ret = dma_heap_cma_register_heap(cma);532532+ ret = dma_contiguous_insert_area(cma);587533 if (ret)588588- pr_warn("Couldn't register CMA heap.");534534+ pr_warn("Couldn't store CMA reserved area.");589535590536 return 0;591537}
+3
mm/cma.c
···5252{5353 return cma->name;5454}5555+EXPORT_SYMBOL_GPL(cma_get_name);55565657static unsigned long cma_bitmap_aligned_mask(const struct cma *cma,5758 unsigned int align_order)···952951953952 return page;954953}954954+EXPORT_SYMBOL_GPL(cma_alloc);955955956956static struct cma_memrange *find_cma_memrange(struct cma *cma,957957 const struct page *pages, unsigned long count)···1029102710301028 return true;10311029}10301030+EXPORT_SYMBOL_GPL(cma_release);1032103110331032bool cma_release_frozen(struct cma *cma, const struct page *pages,10341033 unsigned long count)