gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:17:00 25 4
gpt4 key购买 nike

我发现当内核检测到任务挂起时,内核崩溃中有点号和加号。

Showing all locks held in the system: 2 locks held by khungtaskd/737: #0: (rcu_read_lock){....}, at: [<00000000eaa2e968>] check_hung_uninterruptible_tasks kernel/hung_task.c:175 [inline] #0: (rcu_read_lock){....}, at: [<00000000eaa2e968>] watchdog+0x1c5/0xd60 kernel/hung_task.c:249 #1: (tasklist_lock){.+.+}, at: [<000000005ed461f9>] debug_show_all_locks+0xd3/0x400 kernel/locking/lockdep.c:4464

锁名称后括号中的点号和加号是什么?

最佳答案

self 回答:

the linux document中有答案.

State

The validator tracks lock-class usage history into 4n + 1 separate state bits:

  • 'ever held in STATE context'
  • 'ever held as readlock in STATE context'
  • 'ever held with STATE enabled'
  • 'ever held as readlock with STATE enabled'

Where STATE can be either one of (kernel/locking/lockdep_states.h) - hardirq - softirq - reclaim_fs

  • 'ever used' [ == !unused ]

When locking rules are violated, these state bits are presented in the locking error messages, inside curlies. A contrived example:

modprobe/2287 is trying to acquire lock:
(&sio_locks[i].lock){-.-...}, at: [] mutex_lock+0x21/0x24

but task is already holding lock:
(&sio_locks[i].lock){-.-...}, at: [] mutex_lock+0x21/0x24

位位置表示每个状态的STATE,STATE-read 上面列出的,每个显示的字符表示:

'.'在禁用 irq 且不在 irq 上下文“-”中时获取 在 irq 上下文中获取 '+' 在启用 irq 的情况下获取 '?' 在启用 irq 的 irq 上下文中获取。

未使用的互斥量不能是错误原因的一部分。

但是内核文件和崩溃日志的区别在于崩溃日志只有四位,而文件中有六位。
是因为,出于某种原因,reclaim_fs 在 linux 源代码树 (v4.16) 的 kernel/locking/lockdep_states.h 中。

关于linux - 是什么 。 (点)和 +(加号)在内核崩溃(任务挂起)中的锁名称之后?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49788765/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com