poop_alloc_page() --> dma_alloc_coherent()
dma_alloc_coherent() -- 获取物理页,并将该物理页的总线地址保存于dma_handle,返回该物理页的虚拟地址
void *
dma_alloc_coherent(struct device *dev, size_t size,
dma_addr_t *dma_handle, gfp_t gfp)
{
void *ret;
if (!dev || *dev->dma_mask >= 0xffffffffUL)
gfp &= ~GFP_DMA;
ret = (void *)
__get_free_pages(gfp, get_order(size)); //(1)
if (ret) {
memset(ret, 0, size);
*dma_handle =
virt_to_bus(ret); //(2)
}
return ret;
}
(1) 将size转换成order, 即2^order
(2) 将虚拟地址ret转换成总线地址
2007-08-21 12:29
本文详细介绍了dma_alloc_coherent函数的工作原理,该函数用于给DMA池分配物理页,并返回物理页的虚拟地址,同时保存其总线地址。文章通过代码示例展示了如何使用此函数。
2万+

被折叠的 条评论
为什么被折叠?



