免费注册 查看新帖 |

Chinaunix

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

为什么对 kmalloc 分配的内存做 ioremap 会导致崩溃? [复制链接]

论坛徽章:
22
丑牛
日期:2014-08-15 14:32:0015-16赛季CBA联赛之同曦
日期:2017-12-14 15:28:14黑曼巴
日期:2017-08-10 08:14:342017金鸡报晓
日期:2017-02-08 10:39:42黑曼巴
日期:2016-11-15 15:48:38CU十四周年纪念徽章
日期:2016-11-09 13:19:1015-16赛季CBA联赛之同曦
日期:2016-04-08 18:00:03平安夜徽章
日期:2015-12-26 00:06:30程序设计版块每日发帖之星
日期:2015-12-03 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-09 06:20:002015亚冠之吉达阿赫利
日期:2015-07-03 08:39:42
11 [报告]
发表于 2011-01-28 12:09 |只看该作者
回复 10# tassard


    因为kmalloc是基于slab的,每次最多分配128kb(可以修改)。ioremap就是相当于返回了这片内存的开始位置,所以你这样访问前128kb没问题,后面的就挂了。

论坛徽章:
22
丑牛
日期:2014-08-15 14:32:0015-16赛季CBA联赛之同曦
日期:2017-12-14 15:28:14黑曼巴
日期:2017-08-10 08:14:342017金鸡报晓
日期:2017-02-08 10:39:42黑曼巴
日期:2016-11-15 15:48:38CU十四周年纪念徽章
日期:2016-11-09 13:19:1015-16赛季CBA联赛之同曦
日期:2016-04-08 18:00:03平安夜徽章
日期:2015-12-26 00:06:30程序设计版块每日发帖之星
日期:2015-12-03 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-09 06:20:002015亚冠之吉达阿赫利
日期:2015-07-03 08:39:42
12 [报告]
发表于 2011-01-28 12:10 |只看该作者
你要真映射那么大的空间,可以多使用几次kmalloc

论坛徽章:
0
13 [报告]
发表于 2011-01-28 15:47 |只看该作者
回复  tassard


    因为kmalloc是基于slab的,每次最多分配128kb(可以修改)。ioremap就是相当于返回 ...
amarant 发表于 2011-01-28 12:09



    不会啊,在我的开发板上,kmalloc可以最大分配4M内存。

论坛徽章:
22
丑牛
日期:2014-08-15 14:32:0015-16赛季CBA联赛之同曦
日期:2017-12-14 15:28:14黑曼巴
日期:2017-08-10 08:14:342017金鸡报晓
日期:2017-02-08 10:39:42黑曼巴
日期:2016-11-15 15:48:38CU十四周年纪念徽章
日期:2016-11-09 13:19:1015-16赛季CBA联赛之同曦
日期:2016-04-08 18:00:03平安夜徽章
日期:2015-12-26 00:06:30程序设计版块每日发帖之星
日期:2015-12-03 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-09 06:20:002015亚冠之吉达阿赫利
日期:2015-07-03 08:39:42
14 [报告]
发表于 2011-01-28 15:52 |只看该作者
回复 13# tassard


    你用cat /proc/slabinfo看下最大的那个是多少,也可以看看kmalloc的源码

论坛徽章:
0
15 [报告]
发表于 2011-01-28 16:25 |只看该作者
kmalloc对于大于PAGE_SIZE和小于等于PAGE_SIZE采用了两种分配方式,一个是分配后备高速缓存,一个是采用__get_free_pages来获取。不知道是不是这个原因引起的。并且在ioremap中会对物理地址重新创建映射关系的。如果对应的物理地址存在了映射的话,会返回错误的。你可以看看ioremap回来的地址对不对?在小于一个PAGE_SIZE时,可能并没有对真正的物理内存修改,而仅仅是对cache修改了。

论坛徽章:
22
丑牛
日期:2014-08-15 14:32:0015-16赛季CBA联赛之同曦
日期:2017-12-14 15:28:14黑曼巴
日期:2017-08-10 08:14:342017金鸡报晓
日期:2017-02-08 10:39:42黑曼巴
日期:2016-11-15 15:48:38CU十四周年纪念徽章
日期:2016-11-09 13:19:1015-16赛季CBA联赛之同曦
日期:2016-04-08 18:00:03平安夜徽章
日期:2015-12-26 00:06:30程序设计版块每日发帖之星
日期:2015-12-03 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-09 06:20:002015亚冠之吉达阿赫利
日期:2015-07-03 08:39:42
16 [报告]
发表于 2011-01-28 16:37 |只看该作者
学习了,
我看了一下ioremap的代码,他对低端内存直接返回地址,高端地址就修改页表

我是新手,刚学linux~说错了不要见怪哦

论坛徽章:
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 [报告]
发表于 2011-01-29 17:10 |只看该作者
回复 8# tassard


    用IOREMAP NOCACHE试下 另外建议KMALLOC后只写内存范围内第一个页对齐后的地址
我怀疑是多映射和CACHE 造成的越界行为

论坛徽章:
0
18 [报告]
发表于 2011-11-06 23:52 |只看该作者
希望高人回签
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP