免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: langfanyun
打印 上一主题 下一主题

内核和应用程序通过mmap共享的问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2010-11-04 16:08 |只看该作者
回复 8# sep

我的kernel为2.6.29. mem_map_reserve和remap_page_range都没有定义,用SetPageReserved和remap_pfn_range

现在代码为:
pdata=(char *)kmalloc(4096, GFP_KERNEL);
page=virt_to_page(pdata);
SetPageReserved(page);

static int test_mmap(struct file *flip,struct vm_area_struct *vma)
{
    unsigned long pfn;

    vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); //no cache
    vma->vm_flags |= VM_IO;
    vma->vm_flags |= VM_RESERVED;

    pfn = virt_to_phys(pdata) >> PAGE_SHIFT;
    if(remap_pfn_range(vma, vma->vm_start, pfn, vma->vm_end - vma->vm_start, vma->vm_page_prot))
        return -EAGAIN;

    vma->vm_ops = &test_vm_ops;
    test_vm_open(vma);
     
    return 0;
}

问题依旧,不知kmalloc出的页面怎么设置为nocache?

论坛徽章:
0
12 [报告]
发表于 2010-11-04 17:23 |只看该作者
回复 11# langfanyun


    遍历你分配出来的page,然后遍历对应的pte,然后一个一个的改

论坛徽章:
0
13 [报告]
发表于 2010-11-04 17:56 |只看该作者
回复  langfanyun


    遍历你分配出来的page,然后遍历对应的pte,然后一个一个的改
snail_314 发表于 2010-11-04 17:23



    具体调用什么函数了,能贴点代码吗? 谢谢

论坛徽章:
7
丑牛
日期:2013-10-18 14:43:21技术图书徽章
日期:2013-11-03 09:58:03辰龙
日期:2014-01-15 22:57:50午马
日期:2014-09-15 07:04:39丑牛
日期:2014-10-16 14:25:222015年亚洲杯之伊朗
日期:2015-03-16 10:24:352015亚冠之城南
日期:2015-05-31 09:52:32
14 [报告]
发表于 2010-11-05 13:12 |只看该作者
本帖最后由 smalloc 于 2010-11-05 13:23 编辑

回复 10# langfanyun


    在读之前加一个mb() 试验下

论坛徽章:
7
丑牛
日期:2013-10-18 14:43:21技术图书徽章
日期:2013-11-03 09:58:03辰龙
日期:2014-01-15 22:57:50午马
日期:2014-09-15 07:04:39丑牛
日期:2014-10-16 14:25:222015年亚洲杯之伊朗
日期:2015-03-16 10:24:352015亚冠之城南
日期:2015-05-31 09:52:32
15 [报告]
发表于 2010-11-06 19:56 |只看该作者
回复 13# langfanyun


    草寇这帖
http://linux.chinaunix.net/bbs/thread-1173483-1-1.html
顺便问问LZ用的什么芯片

论坛徽章:
0
16 [报告]
发表于 2010-11-08 11:18 |只看该作者
回复  langfanyun


    草寇这帖

顺便问问LZ用的什么芯片
smalloc 发表于 2010-11-06 19:56



    我HW是PXA310,我试了ioremap_nocache把kmalloc得到的地址再做一次映射,但对映射后的地址访问经常出问题。帖子里提到内核读取共享内存时执行flush_all_cache,请问flush_all_cache具体是什么函数? 谢谢

论坛徽章:
7
丑牛
日期:2013-10-18 14:43:21技术图书徽章
日期:2013-11-03 09:58:03辰龙
日期:2014-01-15 22:57:50午马
日期:2014-09-15 07:04:39丑牛
日期:2014-10-16 14:25:222015年亚洲杯之伊朗
日期:2015-03-16 10:24:352015亚冠之城南
日期:2015-05-31 09:52:32
17 [报告]
发表于 2010-11-08 12:07 |只看该作者
回复 16# langfanyun


    可否告知下芯片是什么ARCH的?具体是哪款?mb函数试过了吗

论坛徽章:
0
18 [报告]
发表于 2010-11-08 12:43 |只看该作者
pxa310不是arm11的么?

论坛徽章:
0
19 [报告]
发表于 2010-11-08 14:57 |只看该作者
回复  langfanyun


    可否告知下芯片是什么ARCH的?具体是哪款?mb函数试过了吗
smalloc 发表于 2010-11-08 12:07



    PXA310是Marvell xscale结构,其实也是ARM架构的,具体对应ARM几我也不清楚。 现在调用flush_cache_all,不是flush_all_cache,可以解决问题。帖子里提到的ioremap_nocache把kmalloc得到的地址再做一次映射,我没搞定,数据访问有问题,内核里对ioremap_nocache映射后的地址访问的数据和应用层通过mmap映射访问的数据不一致。

论坛徽章:
0
20 [报告]
发表于 2010-11-08 14:59 |只看该作者
mb函数试过了,没有效果,目前暂时只有通过flush_cache_all解决,不知是否还有其他方法.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP