当前位置: 技术问答>linux和unix
arm 中关于DMA的一些疑问:dma_mmap_writecombine和dma_alloc_coherent
来源: 互联网 发布时间:2017-03-27
本文导语: hi 大家好: 最近再工作中遇到疑问想到一个问题,想请教一下大家。希望高手指点。 dma_mmap_writecombine dma_alloc_coherent 网上找了一些相关资料描述这两个函数的区别: 1,禁止cache 和 禁止 buffer(读写缓存) 2,dma_all...
hi 大家好:
最近再工作中遇到疑问想到一个问题,想请教一下大家。希望高手指点。
dma_mmap_writecombine
dma_alloc_coherent
网上找了一些相关资料描述这两个函数的区别:
1,禁止cache 和 禁止 buffer(读写缓存)
2,dma_alloc_coherent是不带cache和buffer的
3,dma_mmap_writecombine是不带cache但是有buffer的
问题是这样的:
1,很多dma的buf是使用dma_mmap_writecombine这个函数分配缓存区的,那么如果这个按照上述中带有buffer(读缓存)的话。如果cache中的内容还没有及时更新到dam的分配内存中。这样一来,当dma操作数据搬移的话,没有把最新的内容更新到buf中。会不会导致dma把滞后的数据搬移出去?
2,这个是不是和CPU架构有关?当cache中的内容没有更新到内存中的时候,是不会触发dma动作的?
谢谢。我的板子是cortex-A8的。
最近再工作中遇到疑问想到一个问题,想请教一下大家。希望高手指点。
dma_mmap_writecombine
dma_alloc_coherent
网上找了一些相关资料描述这两个函数的区别:
1,禁止cache 和 禁止 buffer(读写缓存)
2,dma_alloc_coherent是不带cache和buffer的
3,dma_mmap_writecombine是不带cache但是有buffer的
问题是这样的:
1,很多dma的buf是使用dma_mmap_writecombine这个函数分配缓存区的,那么如果这个按照上述中带有buffer(读缓存)的话。如果cache中的内容还没有及时更新到dam的分配内存中。这样一来,当dma操作数据搬移的话,没有把最新的内容更新到buf中。会不会导致dma把滞后的数据搬移出去?
2,这个是不是和CPU架构有关?当cache中的内容没有更新到内存中的时候,是不会触发dma动作的?
谢谢。我的板子是cortex-A8的。
|
1 dma_alloc_writecombine分配的内存,不应用读缓冲,但是应用读缓冲,因此写到内存的数据很可能还在cache中,并没有真正应用到内存总线上,此时DMA操作,必然导致滞后的数据搬移到设备中,可以使用dma_alloc_coherent解决这个问题
2 DMA动作是否触发,和cache内容是否更新无关
2 DMA动作是否触发,和cache内容是否更新无关
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。