Linux kernel: How to debug mutex deadlock 如何调试mutex死锁

和userspace调试lock一样,主要是要:

1. 找到lock死锁的地方,打印出调用栈

2. 找出这个mutex目前被谁占用了

 

针对1:在kernel config中,Kernel Hacking这个大项中,enable跟lock/mutex相关的config,比如CONFIG_DEBUG_MUTEX,以及CONFIG_DETECT_HUNG_TASKS, 这样当死锁发生时,稍微等待一段时间(默认120秒),kernel就会检测到死锁,同时打印出调用栈。在kernel hacking里面,包含了大量的有利于调试的config,可以一项一项都看一遍,总有一款适合您。

 

针对2:来到代码中死锁的地方,在enable了CONFIG_DEBUG_MUTEX的情况下,添加这样的代码:

show_stack(<lock>.owner, NULL);

<lock>是你的mutex的变量名,.owner是一个struct task_struct *,利用show_stack函数就可以打印出该mutex被谁占用了,而且占用该mutex时的调用栈。非常cool。

此外可以看一下struct mutex的定义,有一些实用的东西,比如mutex的name。struct task_struct中也有一些实用的东西,比如pid等。

 

所以总结来说,kernel中目前可以打印调用栈的有:

dump_stack:打印当前的backtrace

show_stack:打印指定task_struct的backtrace 

 

转载于:https://www.cnblogs.com/super119/archive/2013/04/09/3010448.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值