* [PATCH peterz-queue:locking/core 1/2] locking/rwsem: Fix building with opt spinning and new osq_lock header
@ 2014-07-11 21:00 Davidlohr Bueso
2014-07-11 21:00 ` [PATCH peterz-queue:locking/core 2/2] locking/rwsem: Add CONFIG_RWSEM_SPIN_ON_OWNER Davidlohr Bueso
2014-07-11 21:13 ` [PATCH peterz-queue:locking/core 1/2] locking/rwsem: Fix building with opt spinning and new osq_lock header Jason Low
0 siblings, 2 replies; 4+ messages in thread
From: Davidlohr Bueso @ 2014-07-11 21:00 UTC (permalink / raw)
To: a.p.zijlstra; +Cc: mingo, jason.low2, davidlohr, aswin, linux-kernel
Commit 'rwsem: Reduce the size of struct rw_semaphore' broke all
DECLARE_RWSEM users, ie:
init/init_task.c:14:44: error: ‘OSQ_UNLOCKED_VA’ undeclared here (not in a function)
Signed-off-by: Davidlohr Bueso <davidlohr@hp.com>
---
include/linux/rwsem.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/include/linux/rwsem.h b/include/linux/rwsem.h
index 0eff99c..5d40884 100644
--- a/include/linux/rwsem.h
+++ b/include/linux/rwsem.h
@@ -64,7 +64,7 @@ static inline int rwsem_is_locked(struct rw_semaphore *sem)
#endif
#if defined(CONFIG_SMP) && !defined(CONFIG_RWSEM_GENERIC_SPINLOCK)
-#define __RWSEM_OPT_INIT(lockname) , .owner = NULL, .osq = { ATOMIC_INIT(OQS_UNLOCKED_VAL) }
+#define __RWSEM_OPT_INIT(lockname) , .owner = NULL, .osq = { ATOMIC_INIT(OSQ_UNLOCKED_VAL) }
#else
#define __RWSEM_OPT_INIT(lockname)
#endif
--
1.8.1.4
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH peterz-queue:locking/core 2/2] locking/rwsem: Add CONFIG_RWSEM_SPIN_ON_OWNER
2014-07-11 21:00 [PATCH peterz-queue:locking/core 1/2] locking/rwsem: Fix building with opt spinning and new osq_lock header Davidlohr Bueso
@ 2014-07-11 21:00 ` Davidlohr Bueso
2014-07-16 19:24 ` [tip:locking/urgent] " tip-bot for Davidlohr Bueso
2014-07-11 21:13 ` [PATCH peterz-queue:locking/core 1/2] locking/rwsem: Fix building with opt spinning and new osq_lock header Jason Low
1 sibling, 1 reply; 4+ messages in thread
From: Davidlohr Bueso @ 2014-07-11 21:00 UTC (permalink / raw)
To: a.p.zijlstra; +Cc: mingo, jason.low2, davidlohr, aswin, linux-kernel
Just like with mutexes (CONFIG_MUTEX_SPIN_ON_OWNER),
encapsulate the dependencies for rwsem optimistic spinning.
No logical changes here as it continues to depend on both
SMP and the XADD algorithm variant.
Acked-by: Jason Low <jason.low2@hp.com>
Signed-off-by: Davidlohr Bueso <davidlohr@hp.com>
---
Based on previous discussion (https://lkml.org/lkml/2014/6/6/461):
rebased & included ifdefs around #include <linux/osq_lock.h>
include/linux/rwsem.h | 6 ++++--
kernel/Kconfig.locks | 4 ++++
kernel/locking/rwsem-xadd.c | 4 ++--
kernel/locking/rwsem.c | 2 +-
4 files changed, 11 insertions(+), 5 deletions(-)
diff --git a/include/linux/rwsem.h b/include/linux/rwsem.h
index 5d40884..03dbec7 100644
--- a/include/linux/rwsem.h
+++ b/include/linux/rwsem.h
@@ -14,7 +14,9 @@
#include <linux/list.h>
#include <linux/spinlock.h>
#include <linux/atomic.h>
+#ifdef CONFIG_RWSEM_SPIN_ON_OWNER
#include <linux/osq_lock.h>
+#endif
struct rw_semaphore;
@@ -26,7 +28,7 @@ struct rw_semaphore {
long count;
struct list_head wait_list;
raw_spinlock_t wait_lock;
-#ifdef CONFIG_SMP
+#ifdef CONFIG_RWSEM_SPIN_ON_OWNER
struct optimistic_spin_queue osq; /* spinner MCS lock */
/*
* Write owner. Used as a speculative check to see
@@ -63,7 +65,7 @@ static inline int rwsem_is_locked(struct rw_semaphore *sem)
# define __RWSEM_DEP_MAP_INIT(lockname)
#endif
-#if defined(CONFIG_SMP) && !defined(CONFIG_RWSEM_GENERIC_SPINLOCK)
+#ifdef CONFIG_RWSEM_SPIN_ON_OWNER
#define __RWSEM_OPT_INIT(lockname) , .owner = NULL, .osq = { ATOMIC_INIT(OSQ_UNLOCKED_VAL) }
#else
#define __RWSEM_OPT_INIT(lockname)
diff --git a/kernel/Kconfig.locks b/kernel/Kconfig.locks
index 35536d9..e4c3162 100644
--- a/kernel/Kconfig.locks
+++ b/kernel/Kconfig.locks
@@ -224,6 +224,10 @@ config MUTEX_SPIN_ON_OWNER
def_bool y
depends on SMP && !DEBUG_MUTEXES
+config RWSEM_SPIN_ON_OWNER
+ def_bool y
+ depends on SMP && RWSEM_XCHGADD_ALGORITHM
+
config ARCH_USE_QUEUE_RWLOCK
bool
diff --git a/kernel/locking/rwsem-xadd.c b/kernel/locking/rwsem-xadd.c
index a673bba..b3d0e9f 100644
--- a/kernel/locking/rwsem-xadd.c
+++ b/kernel/locking/rwsem-xadd.c
@@ -82,7 +82,7 @@ void __init_rwsem(struct rw_semaphore *sem, const char *name,
sem->count = RWSEM_UNLOCKED_VALUE;
raw_spin_lock_init(&sem->wait_lock);
INIT_LIST_HEAD(&sem->wait_list);
-#ifdef CONFIG_SMP
+#ifdef CONFIG_RWSEM_SPIN_ON_OWNER
sem->owner = NULL;
atomic_set(&sem->osq.tail, OSQ_UNLOCKED_VAL);
#endif
@@ -262,7 +262,7 @@ static inline bool rwsem_try_write_lock(long count, struct rw_semaphore *sem)
return false;
}
-#ifdef CONFIG_SMP
+#ifdef CONFIG_RWSEM_SPIN_ON_OWNER
/*
* Try to acquire write lock before the writer has been put on wait queue.
*/
diff --git a/kernel/locking/rwsem.c b/kernel/locking/rwsem.c
index 42f806d..e2d3bc7 100644
--- a/kernel/locking/rwsem.c
+++ b/kernel/locking/rwsem.c
@@ -12,7 +12,7 @@
#include <linux/atomic.h>
-#if defined(CONFIG_SMP) && defined(CONFIG_RWSEM_XCHGADD_ALGORITHM)
+#ifdef CONFIG_RWSEM_SPIN_ON_OWNER
static inline void rwsem_set_owner(struct rw_semaphore *sem)
{
sem->owner = current;
--
1.8.1.4
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH peterz-queue:locking/core 1/2] locking/rwsem: Fix building with opt spinning and new osq_lock header
2014-07-11 21:00 [PATCH peterz-queue:locking/core 1/2] locking/rwsem: Fix building with opt spinning and new osq_lock header Davidlohr Bueso
2014-07-11 21:00 ` [PATCH peterz-queue:locking/core 2/2] locking/rwsem: Add CONFIG_RWSEM_SPIN_ON_OWNER Davidlohr Bueso
@ 2014-07-11 21:13 ` Jason Low
1 sibling, 0 replies; 4+ messages in thread
From: Jason Low @ 2014-07-11 21:13 UTC (permalink / raw)
To: Davidlohr Bueso; +Cc: a.p.zijlstra, mingo, aswin, linux-kernel
On Fri, 2014-07-11 at 14:00 -0700, Davidlohr Bueso wrote:
> Commit 'rwsem: Reduce the size of struct rw_semaphore' broke all
> DECLARE_RWSEM users, ie:
>
> init/init_task.c:14:44: error: ‘OSQ_UNLOCKED_VA’ undeclared here (not in a function)
>
> Signed-off-by: Davidlohr Bueso <davidlohr@hp.com>
> ---
> include/linux/rwsem.h | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/include/linux/rwsem.h b/include/linux/rwsem.h
> index 0eff99c..5d40884 100644
> --- a/include/linux/rwsem.h
> +++ b/include/linux/rwsem.h
> @@ -64,7 +64,7 @@ static inline int rwsem_is_locked(struct rw_semaphore *sem)
> #endif
>
> #if defined(CONFIG_SMP) && !defined(CONFIG_RWSEM_GENERIC_SPINLOCK)
> -#define __RWSEM_OPT_INIT(lockname) , .owner = NULL, .osq = { ATOMIC_INIT(OQS_UNLOCKED_VAL) }
> +#define __RWSEM_OPT_INIT(lockname) , .owner = NULL, .osq = { ATOMIC_INIT(OSQ_UNLOCKED_VAL) }
Hi David, I'll be sending out a v2 patchset which address Steven's
feedback (which includes using a macro instead of directly initializing
the osq field).
Thanks!
^ permalink raw reply [flat|nested] 4+ messages in thread
* [tip:locking/urgent] locking/rwsem: Add CONFIG_RWSEM_SPIN_ON_OWNER
2014-07-11 21:00 ` [PATCH peterz-queue:locking/core 2/2] locking/rwsem: Add CONFIG_RWSEM_SPIN_ON_OWNER Davidlohr Bueso
@ 2014-07-16 19:24 ` tip-bot for Davidlohr Bueso
0 siblings, 0 replies; 4+ messages in thread
From: tip-bot for Davidlohr Bueso @ 2014-07-16 19:24 UTC (permalink / raw)
To: linux-tip-commits
Cc: linux-kernel, hpa, mingo, torvalds, peterz, jason.low2, clm,
Waiman.Long, jbacik, tglx, davidlohr
Commit-ID: 5db6c6fefb1ca0e81e3bd6dd8998bf51c453d823
Gitweb: http://git.kernel.org/tip/5db6c6fefb1ca0e81e3bd6dd8998bf51c453d823
Author: Davidlohr Bueso <davidlohr@hp.com>
AuthorDate: Fri, 11 Jul 2014 14:00:06 -0700
Committer: Ingo Molnar <mingo@kernel.org>
CommitDate: Wed, 16 Jul 2014 14:57:13 +0200
locking/rwsem: Add CONFIG_RWSEM_SPIN_ON_OWNER
Just like with mutexes (CONFIG_MUTEX_SPIN_ON_OWNER),
encapsulate the dependencies for rwsem optimistic spinning.
No logical changes here as it continues to depend on both
SMP and the XADD algorithm variant.
Signed-off-by: Davidlohr Bueso <davidlohr@hp.com>
Acked-by: Jason Low <jason.low2@hp.com>
[ Also make it depend on ARCH_SUPPORTS_ATOMIC_RMW. ]
Signed-off-by: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/1405112406-13052-2-git-send-email-davidlohr@hp.com
Cc: aswin@hp.com
Cc: Chris Mason <clm@fb.com>
Cc: Davidlohr Bueso <davidlohr@hp.com>
Cc: Josef Bacik <jbacik@fusionio.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Waiman Long <Waiman.Long@hp.com>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
include/linux/rwsem.h | 6 ++++--
kernel/Kconfig.locks | 4 ++++
kernel/locking/rwsem-xadd.c | 4 ++--
kernel/locking/rwsem.c | 2 +-
4 files changed, 11 insertions(+), 5 deletions(-)
diff --git a/include/linux/rwsem.h b/include/linux/rwsem.h
index 716807f..035d3c5 100644
--- a/include/linux/rwsem.h
+++ b/include/linux/rwsem.h
@@ -14,7 +14,9 @@
#include <linux/list.h>
#include <linux/spinlock.h>
#include <linux/atomic.h>
+#ifdef CONFIG_RWSEM_SPIN_ON_OWNER
#include <linux/osq_lock.h>
+#endif
struct rw_semaphore;
@@ -26,7 +28,7 @@ struct rw_semaphore {
long count;
struct list_head wait_list;
raw_spinlock_t wait_lock;
-#ifdef CONFIG_SMP
+#ifdef CONFIG_RWSEM_SPIN_ON_OWNER
struct optimistic_spin_queue osq; /* spinner MCS lock */
/*
* Write owner. Used as a speculative check to see
@@ -63,7 +65,7 @@ static inline int rwsem_is_locked(struct rw_semaphore *sem)
# define __RWSEM_DEP_MAP_INIT(lockname)
#endif
-#if defined(CONFIG_SMP) && !defined(CONFIG_RWSEM_GENERIC_SPINLOCK)
+#ifdef CONFIG_RWSEM_SPIN_ON_OWNER
#define __RWSEM_OPT_INIT(lockname) , .osq = OSQ_LOCK_UNLOCKED, .owner = NULL
#else
#define __RWSEM_OPT_INIT(lockname)
diff --git a/kernel/Kconfig.locks b/kernel/Kconfig.locks
index 8190794..76768ee 100644
--- a/kernel/Kconfig.locks
+++ b/kernel/Kconfig.locks
@@ -227,6 +227,10 @@ config MUTEX_SPIN_ON_OWNER
def_bool y
depends on SMP && !DEBUG_MUTEXES && ARCH_SUPPORTS_ATOMIC_RMW
+config RWSEM_SPIN_ON_OWNER
+ def_bool y
+ depends on SMP && RWSEM_XCHGADD_ALGORITHM && ARCH_SUPPORTS_ATOMIC_RMW
+
config ARCH_USE_QUEUE_RWLOCK
bool
diff --git a/kernel/locking/rwsem-xadd.c b/kernel/locking/rwsem-xadd.c
index 7190592..a2391ac 100644
--- a/kernel/locking/rwsem-xadd.c
+++ b/kernel/locking/rwsem-xadd.c
@@ -82,7 +82,7 @@ void __init_rwsem(struct rw_semaphore *sem, const char *name,
sem->count = RWSEM_UNLOCKED_VALUE;
raw_spin_lock_init(&sem->wait_lock);
INIT_LIST_HEAD(&sem->wait_list);
-#ifdef CONFIG_SMP
+#ifdef CONFIG_RWSEM_SPIN_ON_OWNER
sem->owner = NULL;
osq_lock_init(&sem->osq);
#endif
@@ -262,7 +262,7 @@ static inline bool rwsem_try_write_lock(long count, struct rw_semaphore *sem)
return false;
}
-#ifdef CONFIG_SMP
+#ifdef CONFIG_RWSEM_SPIN_ON_OWNER
/*
* Try to acquire write lock before the writer has been put on wait queue.
*/
diff --git a/kernel/locking/rwsem.c b/kernel/locking/rwsem.c
index 42f806d..e2d3bc7 100644
--- a/kernel/locking/rwsem.c
+++ b/kernel/locking/rwsem.c
@@ -12,7 +12,7 @@
#include <linux/atomic.h>
-#if defined(CONFIG_SMP) && defined(CONFIG_RWSEM_XCHGADD_ALGORITHM)
+#ifdef CONFIG_RWSEM_SPIN_ON_OWNER
static inline void rwsem_set_owner(struct rw_semaphore *sem)
{
sem->owner = current;
^ permalink raw reply related [flat|nested] 4+ messages in thread
end of thread, other threads:[~2014-07-16 19:25 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-07-11 21:00 [PATCH peterz-queue:locking/core 1/2] locking/rwsem: Fix building with opt spinning and new osq_lock header Davidlohr Bueso
2014-07-11 21:00 ` [PATCH peterz-queue:locking/core 2/2] locking/rwsem: Add CONFIG_RWSEM_SPIN_ON_OWNER Davidlohr Bueso
2014-07-16 19:24 ` [tip:locking/urgent] " tip-bot for Davidlohr Bueso
2014-07-11 21:13 ` [PATCH peterz-queue:locking/core 1/2] locking/rwsem: Fix building with opt spinning and new osq_lock header 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.