LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 845|回复: 2

PCI内存访问的奇怪问题

[复制链接]
发表于 2008-10-16 20:27:36 | 显示全部楼层 |阅读模式
PCI内存空间事先通过mmap()系统调用映射到了用户空间的BufPci,在应用程序中,我在将一个Buf中的数据拷贝到PCI设备内存空间BufPci后,紧接着从BufPci读出来跟原数据Buf中对比发现部分数据变了,很可能是cache一致性问题引起的,我将这两个指针都定义为volatile类型也不能解决问题,mmap()系统调用好像没有mmap_nocache()这种版本吧?不知怎么解决,希望得到高手指点
 楼主| 发表于 2008-10-18 17:01:31 | 显示全部楼层
就是PCI设备上的内存,我发现逐字节拷贝会出现数据不一致现象,逐字(4字节)拷贝就没问题了,还没弄清楚什么原因。
发现一个问题,就是逐字拷贝之前把字节序颠倒(PPC CPU是大端,PCI小端)再写入,写完后读出发现跟原始数据竟然也是一致的,为什么字节swap不起作用呢?

现在在驱动中用get_free_pages()为一个PCI设备分配了一段内存,作为与该PCI设备通信的共享内存,现在的问题是该PCI设备访问这段内存时候就会死机,应该是这段共享内存的访问属性设置有问题,不知道怎么设置这样分配出来的内存的属性,函数get_free_pages()参数用__DMA_GFP也不行,不知是否应该用其他内存分配函数。请高人指点一下
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-18 19:15:29 | 显示全部楼层
用pci_alloc_consistent()分配不到64K的空间也不行,老是不成功,oops
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表