On Fri, Feb 3, 2012 at 8:18 PM, Marek Szyprowski <m.szyprowski@xxxxxxxxxxx> wrote: > The Contiguous Memory Allocator is a set of helper functions for DMA > mapping framework that improves allocations of contiguous memory chunks. > > CMA grabs memory on system boot, marks it with CMA_MIGRATE_TYPE and > gives back to the system. Kernel is allowed to allocate movable pages > within CMA's managed memory so that it can be used for example for page > cache when DMA mapping do not use it. On dma_alloc_from_contiguous() > request such pages are migrated out of CMA area to free required > contiguous block and fulfill the request. This allows to allocate large > contiguous chunks of memory at any time assuming that there is enough > free memory available in the system. > > This code is heavily based on earlier works by Michal Nazarewicz. > > Signed-off-by: Marek Szyprowski <m.szyprowski@xxxxxxxxxxx> > Signed-off-by: Kyungmin Park <kyungmin.park@xxxxxxxxxxx> > CC: Michal Nazarewicz <mina86@xxxxxxxxxx> > Acked-by: Arnd Bergmann <arnd@xxxxxxxx> > Tested-by: Rob Clark <rob.clark@xxxxxxxxxx> > Tested-by: Ohad Ben-Cohen <ohad@xxxxxxxxxx> > Tested-by: Benjamin Gaignard <benjamin.gaignard@xxxxxxxxxx> > --- [...] > +/* > + * Contiguous Memory Allocator > + * > + * The Contiguous Memory Allocator (CMA) makes it possible to > + * allocate big contiguous chunks of memory after the system has > + * booted. > + * > + * Why is it needed? > + * > + * Various devices on embedded systems have no scatter-getter and/or > + * IO map support and require contiguous blocks of memory to > + * operate. They include devices such as cameras, hardware video > + * coders, etc. > + * > + * Such devices often require big memory buffers (a full HD frame > + * is, for instance, more then 2 mega pixels large, i.e. more than 6 > + * MB of memory), which makes mechanisms such as kmalloc() or > + * alloc_page() ineffective. > + * > + * At the same time, a solution where a big memory region is > + * reserved for a device is suboptimal since often more memory is > + * reserved then strictly required and, moreover, the memory is > + * inaccessible to page system even if device drivers don't use it. > + * > + * CMA tries to solve this issue by operating on memory regions > + * where only movable pages can be allocated from. This way, kernel > + * can use the memory for pagecache and when device driver requests > + * it, allocated pages can be migrated. > + * Without boot mem reservation, what is the successful rate of CMA to serve requests of 1MiB, 2MiB, 4MiB and 8MiB chunks? -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/ Don't email: <a href