打印

驱动开发中奇怪的锁问题

驱动开发中奇怪的锁问题

设计如下(只是测试用,内核版本为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 编辑 ]

TOP

不明真相围观,Linux 现在允许全局锁吗?
是不是你的操作有问题,Linux 对于全局锁有特殊要求,因为这毕竟会影响其他所有进程的运行,所以你全局锁必须符合某种要求?

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

TOP