All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jason Low <jason.low2@hp.com>
To: mingo@kernel.org, peterz@infradead.org, tglx@linutronix.de,
	akpm@linux-foundation.org
Cc: linux-kernel@vger.kernel.org, tim.c.chen@linux.intel.com,
	paulmck@linux.vnet.ibm.com, rostedt@goodmis.org,
	davidlohr@hp.com, Waiman.Long@hp.com, scott.norton@hp.com,
	aswin@hp.com, jason.low2@hp.com
Subject: [PATCH v2 3/4] mutex: Try to acquire mutex only if it is unlocked
Date: Wed, 11 Jun 2014 11:37:22 -0700	[thread overview]
Message-ID: <1402511843-4721-4-git-send-email-jason.low2@hp.com> (raw)
In-Reply-To: <1402511843-4721-1-git-send-email-jason.low2@hp.com>

Upon entering the slowpath in __mutex_lock_common(), we try once more to
acquire the mutex. We only try to acquire if (lock->count >= 0). However,
what we actually want here is to try to acquire if the mutex is unlocked
(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 the lock count is non-negative.
This helps further reduce unnecessary atomic xchg() operations.

Furthermore, this patch uses !mutex_is_locked(lock) to do the initial
checks for if the lock is free rather than directly calling atomic_read()
on the lock->count, in order to improve readability.

Signed-off-by: Jason Low <jason.low2@hp.com>
---
 kernel/locking/mutex.c |    7 ++++---
 1 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/kernel/locking/mutex.c b/kernel/locking/mutex.c
index 4bd9546..e4d997b 100644
--- a/kernel/locking/mutex.c
+++ b/kernel/locking/mutex.c
@@ -432,7 +432,8 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass,
 		if (owner && !mutex_spin_on_owner(lock, owner))
 			break;
 
-		if ((atomic_read(&lock->count) == 1) &&
+		/* Try to acquire the mutex if it is unlocked. */
+		if (!mutex_is_locked(lock) &&
 		    (atomic_cmpxchg(&lock->count, 1, 0) == 1)) {
 			lock_acquired(&lock->dep_map, ip);
 			if (use_ww_ctx) {
@@ -479,9 +480,9 @@ slowpath:
 
 	/*
 	 * Once more, try to acquire the lock. Only try-lock the mutex if
-	 * lock->count >= 0 to reduce unnecessary xchg operations.
+	 * it is unlocked to reduce unnecessary xchg() operations.
 	 */
-	if (atomic_read(&lock->count) >= 0 && (atomic_xchg(&lock->count, 0) == 1))
+	if (!mutex_is_locked(lock) && (atomic_xchg(&lock->count, 0) == 1))
 		goto skip_wait;
 
 	debug_mutex_lock_common(lock, &waiter);
-- 
1.7.1


  parent reply	other threads:[~2014-06-11 18:37 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-06-11 18:37 [PATCH v2 0/4] mutex: Modifications to mutex Jason Low
2014-06-11 18:37 ` [PATCH v2 1/4] mutex: Correct documentation on mutex optimistic spinning Jason Low
2014-07-05 10:47   ` [tip:locking/core] locking/mutexes: " tip-bot for Jason Low
2014-06-11 18:37 ` [PATCH v2 2/4] mutex: Delete the MUTEX_SHOW_NO_WAITER macro Jason Low
2014-06-12  1:27   ` Long, Wai Man
2014-07-05 10:47   ` [tip:locking/core] locking/mutexes: " tip-bot for Jason Low
2014-06-11 18:37 ` Jason Low [this message]
2014-06-12  1:28   ` [PATCH v2 3/4] mutex: Try to acquire mutex only if it is unlocked Long, Wai Man
2014-06-12 19:37   ` Davidlohr Bueso
2014-06-12 19:54     ` Jason Low
2014-07-05 10:47   ` [tip:locking/core] locking/mutexes: " tip-bot for Jason Low
2014-06-11 18:37 ` [PATCH v2 4/4] mutex: Optimize mutex trylock slowpath Jason Low
2014-06-12 18:25   ` Davidlohr Bueso
2014-07-05 10:48   ` [tip:locking/core] locking/mutexes: " tip-bot for Jason Low

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1402511843-4721-4-git-send-email-jason.low2@hp.com \
    --to=jason.low2@hp.com \
    --cc=Waiman.Long@hp.com \
    --cc=akpm@linux-foundation.org \
    --cc=aswin@hp.com \
    --cc=davidlohr@hp.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=paulmck@linux.vnet.ibm.com \
    --cc=peterz@infradead.org \
    --cc=rostedt@goodmis.org \
    --cc=scott.norton@hp.com \
    --cc=tglx@linutronix.de \
    --cc=tim.c.chen@linux.intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.