The CMA plays a role as modular framework for physically contiguous memory management, which is not tied to any memory allocation method or strategy. Where memory for each device is allocated as per specific machine configurations that could be also loaded at run-time (). Such configurations list memory regions () assigned to each device.
The CMA framework is needed because of:
1. Various embedded device drivers have their own memory allocation code AKA .. pluggable allocators, so CMA acts as an internal entity among device drivers and pluggable allocators.
2. Various embedded devices have no scatter-gather an I/O map support and .
3. Various embedded devices impose additional requirements on the buffers ().
Important Facts about Memory Regions: Each region has its own type, size, alignment demand, start address (physical address where it should be placed) and an allocation algorithm assigned.
Important Facts about Pluggable allocators: One can develop a newer algorithm to allocate and management of memory then place it into a pluggable allocator.
Important Facts about CMA API: it operates on pages and page frame numbers (PFNs) without providing mechanism for maintaining cache coherency , device driver should never call such API directly.
The CMA is integrated with DMA subsystem (The usual calls to the DMA API should work as usual)