*参照元 [#r9cf43ae] #backlinks *説明 [#ye50cf11] -パス: [[linux-4.4.1/arch/arm/mm/dma-mapping.c]] -FIXME: これは何? --説明 **引数 [#se3fdec5] -struct device *dev -- --[[linux-4.4.1/device]] -size_t size -- -gfp_t gfp -- --[[linux-4.4.1/gfp_t]] **返り値 [#zbb033c7] -struct page * -- **参考 [#td267c24] *実装 [#le769183] /* * Allocate a DMA buffer for 'dev' of size 'size' using the * specified gfp mask. Note that 'size' must be page aligned. */ static struct page *__dma_alloc_buffer(struct device *dev, size_t size, gfp_t gfp) { unsigned long order = get_order(size); struct page *page, *p, *e; - --[[linux-4.4.1/get_order()]] page = alloc_pages(gfp, order); if (!page) return NULL; - --[[linux-4.4.1/alloc_pages()]] /* * Now split the huge page and free the excess pages */ split_page(page, order); - --[[linux-4.4.1/split_page()]] for (p = page + (size >> PAGE_SHIFT), e = page + (1 << order); p < e; p++) __free_page(p); - --[[linux-4.4.1/__free_page()]] __dma_clear_buffer(page, size); - --[[linux-4.4.1/__dma_clear_buffer()]] return page; } *コメント [#be52eb8a]