| 1 | |
| 2 | * lib/debug_locks.c
|
| 3 | *
|
| 4 | * Generic place for common debugging facilities for various locks:
|
| 5 | * spinlocks, rwlocks, mutexes and rwsems.
|
| 6 | *
|
| 7 | * Started by Ingo Molnar:
|
| 8 | *
|
| 9 | * Copyright (C) 2006 Red Hat, Inc., Ingo Molnar <[email protected]>
|
| 10 |
|
| 11 | #include <linux/kernel.h>
|
| 12 | #include <linux/rwsem.h>
|
| 13 | #include <linux/mutex.h>
|
| 14 | #include <linux/module.h>
|
| 15 | #include <linux/spinlock.h>
|
| 16 | #include <linux/debug_locks.h>
|
| 17 |
|
| 18 | |
| 19 | * We want to turn all lock-debugging facilities on/off at once,
|
| 20 | * via a global flag. The reason is that once a single bug has been
|
| 21 | * detected and reported, there might be cascade of followup bugs
|
| 22 | * that would just muddy the log. So we report the first one and
|
| 23 | * shut up after that.
|
| 24 |
|
| 25 | int debug_locks = 1;
|
| 26 |
|
| 27 | |
| 28 | * The locking-testsuite uses <debug_locks_silent> to get a
|
| 29 | * 'silent failure': nothing is printed to the console when
|
| 30 | * a locking bug is detected.
|
| 31 |
|
| 32 | int debug_locks_silent;
|
| 33 |
|
| 34 | |
| 35 | * Generic 'turn off all lock debugging' function:
|
| 36 |
|
| 37 | int debug_locks_off(void)
|
| 38 | {
|
| 39 | if (__debug_locks_off()) {
|
| 40 | if (!debug_locks_silent) {
|
| 41 | oops_in_progress = 1;
|
| 42 | console_verbose();
|
| 43 | return 1;
|
| 44 | }
|
| 45 | }
|
| 46 | return 0;
|
| 47 | }
|