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 则二者都不使用。
原来 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 则二者都不使用。
相关文章推荐
- dma_alloc_writecombine和dma_alloc_coherent的区别
- 内核使用硬件ip的dma,dma_alloc_coherent 与 dma_alloc_writecombine
- dma_alloc_writecombine和dma_alloc_coherent的区别
- dma_alloc_coherent vs. dma_alloc_writecombine
- 内核使用硬件ip的dma,dma_alloc_coherent 与 dma_alloc_writecombine (转)
- dma_alloc_coherent 与 dma_alloc_writecombine
- 内核使用硬件ip的dma,dma_alloc_coherent 与 dma_alloc_writecombine
- 内核使用硬件ip的dma,dma_alloc_coherent 与 dma_alloc_writecombine
- dma_alloc_coherent 分析
- dma_alloc_writecombine
- dma_alloc_writecombine
- dma_alloc_writecombine
- dma_alloc_writecombine
- dma_alloc_coherent (建立一致性 DMA 映射函数)
- 内核使用硬件ip的dma,dma_alloc_coherent 与 dma_alloc_writecombine
- 【study】DMA内存申请--dma_alloc_coherent 及 寄存器 与 内存
- dma_alloc_coherent (建立一致性 DMA 映射函数)
- 【Linux开发】linux中关于dma_alloc_coherent的用法
- DMA及cache一致性的学习心得 --dma_alloc_writecombine
- DMA及cache一致性的学习心得 --dma_alloc_writecombine