我试图分析Linux内核内核转储中的自旋锁变量。在互斥锁的情况下,如果互斥锁住了,计数变量的值应该是0。如果是自旋锁,spinlock_t my_lock的字段如下
(struct raw_spinlock) rlock
(arch_spinlock_t) raw_lock
(unsigned int) lock
(unsigned int) break_lock整数变量的值为0。如果锁被拿走了,会不会有不同的值?是否有其他方法检查自旋锁变量的转储,以确定它是否已被接受?价值体系结构是依赖的吗?
发布于 2015-01-09 05:19:26
在调用die()之后,我收集了一个核心转储,并检查了die_lock自旋锁变量的状态,该变量在die()发生时被锁在traps.c中。锁定情况下锁的值为1。这说明了一些问题。
但是也有带有大整数值的锁。还在努力弄清楚。
发布于 2015-01-02 16:14:53
尝试使用spin_is_locked()
(以Spinlock.h定义)
发布于 2015-01-09 09:28:33
如果使用锁,则它将具有不同的值。您可以从代码中使用spin_is_locked()进行检查。但是,在分析转储时,请检查spin_lock()是如何实现的。它将提供有关如何检查和获取锁的信息。当然,spin_lock()是依赖于体系结构的代码,但是逻辑是相同的。
https://stackoverflow.com/questions/27739481
复制相似问题