在核心转储中检查自旋锁是否被持有

Check if a spinlock was held, in a core dump

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

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

整数变量的值为0。如果锁被占用,这些变量中的值会不同吗?有没有其他方法可以检查自旋锁变量的转储以查看它是否被占用?价值架构是否依赖?

尝试使用spin_is_locked()

(在 spinlock.h 中定义)

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

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

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