Commit a511e3f968c462a55ef58697257f5347c73d306e
Committed by
Ingo Molnar
1 parent
23b94b967f
Exists in
master
and in
7 other branches
mutex: add atomic_dec_and_mutex_lock(), fix
include/linux/mutex.h:136: warning: 'mutex_lock' declared inline after being called include/linux/mutex.h:136: warning: previous declaration of 'mutex_lock' was here uninline it. [ Impact: clean up and uninline, address compiler warning ] Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Cc: Al Viro <viro@zeniv.linux.org.uk> Cc: Christoph Hellwig <hch@lst.de> Cc: Eric Paris <eparis@redhat.com> Cc: Paul Mackerras <paulus@samba.org> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> LKML-Reference: <200904292318.n3TNIsi6028340@imap1.linux-foundation.org> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Showing 2 changed files with 25 additions and 24 deletions Side-by-side Diff
include/linux/mutex.h
... | ... | @@ -150,29 +150,7 @@ |
150 | 150 | */ |
151 | 151 | extern int mutex_trylock(struct mutex *lock); |
152 | 152 | extern void mutex_unlock(struct mutex *lock); |
153 | - | |
154 | -/** | |
155 | - * atomic_dec_and_mutex_lock - return holding mutex if we dec to 0 | |
156 | - * @cnt: the atomic which we are to dec | |
157 | - * @lock: the mutex to return holding if we dec to 0 | |
158 | - * | |
159 | - * return true and hold lock if we dec to 0, return false otherwise | |
160 | - */ | |
161 | -static inline int atomic_dec_and_mutex_lock(atomic_t *cnt, struct mutex *lock) | |
162 | -{ | |
163 | - /* dec if we can't possibly hit 0 */ | |
164 | - if (atomic_add_unless(cnt, -1, 1)) | |
165 | - return 0; | |
166 | - /* we might hit 0, so take the lock */ | |
167 | - mutex_lock(lock); | |
168 | - if (!atomic_dec_and_test(cnt)) { | |
169 | - /* when we actually did the dec, we didn't hit 0 */ | |
170 | - mutex_unlock(lock); | |
171 | - return 0; | |
172 | - } | |
173 | - /* we hit 0, and we hold the lock */ | |
174 | - return 1; | |
175 | -} | |
153 | +extern int atomic_dec_and_mutex_lock(atomic_t *cnt, struct mutex *lock); | |
176 | 154 | |
177 | 155 | #endif |
kernel/mutex.c
... | ... | @@ -471,6 +471,29 @@ |
471 | 471 | |
472 | 472 | return ret; |
473 | 473 | } |
474 | - | |
475 | 474 | EXPORT_SYMBOL(mutex_trylock); |
475 | + | |
476 | +/** | |
477 | + * atomic_dec_and_mutex_lock - return holding mutex if we dec to 0 | |
478 | + * @cnt: the atomic which we are to dec | |
479 | + * @lock: the mutex to return holding if we dec to 0 | |
480 | + * | |
481 | + * return true and hold lock if we dec to 0, return false otherwise | |
482 | + */ | |
483 | +int atomic_dec_and_mutex_lock(atomic_t *cnt, struct mutex *lock) | |
484 | +{ | |
485 | + /* dec if we can't possibly hit 0 */ | |
486 | + if (atomic_add_unless(cnt, -1, 1)) | |
487 | + return 0; | |
488 | + /* we might hit 0, so take the lock */ | |
489 | + mutex_lock(lock); | |
490 | + if (!atomic_dec_and_test(cnt)) { | |
491 | + /* when we actually did the dec, we didn't hit 0 */ | |
492 | + mutex_unlock(lock); | |
493 | + return 0; | |
494 | + } | |
495 | + /* we hit 0, and we hold the lock */ | |
496 | + return 1; | |
497 | +} | |
498 | +EXPORT_SYMBOL(atomic_dec_and_mutex_lock); |