【问题标题】:Kernel 3.18 CMA: dma_alloc_coherent fails内核 3.18 CMA:dma_alloc_coherent 失败
【发布时间】:2015-01-19 07:59:11
【问题描述】:

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

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

有人知道更多吗?预计 CMA 会起作用吗?如果是这样,dma_alloc_coherent 可能存在什么问题?它只是返回 NULL,我没有从中得到更多信息。

感谢您的帮助!

【问题讨论】:

  • 这个问题听起来更适合LKML。特别是考虑到它是关于内核的最新版本。
  • 感谢您的提示!我也用 Kernel 3.13 试过了,也没有用。我认为这更像是关于 CMA 及其在主要开发分支中的实施的一般性问题。 LKML 上有一些关于它的文章,但正如我所说,它对我不起作用。

标签: memory-management linux-kernel


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-15
    • 2018-09-01
    • 2013-09-29
    • 2015-06-06
    • 2015-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多