Re: [PATCHv8 07/12] mm: cma: Contiguous Memory Allocator added
From: Michal Nazarewicz <hidden>
Date: 2011-02-02 14:58:54
Also in:
linux-arm-kernel, linux-media, lkml
On Wed, Dec 15, 2010 at 09:34:27PM +0100, Michal Nazarewicz wrote:quoted
+unsigned long cma_reserve(unsigned long start, unsigned long size, + unsigned long alignment) +{ + pr_debug("%s(%p+%p/%p)\n", __func__, (void *)start, (void *)size, + (void *)alignment); + + /* Sanity checks */ + if (!size || (alignment & (alignment - 1))) + return (unsigned long)-EINVAL; + + /* Sanitise input arguments */ + start = PAGE_ALIGN(start); + size = PAGE_ALIGN(size); + if (alignment < PAGE_SIZE) + alignment = PAGE_SIZE; + + /* Reserve memory */ + if (start) { + if (memblock_is_region_reserved(start, size) || + memblock_reserve(start, size) < 0) + return (unsigned long)-EBUSY; + } else { + /* + * Use __memblock_alloc_base() since + * memblock_alloc_base() panic()s. + */ + u64 addr = __memblock_alloc_base(size, alignment, 0); + if (!addr) { + return (unsigned long)-ENOMEM; + } else if (addr + size > ~(unsigned long)0) { + memblock_free(addr, size); + return (unsigned long)-EOVERFLOW; + } else { + start = addr; + } + } +
On Wed, 02 Feb 2011 13:43:33 +0100, Ankita Garg [off-list ref] wrote:
Reserving the areas of memory belonging to CMA using memblock_reserve, would preclude that range from the zones, due to which it would not be available for buddy allocations right ?
Correct. CMA however, injects allocated pageblocks to buddy so they end up in buddy with migratetype set to MIGRATE_CMA.
quoted
+ return start; +}
-- Best regards, _ _ .o. | Liege of Serenly Enlightened Majesty of o' \,=./ `o ..o | Computer Science, Michal "mina86" Nazarewicz (o o) ooo +-<email/jid: mnazarewicz@google.com>--------ooO--(_)--Ooo-- -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Fight unfair telecom policy in Canada: sign http://dissolvethecrtc.ca/ Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>