diff options
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/locking/mutex-debug.c | 6 | ||||
| -rw-r--r-- | kernel/locking/mutex.c | 7 |
2 files changed, 13 insertions, 0 deletions
diff --git a/kernel/locking/mutex-debug.c b/kernel/locking/mutex-debug.c index faf6f5b53e77..e1191c996c59 100644 --- a/kernel/locking/mutex-debug.c +++ b/kernel/locking/mutex-debug.c | |||
| @@ -83,6 +83,12 @@ void debug_mutex_unlock(struct mutex *lock) | |||
| 83 | 83 | ||
| 84 | DEBUG_LOCKS_WARN_ON(!lock->wait_list.prev && !lock->wait_list.next); | 84 | DEBUG_LOCKS_WARN_ON(!lock->wait_list.prev && !lock->wait_list.next); |
| 85 | mutex_clear_owner(lock); | 85 | mutex_clear_owner(lock); |
| 86 | |||
| 87 | /* | ||
| 88 | * __mutex_slowpath_needs_to_unlock() is explicitly 0 for debug | ||
| 89 | * mutexes so that we can do it here after we've verified state. | ||
| 90 | */ | ||
| 91 | atomic_set(&lock->count, 1); | ||
| 86 | } | 92 | } |
| 87 | 93 | ||
| 88 | void debug_mutex_init(struct mutex *lock, const char *name, | 94 | void debug_mutex_init(struct mutex *lock, const char *name, |
diff --git a/kernel/locking/mutex.c b/kernel/locking/mutex.c index 02c61a9c8906..14fe72cc8ce7 100644 --- a/kernel/locking/mutex.c +++ b/kernel/locking/mutex.c | |||
| @@ -34,6 +34,13 @@ | |||
| 34 | #ifdef CONFIG_DEBUG_MUTEXES | 34 | #ifdef CONFIG_DEBUG_MUTEXES |
| 35 | # include "mutex-debug.h" | 35 | # include "mutex-debug.h" |
| 36 | # include <asm-generic/mutex-null.h> | 36 | # include <asm-generic/mutex-null.h> |
| 37 | /* | ||
| 38 | * Must be 0 for the debug case so we do not do the unlock outside of the | ||
| 39 | * wait_lock region. debug_mutex_unlock() will do the actual unlock in this | ||
| 40 | * case. | ||
| 41 | */ | ||
| 42 | # undef __mutex_slowpath_needs_to_unlock | ||
| 43 | # define __mutex_slowpath_needs_to_unlock() 0 | ||
| 37 | #else | 44 | #else |
| 38 | # include "mutex.h" | 45 | # include "mutex.h" |
| 39 | # include <asm/mutex.h> | 46 | # include <asm/mutex.h> |
