/linux-6.12.1/mm/ |
D | cma_debug.c | 3 * CMA DebugFS Interface 10 #include <linux/cma.h> 16 #include "cma.h" 36 struct cma *cma = data; in cma_used_get() local 39 spin_lock_irq(&cma->lock); in cma_used_get() 41 used = bitmap_weight(cma->bitmap, (int)cma_bitmap_maxno(cma)); in cma_used_get() 42 spin_unlock_irq(&cma->lock); in cma_used_get() 43 *val = (u64)used << cma->order_per_bit; in cma_used_get() 51 struct cma *cma = data; in cma_maxchunk_get() local 54 unsigned long bitmap_maxno = cma_bitmap_maxno(cma); in cma_maxchunk_get() [all …]
|
D | cma.c | 15 #define pr_fmt(fmt) "cma: " fmt 25 #include <linux/cma.h> 29 #include <trace/events/cma.h> 32 #include "cma.h" 34 struct cma cma_areas[MAX_CMA_AREAS]; 38 phys_addr_t cma_get_base(const struct cma *cma) in cma_get_base() argument 40 return PFN_PHYS(cma->base_pfn); in cma_get_base() 43 unsigned long cma_get_size(const struct cma *cma) in cma_get_size() argument 45 return cma->count << PAGE_SHIFT; in cma_get_size() 48 const char *cma_get_name(const struct cma *cma) in cma_get_name() argument [all …]
|
D | cma_sysfs.c | 3 * CMA SysFS Interface 8 #include <linux/cma.h> 12 #include "cma.h" 17 void cma_sysfs_account_success_pages(struct cma *cma, unsigned long nr_pages) in cma_sysfs_account_success_pages() argument 19 atomic64_add(nr_pages, &cma->nr_pages_succeeded); in cma_sysfs_account_success_pages() 22 void cma_sysfs_account_fail_pages(struct cma *cma, unsigned long nr_pages) in cma_sysfs_account_fail_pages() argument 24 atomic64_add(nr_pages, &cma->nr_pages_failed); in cma_sysfs_account_fail_pages() 27 void cma_sysfs_account_release_pages(struct cma *cma, unsigned long nr_pages) in cma_sysfs_account_release_pages() argument 29 atomic64_add(nr_pages, &cma->nr_pages_released); in cma_sysfs_account_release_pages() 32 static inline struct cma *cma_from_kobj(struct kobject *kobj) in cma_from_kobj() [all …]
|
D | cma.h | 10 struct cma *cma; member 13 struct cma { struct 26 /* the number of CMA page successful allocations */ 28 /* the number of CMA page allocation failures */ 30 /* the number of CMA page released */ 38 extern struct cma cma_areas[MAX_CMA_AREAS]; argument 41 static inline unsigned long cma_bitmap_maxno(struct cma *cma) in cma_bitmap_maxno() argument 43 return cma->count >> cma->order_per_bit; in cma_bitmap_maxno() 47 void cma_sysfs_account_success_pages(struct cma *cma, unsigned long nr_pages); 48 void cma_sysfs_account_fail_pages(struct cma *cma, unsigned long nr_pages); [all …]
|
D | Kconfig | 670 depends on (NUMA || ARCH_ENABLE_MEMORY_HOTREMOVE || COMPACTION || CMA) && MMU 699 def_bool (MEMORY_ISOLATION && COMPACTION) || CMA 925 config CMA config 933 CMA reserves a region of memory and allows only movable pages to 941 bool "CMA debugfs interface" 942 depends on CMA && DEBUG_FS 944 Turns on the DebugFS interface for CMA. 947 bool "CMA information through sysfs interface" 948 depends on CMA && SYSFS 951 from CMA. [all …]
|
/linux-6.12.1/include/linux/ |
D | cma.h | 23 struct cma; 26 extern phys_addr_t cma_get_base(const struct cma *cma); 27 extern unsigned long cma_get_size(const struct cma *cma); 28 extern const char *cma_get_name(const struct cma *cma); 33 bool fixed, const char *name, struct cma **res_cma, 38 bool fixed, const char *name, struct cma **res_cma) in cma_declare_contiguous() 46 struct cma **res_cma); 47 extern struct page *cma_alloc(struct cma *cma, unsigned long count, unsigned int align, 49 extern bool cma_pages_valid(struct cma *cma, const struct page *pages, unsigned long count); 50 extern bool cma_release(struct cma *cma, const struct page *pages, unsigned long count); [all …]
|
D | dma-map-ops.h | 13 struct cma; 100 extern struct cma *dma_contiguous_default_area; 102 static inline struct cma *dev_get_cma_area(struct device *dev) in dev_get_cma_area() 111 phys_addr_t limit, struct cma **res_cma, bool fixed); 122 static inline struct cma *dev_get_cma_area(struct device *dev) in dev_get_cma_area() 130 phys_addr_t base, phys_addr_t limit, struct cma **res_cma, in dma_contiguous_reserve_area()
|
/linux-6.12.1/Documentation/ABI/testing/ |
D | sysfs-kernel-mm-cma | 1 What: /sys/kernel/mm/cma/ 5 /sys/kernel/mm/cma/ contains a subdirectory for each CMA 6 heap name (also sometimes called CMA areas). 8 Each CMA heap subdirectory (that is, each 9 /sys/kernel/mm/cma/<cma-heap-name> directory) contains the 15 What: /sys/kernel/mm/cma/<cma-heap-name>/alloc_pages_success 19 the number of pages CMA API succeeded to allocate 21 What: /sys/kernel/mm/cma/<cma-heap-name>/alloc_pages_fail 25 the number of pages CMA API failed to allocate 27 What: /sys/kernel/mm/cma/<cma-heap-name>/release_pages_success [all …]
|
/linux-6.12.1/kernel/dma/ |
D | contiguous.c | 11 * The Contiguous Memory Allocator (CMA) makes it possible to 32 * CMA tries to solve this issue by operating on memory regions 38 #define pr_fmt(fmt) "cma: " fmt 46 #include <linux/cma.h> 55 struct cma *dma_contiguous_default_area; 58 * Default global CMA area size can be defined in kernel's .config. 64 * Users, who want to set the size of global CMA area for their system 65 * should use cma= kernel parameter. 92 early_param("cma", early_cma); 96 static struct cma *dma_contiguous_numa_area[MAX_NUMNODES]; [all …]
|
D | Kconfig | 162 depends on HAVE_DMA_CONTIGUOUS && CMA 168 You can disable CMA by specifying "cma=0" on the kernel's command 180 Enable this option to get numa CMA areas so that NUMA devices 183 You can set the size of pernuma CMA by specifying "cma_pernuma=size" 184 or set the node id and its size of CMA by specifying "numa_cma= 196 Memory Allocator. If the size of 0 is selected, CMA is disabled by 197 default, but it can be enabled by passing cma=size[MG] to the kernel. 208 If 0 percent is selected, CMA is disabled by default, but it can be 209 enabled by passing cma=size[MG] to the kernel.
|
D | pool.c | 6 #include <linux/cma.h> 60 struct cma *cma; in cma_in_zone() local 62 cma = dev_get_cma_area(NULL); in cma_in_zone() 63 if (!cma) in cma_in_zone() 66 size = cma_get_size(cma); in cma_in_zone() 70 /* CMA can't cross zone boundaries, see cma_activate_area() */ in cma_in_zone() 71 end = cma_get_base(cma) + size - 1; in cma_in_zone()
|
/linux-6.12.1/Documentation/admin-guide/mm/ |
D | cma_debugfs.rst | 2 CMA Debugfs Interface 5 The CMA debugfs interface is useful to retrieve basic information out of the 6 different CMA areas and to test allocation/release in each of the areas. 8 Each CMA area represents a directory under <debugfs>/cma/, represented by 9 its CMA name like below: 11 <debugfs>/cma/<cma_name> 16 - [RO] count: Amount of memory in the CMA area. 19 - [WO] alloc: Allocate N pages from that CMA area. For example:: 21 echo 5 > <debugfs>/cma/<cma_name>/alloc 25 - [WO] free: Free N pages from that CMA area, similar to the above.
|
/linux-6.12.1/drivers/dma-buf/heaps/ |
D | cma_heap.c | 3 * DMABUF CMA heap exporter 12 #include <linux/cma.h> 28 struct cma *cma; member 258 cma_release(cma_heap->cma, buffer->cma_pages, buffer->pagecount); in cma_heap_dma_buf_release() 302 cma_pages = cma_alloc(cma_heap->cma, pagecount, align, false); in cma_heap_allocate() 306 /* Clear the cma pages */ in cma_heap_allocate() 358 cma_release(cma_heap->cma, cma_pages, pagecount); in cma_heap_allocate() 369 static int __add_cma_heap(struct cma *cma, void *data) in __add_cma_heap() argument 377 cma_heap->cma = cma; in __add_cma_heap() 379 exp_info.name = cma_get_name(cma); in __add_cma_heap() [all …]
|
D | Kconfig | 9 bool "DMA-BUF CMA Heap" 12 Choose this option to enable dma-buf CMA heap. This heap is backed 13 by the Contiguous Memory Allocator (CMA). If your system has these
|
/linux-6.12.1/arch/s390/mm/ |
D | init.c | 31 #include <linux/cma.h> 223 /* Prevent memory blocks which contain cma regions from going offline */ 230 static int s390_cma_check_range(struct cma *cma, void *data) in s390_cma_check_range() argument 236 start = cma_get_base(cma); in s390_cma_check_range() 237 end = start + cma_get_size(cma); in s390_cma_check_range()
|
/linux-6.12.1/arch/xtensa/boot/dts/ |
D | kc705.dts | 22 linux,cma { 28 linux,cma-default;
|
/linux-6.12.1/arch/loongarch/boot/dts/ |
D | loongson-2k0500-ref.dts | 35 linux,cma { 39 linux,cma-default;
|
D | loongson-2k2000-ref.dts | 33 linux,cma { 37 linux,cma-default;
|
D | loongson-2k1000-ref.dts | 34 linux,cma { 38 linux,cma-default;
|
/linux-6.12.1/Documentation/devicetree/bindings/media/ |
D | nuvoton,npcm-vcd.yaml | 46 CMA pool to use for buffers allocation instead of the default CMA pool.
|
D | allwinner,sun4i-a10-video-engine.yaml | 63 CMA pool to use for buffers allocation instead of the default 64 CMA pool.
|
/linux-6.12.1/Documentation/arch/powerpc/ |
D | firmware-assisted-dump.rst | 147 Contiguous Memory Allocator (CMA) for memory reservation if CMA is 148 configured for kernel. With CMA reservation this memory will be 152 that were present in CMA region:: 235 By default, FADump reserved memory will be initialized as CMA area. 237 prevent FADump to use CMA.
|
/linux-6.12.1/arch/arm64/boot/dts/freescale/ |
D | imx93-phycore-som.dtsi | 24 linux,cma { 29 linux,cma-default;
|
/linux-6.12.1/arch/powerpc/kernel/ |
D | fadump.c | 25 #include <linux/cma.h> 66 static struct cma *fadump_cma; 69 * fadump_cma_init() - Initialize CMA area from a fadump reserved memory 71 * This function initializes CMA area from fadump reserved memory. 74 * Initialize only the area equivalent to boot memory size for CMA use. 76 * to CMA and pages for those will stay reserved. boot memory size is 77 * aligned per CMA requirement to satisy cma_init_reserved_mem() call. 90 * Do not use CMA if user has provided fadump=nocma kernel parameter. in fadump_cma_init() 104 pr_err("Failed to init cma area for firmware-assisted dump,%d\n", rc); in fadump_cma_init() 106 * Though the CMA init has failed we still have memory in fadump_cma_init() [all …]
|
/linux-6.12.1/arch/arm64/boot/dts/ti/ |
D | k3-am62a-phycore-som.dtsi | 52 /* global cma region */ 53 linux,cma { 58 linux,cma-default;
|