查看: 3028|回复: 2

[其他] P1020 QorIQ Integrated Processor分配64M的连续内存,用作DMA,出错

[复制链接]

该用户从未签到

1

主题

1

帖子

0

新手上路

Rank: 1

积分
5
最后登录
1970-1-1
发表于 2012-10-11 11:09:55 | 显示全部楼层 |阅读模式
 CPU:P1011
kernel:linux2.6.32
CONFIG_FORCE_MAX_ZONEORDER设置成14,
pci_alloc_consistent可以成功分配32M的DMA。并正常使用。
 
但是CONFIG_FORCE_MAX_ZONEORDER设置成15,
理论上可以分配64M空间
pci_alloc_consistent    ->
    dma_alloc_coherent    ->
        dma_ops->alloc_coherent    (dma_direct_alloc_coherent)
代码如下:
void *dma_direct_alloc_coherent(struct device *dev, size_t size,
                                dma_addr_t *dma_handle, gfp_t flag)
{
        void *ret;
#ifdef CONFIG_NOT_COHERENT_CACHE
        ret = __dma_alloc_coherent(dev, size, dma_handle, flag);
        if (ret == NULL)
                return NULL;
        *dma_handle += get_dma_offset(dev);
        return ret;
#else
        struct page *page;
        int node = dev_to_node(dev);
 
        /* ignore region specifiers */
        flag  &= ~(__GFP_HIGHMEM);
 
        page = alloc_pages_node(node, flag, get_order(size));
        if (page == NULL)
                return NULL;
        ret = page_address(page);
        memset(ret, 0, size);
        *dma_handle = virt_to_abs(ret) + get_dma_offset(dev);
 
        return ret;
#endif
}
 
CONFIG_FORCE_MAX_ZONEORDER设置成15:
先分配32M,再分配16M,可以成功。
先分配32M,再分配32M,失败。
直接分配64M,失败。
 

ret = page_address(page);之后memset(ret, 0, size); /*这里死机*/
 
memset之后添加打印信息,没打印出来。
如果,注释掉memset,就可以成功打印,继续运行。
 
这说明alloc_pages_node或者page_address里面的内存是错误的?
我知道答案 目前已有1人回答
回复

使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2012-10-12 09:09:11 | 显示全部楼层

    RE:P1020 QorIQ Integrated Processor分配64M的连续内存,用作DMA,出错

    知道的同学回答一下吧。我只能帮顶了。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    2

    帖子

    0

    新手上路

    Rank: 1

    积分
    27
    最后登录
    2019-2-24
    发表于 2012-12-27 13:16:40 | 显示全部楼层

    RE:P1020 QorIQ Integrated Processor分配64M的连续内存,用作DMA,出错

    你哪个版本的Linux啊?
    更新到最新的SDK吧。
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-20 11:51 , Processed in 0.086286 second(s), 23 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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