locking/spinlocks/mcs: Introduce and use init macro and function for osq locks
authorJason Low <jason.low2@hp.com>
Mon, 14 Jul 2014 17:27:50 +0000 (10:27 -0700)
committerIngo Molnar <mingo@kernel.org>
Wed, 16 Jul 2014 11:28:05 +0000 (13:28 +0200)
Currently, we initialize the osq lock by directly setting the lock's values. It
would be preferable if we use an init macro to do the initialization like we do
with other locks.

This patch introduces and uses a macro and function for initializing the osq lock.

Signed-off-by: Jason Low <jason.low2@hp.com>
Signed-off-by: Peter Zijlstra <peterz@infradead.org>
Cc: Scott Norton <scott.norton@hp.com>
Cc: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
Cc: Dave Chinner <david@fromorbit.com>
Cc: Waiman Long <waiman.long@hp.com>
Cc: Davidlohr Bueso <davidlohr@hp.com>
Cc: Rik van Riel <riel@redhat.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Tim Chen <tim.c.chen@linux.intel.com>
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: Aswin Chandramouleeswaran <aswin@hp.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Chris Mason <clm@fb.com>
Cc: Josef Bacik <jbacik@fusionio.com>
Link: http://lkml.kernel.org/r/1405358872-3732-4-git-send-email-jason.low2@hp.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
include/linux/osq_lock.h
include/linux/rwsem.h
kernel/locking/mutex.c
kernel/locking/rwsem-xadd.c

index b001682bf7cbde1f4bc4c140622c995151cb2668..90230d5811c5aab49b8755fceda1e1d5e6d326aa 100644 (file)
@@ -16,4 +16,12 @@ struct optimistic_spin_queue {
        atomic_t tail;
 };
 
+/* Init macro and function. */
+#define OSQ_LOCK_UNLOCKED { ATOMIC_INIT(OSQ_UNLOCKED_VAL) }
+
+static inline void osq_lock_init(struct optimistic_spin_queue *lock)
+{
+       atomic_set(&lock->tail, OSQ_UNLOCKED_VAL);
+}
+
 #endif
index 9fdcdd03507d183e2e92184a9a2b0632e282a1ba..25cd9aa2f3d7289a6a3ad4c87ad7407913c1939f 100644 (file)
@@ -69,7 +69,7 @@ static inline int rwsem_is_locked(struct rw_semaphore *sem)
          __RAW_SPIN_LOCK_UNLOCKED(name.wait_lock),     \
          LIST_HEAD_INIT((name).wait_list),             \
          NULL, /* owner */                             \
-         { ATOMIC_INIT(OSQ_UNLOCKED_VAL) } /* osq */   \
+         OSQ_LOCK_UNLOCKED /* osq */                   \
          __RWSEM_DEP_MAP_INIT(name) }
 #else
 #define __RWSEM_INITIALIZER(name)                      \
index d9b313906caa873fad9873cc11ed1fe83e4678f3..acca2c1a3c5e550a42cae2256e0b88b02f352faa 100644 (file)
@@ -60,7 +60,7 @@ __mutex_init(struct mutex *lock, const char *name, struct lock_class_key *key)
        INIT_LIST_HEAD(&lock->wait_list);
        mutex_clear_owner(lock);
 #ifdef CONFIG_MUTEX_SPIN_ON_OWNER
-       atomic_set(&lock->osq.tail, OSQ_UNLOCKED_VAL);
+       osq_lock_init(&lock->osq);
 #endif
 
        debug_mutex_init(lock, name, key);
index b77a6230bbf67403147922cef079b8c02d50c16b..7190592c26457d2d2ec635590ad045679095a4b1 100644 (file)
@@ -84,7 +84,7 @@ void __init_rwsem(struct rw_semaphore *sem, const char *name,
        INIT_LIST_HEAD(&sem->wait_list);
 #ifdef CONFIG_SMP
        sem->owner = NULL;
-       atomic_set(&sem->osq.tail, OSQ_UNLOCKED_VAL);
+       osq_lock_init(&sem->osq);
 #endif
 }