* [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
* [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
* 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
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.