免费注册 查看新帖 |

Chinaunix

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

什么原因会导致 spin_lock_bh 加锁失败 ? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-06-28 10:08 |只看该作者 |倒序浏览
hi, 有个问题, 使用 spin_lock_bh 时, 长时间加不上锁, 导致系统崩溃。

spin_lock_bh 生成的汇编代码:

  1.      call   2e81 <xxx+0x51>
  2.      2e81: R_386_PC32        local_bh_disable   --- 先禁止软中断
  3.      mov    0x8(%esp),%ecx
  4.      mov    0x4(%esp),%esi
  5.      add    %esi,%ecx
  6.      lea    0x0(,%ecx,4),%eax
  7.      mov    %eax,(%esp)
  8.      mov    %eax,%edx
  9.      mov    $0x100,%eax
  10.      mov    0xc(%edi),%ebx
  11.      add    %ebx,%edx
  12.      lock xadd %ax,(%edx)
  13.      cmp    %ah,%al                   ---  这里比较(ah != al)
  14.      je     2eb4 <xxx+0x84>
  15.      pause                                  --- (ah != al)进来这里, 也挂在这里
  16.      mov    (%edx),%al
  17.      jmp    2eaa <xxx+0x7a>
  18.      mov    0x8(%edi),%edx
  19.      lea    0x0(,%ecx,8),%ebp
复制代码
不知道信息够不够全, 系统环境是  多核, 存在内存泄露, 踩内存等不稳定因素, 会成为
spin_lock_bh 加锁时间过长导致宕机的原因吗???

还有其他什么因素可能会导致 spin_lock_bh 加锁失败, 就一个地方加锁,应该不存在锁资源已经被占用情况。
谢谢。

论坛徽章:
0
2 [报告]
发表于 2011-06-28 11:24 |只看该作者
应该是该锁已被其他代码持有并且不释放导致的,可以看看是否有代码持有该锁并在代码中有长时间运行而未释放该锁,或者在持有该锁的程序编写不当导致进程切换。

论坛徽章:
0
3 [报告]
发表于 2011-06-28 12:41 |只看该作者
回2楼
应该是你说的这种情况, 我在1楼的描述有问题。
多CPU情况下,其中一个CPU锁住了一个资源, 长时间不放。
另外的CPU得不到资源时就可能把系统挂掉。

现在的问题是:能不能确认那个锁已经给加上了?
有没有办法,根据反汇编语句,推算出 spinlock_t 类型的锁已经给占用?
能得到edx的地址,但看不到值, 谁有办法
谢谢!

论坛徽章:
0
4 [报告]
发表于 2011-06-28 14:11 |只看该作者
这个除了查代码外,好像没有什么办法。因为spinklock本身没有等待队列。

论坛徽章:
1
NBA常规赛纪念章
日期:2015-05-04 22:32:03
5 [报告]
发表于 2011-06-28 19:13 |只看该作者
我现在也遇到了CPU调度时死锁的问题,仍然在纠结中...LZ用什么方法查看的汇编代码

论坛徽章:
1
NBA常规赛纪念章
日期:2015-05-04 22:32:03
6 [报告]
发表于 2011-06-28 19:14 |只看该作者
LZ能不能贴一下源码?

论坛徽章:
0
7 [报告]
发表于 2011-07-06 20:38 |只看该作者
中断、休眠唤醒会不会导致加锁失败?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP