All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC PATCH] rwsem: Avoid double checking before trylock for rwsem_try_write_lock()
@ 2014-06-04 19:01 Jason Low
  0 siblings, 0 replies; only message in thread
From: Jason Low @ 2014-06-04 19:01 UTC (permalink / raw)
  To: mingo, peterz, tglx, akpm
  Cc: linux-kernel, paulmck, tim.c.chen, peter, riel, hpa, walken,
	davidlohr, Waiman.Long, aswin, scott.norton, chegu_vinod,
	Jason Low

This patch applies on top of linux-next.

Commit 9b0fc9c09f1b added an extra check in rwsem_down_write_failed()
for if there are known active lockers in order to avoid doing the cmpxchg()
that would likely be unnecessary.

However, a subsequent change was made such that we check for
sem->count == RWSEM_WAITING_BIAS right before trying that cmpxchg().
Thus, the first check added in commit 9b0fc9c09f1b now adds extra
overhead. This patch deletes it.

Note: we are now changing the rwsem_try_write_lock() as the relevant
code was recently moved into that function.

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

diff --git a/kernel/locking/rwsem-xadd.c b/kernel/locking/rwsem-xadd.c
index 1f99664..6d01f2f 100644
--- a/kernel/locking/rwsem-xadd.c
+++ b/kernel/locking/rwsem-xadd.c
@@ -247,15 +247,13 @@ struct rw_semaphore __sched *rwsem_down_read_failed(struct rw_semaphore *sem)
 
 static inline bool rwsem_try_write_lock(long count, struct rw_semaphore *sem)
 {
-	if (!(count & RWSEM_ACTIVE_MASK)) {
-		/* try acquiring the write lock */
-		if (sem->count == RWSEM_WAITING_BIAS &&
-		    cmpxchg(&sem->count, RWSEM_WAITING_BIAS,
-			    RWSEM_ACTIVE_WRITE_BIAS) == RWSEM_WAITING_BIAS) {
-			if (!list_is_singular(&sem->wait_list))
-				rwsem_atomic_update(RWSEM_WAITING_BIAS, sem);
-			return true;
-		}
+	/* try acquiring the write lock */
+	if (sem->count == RWSEM_WAITING_BIAS &&
+	    cmpxchg(&sem->count, RWSEM_WAITING_BIAS,
+		    RWSEM_ACTIVE_WRITE_BIAS) == RWSEM_WAITING_BIAS) {
+		if (!list_is_singular(&sem->wait_list))
+			rwsem_atomic_update(RWSEM_WAITING_BIAS, sem);
+		return true;
 	}
 	return false;
 }
-- 
1.7.1


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2014-06-04 19:01 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-06-04 19:01 [RFC PATCH] rwsem: Avoid double checking before trylock for rwsem_try_write_lock() Jason Low

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.