关闭

dma_alloc_coherent vs. dma_alloc_writecombine

433人阅读 评论(0) 收藏 举报

这两天在做 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   则二者都不使用。


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:168313次
    • 积分:2101
    • 等级:
    • 排名:第18765名
    • 原创:9篇
    • 转载:175篇
    • 译文:1篇
    • 评论:1条
    最新评论