C 如何在Linux内核中获得全局锁状态?

C 如何在Linux内核中获得全局锁状态?,c,linux,linux-kernel,locking,spinlock,C,Linux,Linux Kernel,Locking,Spinlock,我正在为Linux内核编写一些代码,我注意到当我需要启用中断以便进程能够处理信号时,中断被禁用。如果我能得到系统中当前持有的所有锁的列表就太棒了,因为我怀疑某个地方的锁已经禁用了中断。。。这是,假设是锁禁用了中断。如果没有,也很高兴知道他们是如何做到的或在哪里做到的。Linux内核是否保留了这方面的任何记录?是的,内核肯定能够跟踪当前持有的锁,但这样做成本很高,而且只用于调试目的。您应该在专门启用调试的情况下配置和编译内核,这还取决于其他配置选项 完成后,在struct task_struct中

我正在为Linux内核编写一些代码,我注意到当我需要启用中断以便进程能够处理信号时,中断被禁用。如果我能得到系统中当前持有的所有锁的列表就太棒了,因为我怀疑某个地方的锁已经禁用了中断。。。这是,假设是锁禁用了中断。如果没有,也很高兴知道他们是如何做到的或在哪里做到的。Linux内核是否保留了这方面的任何记录?

是的,内核肯定能够跟踪当前持有的锁,但这样做成本很高,而且只用于调试目的。您应该在专门启用调试的情况下配置和编译内核,这还取决于其他配置选项

完成后,在struct task_struct中,有诸如lockdep_depth number of current hold locks和hold_locks数组的struct hold_lock表示当前持有的锁,它们可能对您有用。您可以在模块运行时检查任务的这些字段,以了解发生了什么


看看kernel/locking/lockdep.c中的两个私有函数,看看如何从那些结构锁中提取有用的信息。您还可以使用来查看内核代码运行时发生的具体情况。

是的,内核确实能够跟踪当前持有的锁,但这样做的成本很高,而且只用于调试目的。您应该在专门启用调试的情况下配置和编译内核,这还取决于其他配置选项

完成后,在struct task_struct中,有诸如lockdep_depth number of current hold locks和hold_locks数组的struct hold_lock表示当前持有的锁,它们可能对您有用。您可以在模块运行时检查任务的这些字段,以了解发生了什么


看看kernel/locking/lockdep.c中的两个私有函数,看看如何从那些结构锁中提取有用的信息。您还可以使用,以便专门查看内核代码运行时发生的情况。

请您更详细地说明信号和中断!您想启用信号还是中断?我需要启用中断,以便进程能够处理已发送的信号。或者至少,因为我不想在不知道为什么会禁用中断的情况下启用中断,所以请找出是谁禁用了中断。您的代码在内核中的位置,是iptables钩子还是其他什么?您正在尝试发送或接收信号吗?请添加详细信息。顺便说一句,如果中断被禁用,这有很好的理由。这是一个常规的Linux内核过程。您所要做的就是决定是否在中断上下文中工作。请您更详细地说明信号和中断!您想启用信号还是中断?我需要启用中断,以便进程能够处理已发送的信号。或者至少,因为我不想在不知道为什么会禁用中断的情况下启用中断,所以请找出是谁禁用了中断。您的代码在内核中的位置,是iptables钩子还是其他什么?您正在尝试发送或接收信号吗?请添加详细信息。顺便说一句,如果中断被禁用,这有很好的理由。这是一个常规的Linux内核过程。您所要做的就是决定是否在中断上下文中工作。