免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2329 | 回复: 5

不解:内核定时器函数使用指针指向一片映射的内存时直接当机,谁遇到过??? [复制链接]

论坛徽章:
0
发表于 2011-11-03 10:28 |显示全部楼层
情况如下:用kvmalloc对一个结构体分配了片内存,这段内存需要被用户态mmap调用然后被映射,用
page = vmalloc_to_pfn(ptr);
rc   = remap_pfn_range(vma, start, page, PAGE_SIZE, PAGE_SHARED);
设置这段内存。
然后用一个内核定时器函数通过指针去读这个结构体里的一个成员,直接当机。
不在定时器函数里的话一切正常,放在里面就挂机,不知道定时器处理函数有什么要求??

论坛徽章:
0
发表于 2011-11-03 15:37 |显示全部楼层
情况如下:用kvmalloc对一个结构体分配了片内存,这段内存需要被用户态mmap调用然后被映射,用
page = vm ...
neyshule 发表于 2011-11-03 10:28



    是不是因为kvmalloc可能调用vmalloc的原因,换成kmalloc试试?

论坛徽章:
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
发表于 2011-11-03 16:01 |显示全部楼层
信息呢?感觉你的定时器过早执行了吧

论坛徽章:
16
2015亚冠之吉达阿赫利
日期:2015-08-17 11:21:462015年迎新春徽章
日期:2015-03-04 09:58:11酉鸡
日期:2014-12-07 09:06:19水瓶座
日期:2014-11-04 14:23:29天秤座
日期:2014-03-02 08:57:52双鱼座
日期:2014-02-22 13:07:56午马
日期:2014-02-14 11:08:18双鱼座
日期:2014-02-13 11:09:37卯兔
日期:2014-02-06 15:10:34子鼠
日期:2014-01-20 14:48:19戌狗
日期:2013-12-19 09:37:46射手座
日期:2013-12-19 09:33:47
发表于 2011-11-03 16:10 |显示全部楼层
回复 1# neyshule


    是不是kvmalloc fallback 到vmalloc,vmalloc 调用kmalloc分配线性区描述符等结构时用的参数有GFP_KERNEL,导致了睡眠!
    瞎猜的!
  1.   74/**
  2.   75 * kvmalloc - do allocation preferring kmalloc but falling back to vmalloc
  3.   76 * @size: size of allocation
  4.   77 *
  5.   78 * Return: allocated buffer or NULL if failed
  6.   79 *
  7.   80 * It is possible that policy being loaded from the user is larger than
  8.   81 * what can be allocated by kmalloc, in those cases fall back to vmalloc.
  9.   82 */
  10.   83void *kvmalloc(size_t size)
  11.   84{
  12.   85        void *buffer = NULL;
  13.   86
  14.   87        if (size == 0)
  15.   88                return NULL;
  16.   89
  17.   90        /* do not attempt kmalloc if we need more than 16 pages at once */
  18.   91        if (size <= (16*PAGE_SIZE))
  19.   92                buffer = kmalloc(size, GFP_NOIO | __GFP_NOWARN);
  20.   93        if (!buffer) {
  21.   94                /* see kvfree for why size must be at least work_struct size
  22.   95                 * when allocated via vmalloc
  23.   96                 */
  24.   97                if (size < sizeof(struct work_struct))
  25.   98                        size = sizeof(struct work_struct);
  26.   99                buffer = vmalloc(size);
  27. 100        }
  28. 101        return buffer;
  29. 102}
复制代码

论坛徽章:
0
发表于 2011-11-04 02:19 |显示全部楼层
回复 3# smalloc


    解决了,你说的对的,时序没控制好定时器早执行了导致指针指的东西还不存在。。。。

论坛徽章:
0
发表于 2011-11-04 02:20 |显示全部楼层
回复 3# smalloc


    另外再请问一下我的定时精度能调低吗??我如果吧定时间隔设成HZ/1000的话就死机,貌似比HZ小的都不行,但是HZ是1s间隔,太大了,怎么办呢???
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP