检查核心转储中是否存在自旋锁

时间:2015-01-02 08:40:02

标签: linux linux-kernel linux-device-driver

我正在尝试分析Linux内核的核心转储中的自旋锁变量。在互斥锁的情况下,如果互斥锁被锁定,则count变量的值应为0.在自旋锁的情况下,spinlock_t my_lock具有类似

的字段
(struct raw_spinlock) rlock
      (arch_spinlock_t) raw_lock
            (unsigned int) lock 
      (unsigned int) break_lock

整数变量的值为0.如果锁定,那么这些值是否会有不同的值?有没有其他方法来检查旋转锁定变量的转储,看看它是否被采取?价值架构是否依赖?

3 个答案:

答案 0 :(得分:0)

尝试使用spin_is_locked()

(在spinlock.h中定义)

答案 1 :(得分:0)

在调用die()之后,我收集了一个核心转储并检查了die_lock spinlock变量的状态,当die()发生时,它被锁定在traps.c中。在锁定的情况下,lock的值为1。这给了一些清晰度。

但是也存在大整数值的锁。仍在努力解决这个问题。

答案 2 :(得分:0)

如果采取锁定,它将具有不同的值。您可以使用代码中的spin_is_locked()进行检查。 但是在分析dump时,请检查spin_lock()的实现方式。它将提供有关如何检查和获取锁的信息。当然,spin_lock()是依赖于体系结构的代码,但逻辑仍然相同。

相关问题