内核3.18 CMA:dma_alloc_coherent失败

时间:2015-01-19 07:59:12

标签: memory-management linux-kernel

我尝试使用连续内存分配器(CMA)功能,并将cma = 1G作为启动参数传递给内核(3.18),但我还没有设法让它工作。我尝试在设备驱动程序(200-500MB)中分配大块连续内存,但对于大于4MB的数据大小,dma_alloc_coherent分配总是失败。

我做了一些研究,有些人建议禁用SWIOTLB,但这没有用。另外,我查看了内核源代码,我实际上不确定CMA是否真的是为内核的主分支实现的?我也找不到令人满意的答案。

有人对此有更多了解吗? CMA有望发挥作用吗?如果是这样,dma_alloc_coherent会出现什么问题?它只返回NULL,我不再从中获取任何信息。

谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

dma_alloc_coherent()总是分配较低的4G内存,请尝试通过cma = @指定cma起始地址和大小,如何根据内核启动时的内存映射表确定起始地址。您看到了这个问题,因为您的系统是64位。