免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2777 | 回复: 6
打印 上一主题 下一主题

[内存管理] 【dma】关于dma pool的疑问 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-02-08 09:09 |只看该作者 |倒序浏览
LDD上介绍dma pool的时候说

“在对内嵌于某个大结构中的小型区域执行dma时,也可以使用dma池。一些不容易觉察的驱动程序
一致性缓存错误,往往存在于结构中与小型DMA区域相邻的成员中。为了避免这一问题的出现,应该总是显式的为dma操作分配区域,
而与其他非dma数据结构的操作分开”

这句话怎么理解?

论坛徽章:
2
寅虎
日期:2014-11-25 21:47:342015小元宵徽章
日期:2015-03-06 15:58:18
2 [报告]
发表于 2015-02-08 09:36 |只看该作者
本帖最后由 镇水铁牛 于 2015-02-08 09:36 编辑

摘抄的文字不全吧。
1.    dma是硬件资源,看你如何管理和使用,pool也只是一种使用方式而已,好比mem pool。
2.    dma是直接操作总线的,数据传输不经过cpu,但是如果dma的目的地址的数据被cpu cache的话,就会产生数据一致性的问题,解决办法:禁止DMA目标地址范围内的cache功能(会牺牲点性能),如dma_alloc_coherent

论坛徽章:
0
3 [报告]
发表于 2015-02-10 08:55 |只看该作者
回复 2# 镇水铁牛


    这个不是我想要的答案。
关于上面那句话能否举个具体例子说明一下。

论坛徽章:
9
辰龙
日期:2014-08-18 20:38:42未羊
日期:2014-09-04 08:50:45丑牛
日期:2014-09-06 00:12:55寅虎
日期:2014-12-22 20:50:56摩羯座
日期:2015-01-14 22:28:15巳蛇
日期:2015-01-23 20:39:272015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之青岛
日期:2016-03-13 23:37:1915-16赛季CBA联赛之深圳
日期:2016-03-29 18:52:38
4 [报告]
发表于 2015-02-10 09:05 |只看该作者
本帖最后由 Tinnal 于 2015-02-10 09:20 编辑

回复 1# linuxlife123


论坛徽章:
9
辰龙
日期:2014-08-18 20:38:42未羊
日期:2014-09-04 08:50:45丑牛
日期:2014-09-06 00:12:55寅虎
日期:2014-12-22 20:50:56摩羯座
日期:2015-01-14 22:28:15巳蛇
日期:2015-01-23 20:39:272015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之青岛
日期:2016-03-13 23:37:1915-16赛季CBA联赛之深圳
日期:2016-03-29 18:52:38
5 [报告]
发表于 2015-02-10 09:07 |只看该作者
好像还是不是很好理解,让我再想想。

论坛徽章:
9
辰龙
日期:2014-08-18 20:38:42未羊
日期:2014-09-04 08:50:45丑牛
日期:2014-09-06 00:12:55寅虎
日期:2014-12-22 20:50:56摩羯座
日期:2015-01-14 22:28:15巳蛇
日期:2015-01-23 20:39:272015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之青岛
日期:2016-03-13 23:37:1915-16赛季CBA联赛之深圳
日期:2016-03-29 18:52:38
6 [报告]
发表于 2015-02-10 09:26 |只看该作者
原文是这么说的:
DMA pools are also useful in situations where you may be tempted to
perform DMA to small areas embedded within a larger structure
. Some very obscure
driver bugs have been traced down to cache coherency problems with structure fields
adjacent to small DMA areas. To avoid this problem, you should always allocate
areas for DMA operations explicitly, away from other, non-DMA data structures.

关键是标红的这句,原理上说这个区域是分配出来的,怎么可能钳在更大的结构体里呢?除非按这个“更大的结构体”一起分配。

论坛徽章:
0
7 [报告]
发表于 2015-02-10 20:32 |只看该作者
回复 6# Tinnal


    最近碰到一个问题,有个驱动,用dma_alloc_coherent的话,中断来了以后,去读数据,则读出的数据都是0,实际上驱动异常退出以后去检查这块内存,发现是有数据的。但是用dma_pool_alloc,则中断来了以后去读数据就是ok的。搞不明白。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP