您的位置:首页 > 其它

dma_alloc_coherent vs. dma_alloc_writecombine

2012-03-24 12:47 615 查看
这两天在做 DMA 相关开发, 遇到一对分配 dma buffer 的函数,dma_alloc_coherent 与 dma_alloc_writecombine。 不知其区别。 google 一下也没有得到信息。只好自己看代码。

原来 dma_alloc_coherent 在 arm 平台上会禁止页表项中的 C (Cacheable) 域以及 B (Bufferable)域。

而 dma_alloc_writecombine 只禁止 C (Cacheable) 域.

#define pgprot_noncached(prot) __pgprot(pgprot_val(prot) & ~(L_PTE_CACHEABLE | L_PTE_BUFFERABLE))

#define pgprot_writecombine(prot) __pgprot(pgprot_val(prot) & ~L_PTE_CACHEABLE)

进一步查找 ARM 书籍, 原来 C 代表是否使用高速缓冲存储器, 而 B 代表是否使用写缓冲区。

这样, dma_alloc_writecombine 分配出来的内存不使用缓存,但是会使用写缓冲区。

而 dma_alloc_coherent 则二者都不使用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: