forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[PATCH] lockdep: better lock debugging
Generic lock debugging: - generalized lock debugging framework. For example, a bug in one lock subsystem turns off debugging in all lock subsystems. - got rid of the caller address passing (__IP__/__IP_DECL__/etc.) from the mutex/rtmutex debugging code: it caused way too much prototype hackery, and lockdep will give the same information anyway. - ability to do silent tests - check lock freeing in vfree too. - more finegrained debugging options, to allow distributions to turn off more expensive debugging features. There's no separate 'held mutexes' list anymore - but there's a 'held locks' stack within lockdep, which unifies deadlock detection across all lock classes. (this is independent of the lockdep validation stuff - lockdep first checks whether we are holding a lock already) Here are the current debugging options: CONFIG_DEBUG_MUTEXES=y CONFIG_DEBUG_LOCK_ALLOC=y which do: config DEBUG_MUTEXES bool "Mutex debugging, basic checks" config DEBUG_LOCK_ALLOC bool "Detect incorrect freeing of live mutexes" Signed-off-by: Ingo Molnar <[email protected]> Signed-off-by: Arjan van de Ven <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
- Loading branch information
Ingo Molnar
authored and
Linus Torvalds
committed
Jul 3, 2006
1 parent
fb7e424
commit 9a11b49
Showing
25 changed files
with
265 additions
and
567 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
#ifndef __LINUX_DEBUG_LOCKING_H | ||
#define __LINUX_DEBUG_LOCKING_H | ||
|
||
extern int debug_locks; | ||
extern int debug_locks_silent; | ||
|
||
/* | ||
* Generic 'turn off all lock debugging' function: | ||
*/ | ||
extern int debug_locks_off(void); | ||
|
||
/* | ||
* In the debug case we carry the caller's instruction pointer into | ||
* other functions, but we dont want the function argument overhead | ||
* in the nondebug case - hence these macros: | ||
*/ | ||
#define _RET_IP_ (unsigned long)__builtin_return_address(0) | ||
#define _THIS_IP_ ({ __label__ __here; __here: (unsigned long)&&__here; }) | ||
|
||
#define DEBUG_LOCKS_WARN_ON(c) \ | ||
({ \ | ||
int __ret = 0; \ | ||
\ | ||
if (unlikely(c)) { \ | ||
if (debug_locks_off()) \ | ||
WARN_ON(1); \ | ||
__ret = 1; \ | ||
} \ | ||
__ret; \ | ||
}) | ||
|
||
#ifdef CONFIG_SMP | ||
# define SMP_DEBUG_LOCKS_WARN_ON(c) DEBUG_LOCKS_WARN_ON(c) | ||
#else | ||
# define SMP_DEBUG_LOCKS_WARN_ON(c) do { } while (0) | ||
#endif | ||
|
||
#ifdef CONFIG_DEBUG_LOCKING_API_SELFTESTS | ||
extern void locking_selftest(void); | ||
#else | ||
# define locking_selftest() do { } while (0) | ||
#endif | ||
|
||
#ifdef CONFIG_LOCKDEP | ||
extern void debug_show_all_locks(void); | ||
extern void debug_show_held_locks(struct task_struct *task); | ||
extern void debug_check_no_locks_freed(const void *from, unsigned long len); | ||
extern void debug_check_no_locks_held(struct task_struct *task); | ||
#else | ||
static inline void debug_show_all_locks(void) | ||
{ | ||
} | ||
|
||
static inline void debug_show_held_locks(struct task_struct *task) | ||
{ | ||
} | ||
|
||
static inline void | ||
debug_check_no_locks_freed(const void *from, unsigned long len) | ||
{ | ||
} | ||
|
||
static inline void | ||
debug_check_no_locks_held(struct task_struct *task) | ||
{ | ||
} | ||
#endif | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.