我能否在内核恐慌时打印出系统崩溃时持有哪些锁?

2 人关注

我正在写一份作业(所以我的压力很大,嘿嘿),我的项目有一个特别的地方要解读NULL。

细节是这样的:这是一个系统调用,它浏览这个进程的页面表项,并报告自调用最后一次发生后哪些被访问。请不要对问题本身提出建议,因为我不想违反任何学术诚实的规则。

然而,情况似乎是这样的,系统调用的执行被抢占了,有什么东西进去了,把我正在使用的结构搞坏了。令人气愤的是,我无法弄清楚是什么。

因此,我希望恐慌能告诉我,在恐慌发生时,有哪些自旋锁/信号锁等被持有。这将给我一个提示,说明到底发生了什么。

linux
linux-kernel
kernel
alexgolec
alexgolec
发布于 2010-11-28
2 个回答
mpe
mpe
发布于 2022-10-27
已采纳
0 人赞同

如果你在构建内核时启用了 CONFIG_LOCKDEP ,你应该能够用 alt-sysrq-D 来转储所有锁。参见 drivers/tty/sysrq.c

Tan En De
Tan En De
发布于 2022-10-27
0 人赞同

Method 1: Append kernel boot-time parameter

panic_print=0x08

Method 2: Equivalent kernel sysctl knob

echo 8 > /proc/sys/kernel/panic_print

Reference:

/proc/sys/kernel的文档

panic_print

当恐慌发生时,用于打印系统信息的Bitmask。
用户可以选择以下位的组合。

===== ============================================
第0位 打印所有任务信息
bit 1 print system memory info
bit 2 print timer info
bit 3 print locks info if CONFIG_LOCKDEP is on
第4位 打印ftrace缓冲区
第5位 打印缓冲区内的所有printk信息