QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 8968|回复: 1

驱动开发中奇怪的锁问题

[复制链接]
发表于 2014-12-24 22:55:44 | 显示全部楼层 |阅读模式
设计如下(只是测试用,内核版本为2.6.32.17):在驱动加载时用mutex_init(&g_Mutex)来初始化全局互斥锁g_Mutex;
在open()时用mutex_lock(&g_Mutex)来获得锁,并使能一个中断;
在release()时用mutex_unlock(&g_Mutex)来释放锁,并禁用open()使能的中断;
在中断处理中用mutex_trylock(&g_Mutex)来尝试能不能获得锁,如果能够获得就用mutex_unlock(&g_Mutex)释放锁。

但执行结果却是:中断调用mutex_trylock时系统抛出错误,我拍照记录下来,就打印一部分吧
[<c0043b5c>](warn_slowpath_common+0x0/0x6 from [<c0043bdc>] (warn_slowpath_null+0x18/0x13c)
r7:00000012 r6:00000000 r5:00000000 r4:bf021100
[<c0043bc4>](warn_slowpath_null+0x0/0x13c) from [<c02fa2d4> (mutex_trylock+0x68/0x13c)]

自旋锁也奇怪:在驱动加载时初始化自旋锁lock,在open()时先spin_lock(&lock)再马上spin_trylock(&lock),居然spin_trylock(&lock)返回1

[ 本帖最后由 zz_6_3 于 2014-12-24 22:57 编辑 ]
发表于 2014-12-25 09:48:52 | 显示全部楼层
不明真相围观,Linux 现在允许全局锁吗?
是不是你的操作有问题,Linux 对于全局锁有特殊要求,因为这毕竟会影响其他所有进程的运行,所以你全局锁必须符合某种要求?

warn_slowpath_null 这东西是哪来的?我觉得你还是看看这个东西吧,warn 开头,应该是某个注意事项的检查函数。
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-11-21 17:00 , Processed in 0.066299 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

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