首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >那是什么。(点)和+(加号)之后的锁名在内核崩溃(任务挂起)?

那是什么。(点)和+(加号)之后的锁名在内核崩溃(任务挂起)?
EN

Stack Overflow用户
提问于 2018-04-12 05:36:55
回答 1查看 156关注 0票数 1

当内核检测到task hung时,我发现内核崩溃时有点和加号。

显示系统中持有的所有锁:由khungtaskd/737持有的2个锁:#0:(rcu_read_lock){....},at:<00000000eaa2e968> check_hung_uninterruptible_tasks check_hung_uninterruptible_tasks/ <00000000eaa2e968> _task.c:175个内联#0:(rcu_read_lock){....},at:<00000000eaa2e968>看门狗+0x1c5/0xd60内核/hung_task.c:249 #1:(tasklist_lock){.+.+},at:<000000005ed461f9> debug_show_all_locks+0xd3/0x400内核/锁定/锁页c:4464

锁名后面括号之间的点和加号是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-13 07:12:00

自答:

linux文档中有一个答案。

状态 验证器将锁类使用历史记录跟踪到4n +1单独的状态位:

  • “曾经在国家背景下举行过”
  • “在国家环境中曾被视为重新锁定”
  • “曾经在状态允许的情况下举行”
  • “曾被视为状态已启用的重新锁定”

其中状态可以是(内核/锁/lockdep_states.h)- hardirq - softirq - reclaim_fs之一。

  • “曾经使用过”==!未使用

当违反锁定规则时,这些状态位会出现在锁错误消息中。人为的例子:

modprobe/2287正在尝试获取锁:

代码语言:javascript
复制
     (&sio\_locks[i].lock){-.-...}, at: [] mutex\_lock+0x21/0x24

但是任务已经锁定了:

代码语言:javascript
复制
     (&sio\_locks[i].lock){-.-...}, at: [] mutex\_lock+0x21/0x24

位位置表示上面列出的每种状态的状态、状态读取,每个状态中显示的字符指示:

“.”在irq上下文中“在irq上下文中获得”+“在启用irq时获得”?在irq上下文中获得,启用irqs。

未使用的互斥不能成为导致错误的部分原因。

但是内核文档和崩溃日志之间的区别是,崩溃日志中只有4位,而文档中只有6位。

是因为,出于某种原因,linux源代码树(v4.16)的reclaim_fskernel/locking/lockdep_states.h中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49788765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档