On Wed, 2014-06-04 at 21:43 +0200, Peter Zijlstra wrote:
On Wed, Jun 04, 2014 at 12:08:29PM -0700, Jason Low wrote:Okay, I can make them inline functions. I mainly added the macro to keep
Upon entering the slowpath in __mutex_lock_common(), we try once moreSo I recently saw that MUTEX_SHOW_NO_WAITER thing and cried a little;
to acquire the mutex. We only try to acquire it if MUTEX_SHOW_NO_WAITER
(lock->count>= 0) is true in order to avoid using the atomic xchg()
operation whenever it is not necessary. However, we really only need
to try to acquire if the mutex is free (lock->count == 1).
This patch changes it so that we only try-acquire the mutex upon
entering the slowpath if it is unlocked, rather than if there are
no waiters. This helps further reduce unncessary atomic xchg()
operations. Furthermore, this patch introduces and uses a new
MUTEX_IS_UNLOCKED() macro to improve readbability.
Signed-off-by: Jason Low<jason.low2@xxxxxx>
---
kernel/locking/mutex.c | 10 ++++++----
1 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/kernel/locking/mutex.c b/kernel/locking/mutex.c
index bc73d33..0925968 100644
--- a/kernel/locking/mutex.c
+++ b/kernel/locking/mutex.c
@@ -48,9 +48,10 @@
/*
* A negative mutex count indicates that waiters are sleeping waiting for the
- * mutex.
+ * mutex, and a count of one indicates the mutex is unlocked.
*/
#define MUTEX_SHOW_NO_WAITER(mutex) (atomic_read(&(mutex)->count)>= 0)
+#define MUTEX_IS_UNLOCKED(mutex) (atomic_read(&(mutex)->count) == 1)
and now you're adding more of that same nonsense.
Please make them inline functions, also can we rename the SHOW_NO_WAITER
thing, because its not at all clear to me wtf it does; should it be
called: mutex_no_waiters() or somesuch?
it consistent with the MUTEX_SHOW_NO_WAITER() check, but we can surely
make this more clear. mutex_no_waiters() sounds fine, or perhaps
something like mutex_has_no_waiters()?