include/linux/mutex.h中声明了函数:
144 #ifdef CONFIG_DEBUG_LOCK_ALLOC
145 extern void mutex_lock_nested(struct mutex *lock, unsigned int subclass);
...
152 #define mutex_lock(lock) mutex_lock_nested(lock, 0)
...
162 #else
163 extern void mutex_lock(struct mutex *lock);
...
171 #endif
开启CONFIG_DEBUG_LOCK_ALLOC
编译选项时,mutex_lock
被define成了mutex_lock_nested
。
kernel/mutex.c中分别实现了这两个函数: