【问题标题】:cma-reserved region appears to be 0 KB even if I added a 'linux,cma node' in the device tree即使我在设备树中添加了 \'linux,cma 节点\',cma 保留区域似乎仍为 0 KB
【发布时间】:2023-01-03 18:14:52
【问题描述】:

我想在 linux (5.15.68) 中测试 cma-allocator。
所以我像这样在 /reserved-memory 节点中添加了 linux,cma 节点。

reserved-memory {
    #address-cells = <2>;
    #size-cells = <2>;
    ranges;

    axpu_reserved_mem: axpursvd@90000000 {
        no-map;
        reg = <0x0 0xc0000000 0x0 0x8000000>;
    };

    linux,cma {
        compatible = "shared-dma-pool";
        reusable;
        size = <0 0x30000000>;
        alloc-ranges = <0 0x90000000 0 0x30000000>;
        linux,cma-default;
    };
};

顺便说一句,这个测试是在 qemu arm64 机器上完成的,虚拟机中只有 1GB ram(从 0x80000000 ~ 0xbfffffff),注意我将 3/4 的 ram 分配给 cma 区域,1/8 分配给设备驱动程序(仅供测试)。

当我启动机器时,我在启动过程中看到这条消息。

Memory: 1020140K/1048576K available (3200K kernel code, 386K rwdata, 808K rodata, 7808K init, 106K bss, 28436K reserved, 0K cma-reserved)

为什么CMA-reserved area是0KB?
这是我为 CMA 测试添加的一些配置变量。

CONFIG_MEMORY_ISOLATION=y
CONFIG_CONTIG_ALLOC=y
ONFIG_CMA=y
CONFIG_CMA_DEBUG=y
CONFIG_CMA_DEBUGFS=y
CONFIG_CMA_SYSFS=y
CONFIG_CMA_AREAS=7
# CONFIG_DMA_CMA is not set

我尝试在引导参数中添加“cma=768MB”或将 CONFIG_CMA_AREAS 更改为 1,但结果是一样的。 我错过了什么??

【问题讨论】:

    标签: linux memory-management linux-device-driver


    【解决方案1】:

    我发现通过添加 CONFIG_CMA_DMA=y,cma-alloc 区域被保留。
    当我在引导参数中添加“cma=768M”时,它具有优先权(我不知道内核将 cma 区域放在哪里)。
    但是当引导参数中没有'cma = 768M'时,将使用设备树信息并将CMA区域按照我的意愿从0x90000000开始放置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-14
      • 2017-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多