免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3043 | 回复: 8
打印 上一主题 下一主题

[求助]一个关于spin_lock的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-12-24 16:13 |只看该作者 |倒序浏览
本帖最后由 cyliu 于 2010-12-24 16:21 编辑

进行编写内核模块的时候,遇到奇怪问题。具体描述如下:

1 环境

   虚拟机   内核2.6.27.5  系统:fedora 10

2 过程

   2个虚拟机各安装了fedora 10, 一个虚拟机作为开发机,另一个作测试机。

2.1 在开发机上

      在自己编译内核的系统下,编写内核模块,并编译。该模块没有使用spin_lock,但是调用的内核导出函数里面有spin_lock

2.2 在测试机上

     把编译好的模块拷贝到测试机,使用原始的fedora内核,加载模块。

2.3 结果

     死在内核导出的spin_lock上,而这个spin_lock是在fedora编译的内核里面使用的。

为什么会发生此类事情?按照道理这个spin_lock是fedora编译并引出的,其他模块使用都没有问题,为什么我使用确发生了问题呢?

论坛徽章:
0
2 [报告]
发表于 2010-12-25 19:16 |只看该作者
知道这里我虎藏龙。

是不是我没有描述清楚问题,还是高手们不屑一顾?

还是恳请高手出手相助,或者相互探讨问题的根源,谢谢!

论坛徽章:
0
3 [报告]
发表于 2010-12-26 18:44 |只看该作者
写用户态程序时segment fault
调试发现死在系统函数里
您觉得是系统函数bug么
检查参数和前后逻辑阿

论坛徽章:
0
4 [报告]
发表于 2010-12-26 21:38 |只看该作者
通常, spin_lock 不能睡眠。你看你有没有这个可能

论坛徽章:
0
5 [报告]
发表于 2010-12-27 10:26 |只看该作者
本帖最后由 cyliu 于 2010-12-27 10:27 编辑
写用户态程序时segment fault
调试发现死在系统函数里
您觉得是系统函数bug么
检查参数和前后逻辑阿
hackage 发表于 2010-12-26 18:44



   我写的就是内核模块,和应用程序有什么关系?只是应用态的程序会调用到我这个模块而已。

  检查参数和前后逻辑阿 这种简单的检测我肯定会执行的,但是目前从调用堆栈来看明显和参数都无关,是锁出现了问题。

  不知道为什么锁会死在那里?

论坛徽章:
0
6 [报告]
发表于 2010-12-27 10:35 |只看该作者
本帖最后由 cyliu 于 2010-12-27 10:37 编辑
通常, spin_lock 不能睡眠。你看你有没有这个可能
id_for_fun 发表于 2010-12-26 21:38



可能我没有说清楚,在描述一下:

我写是一个过滤文件系统,可以安装到其他文件系统之上。如原来有一个/home/project目录,他是ext3格式的,现在通过加载我的过滤文件系统到/home/project上。那么在/home/project目录下作文件操作时,都首先经过我的过滤文件系统。这个过滤文件系统目前没有使用任何锁。

这里dcryptay_create就是我的过滤文件系统函数,可以看出,他直接调用了ext3文件系统的函数,而ext3文件系统是原始的操作系统的,没有做任何修改。

所以很奇怪为什么会出现spin_lock锁的问题?

编译过程这样的:

下载了内核代码,通过修改makefile中的版本信息,来和测试的fedora版本一致,编译内核以及自己的模块,最后在测试机上安装编译好的过滤驱动模块,测试出现如此情况。

  google好久,还是没有发现这是什么问题,大家有什么意见?

论坛徽章:
0
7 [报告]
发表于 2010-12-27 17:24 |只看该作者
可能我没有说清楚,在描述一下:

我写是一个过滤文件系统,可以安装到其他文件系统之上。如原来 ...
cyliu 发表于 2010-12-27 10:35


不做内核开发,细节都不了解。
不过你这个需求,看起来可以用fuse来实现,虽然效率会低很多。

fuse在现在的几乎所有发行版默认进了内核。很多文件系统都是基于fuse做的。
fuse的出现,给自己实现文件系统带来了极大方便,自己只需要专注于自己的需求,需要写的代码极少。你可以尝试一下。

希望这个建议没有歪楼。

论坛徽章:
0
8 [报告]
发表于 2010-12-27 18:22 |只看该作者
不做内核开发,细节都不了解。
不过你这个需求,看起来可以用fuse来实现,虽然效率会低很多。

fuse ...
id_for_fun 发表于 2010-12-27 17:24



谢谢. 目前不想用fuse。 因为客户对效率要求高,太影响效率客户不接受


这个锁的问题,在我自己编译的内核上跑得时候,没有任何问题。很奇怪

论坛徽章:
0
9 [报告]
发表于 2010-12-30 14:47 |只看该作者
解决,结贴
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP