cell上进程虚拟内存跨4G的问题
最近在解决一些DMA操作中虚拟内存跨4G的问题,在这里随便说说。
因为cell blade是一款支持64位操作系统的机器,所以你的程序可以使用64位编译器来生成相应的binary code。这种情况下,一个进程可以使用的内存就超出了4G,也就是说DMA的时候,主存的地址高位就可能发生变化。
当你需要获取的一段数据刚好跨过了4G界限的时候,你就需要将你的一次DMA操作分为两个DMA操作,分别指明起始地址的高位,下面这个函数不会自动考虑这个高位发生变化的情况,如果作为一次DMA调用,会出现bus error的错误提示信息。
参考这个函数:spu_mfcdma64(ls, mfc_ea2h(ea), mfc_ea2l(ea), size, tag,((tid<<24)|(rid<<16)|MFC_GET_CMD))