* [tip:locking/core] x86,locking: Enable qrwlock
@ 2014-05-19 13:12 tip-bot for Waiman Long
2014-06-11 8:14 ` [tip:locking/core] x86, locking/rwlocks: Enable qrwlocks on x86 Paul Bolle
0 siblings, 1 reply; 5+ messages in thread
From: tip-bot for Waiman Long @ 2014-05-19 13:12 UTC (permalink / raw)
To: linux-tip-commits
Cc: linux-kernel, hpa, mingo, torvalds, peterz, paulmck, Waiman.Long, tglx
Commit-ID: 19a3e44df0600750c69d6fdffe7cb26eb3c2cfd5
Gitweb: http://git.kernel.org/tip/19a3e44df0600750c69d6fdffe7cb26eb3c2cfd5
Author: Waiman Long <Waiman.Long@hp.com>
AuthorDate: Mon, 3 Feb 2014 13:18:57 +0100
Committer: Thomas Gleixner <tglx@linutronix.de>
CommitDate: Mon, 19 May 2014 22:06:01 +0900
x86,locking: Enable qrwlock
Make x86 use the fair rwlock_t.
Implement the custom queue_write_unlock() for best performance.
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: "Paul E.McKenney" <paulmck@linux.vnet.ibm.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Waiman Long <Waiman.Long@hp.com>
[peterz: near complete rewrite]
Signed-off-by: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/n/tip-r1xuzmdysvuhl3h86n5fbxi7@git.kernel.org
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/x86/Kconfig | 1 +
arch/x86/include/asm/paravirt_types.h | 7 +------
arch/x86/include/asm/qrwlock.h | 17 +++++++++++++++++
arch/x86/include/asm/spinlock.h | 4 ++++
arch/x86/include/asm/spinlock_types.h | 4 ++++
5 files changed, 27 insertions(+), 6 deletions(-)
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index 25d2c6f..bf7626f 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -121,6 +121,7 @@ config X86
select MODULES_USE_ELF_RELA if X86_64
select CLONE_BACKWARDS if X86_32
select ARCH_USE_BUILTIN_BSWAP
+ select ARCH_USE_QUEUE_RWLOCK
select OLD_SIGSUSPEND3 if X86_32 || IA32_EMULATION
select OLD_SIGACTION if X86_32
select COMPAT_OLD_SIGACTION if IA32_EMULATION
diff --git a/arch/x86/include/asm/paravirt_types.h b/arch/x86/include/asm/paravirt_types.h
index 7549b8b..3d9c6be 100644
--- a/arch/x86/include/asm/paravirt_types.h
+++ b/arch/x86/include/asm/paravirt_types.h
@@ -326,12 +326,7 @@ struct pv_mmu_ops {
phys_addr_t phys, pgprot_t flags);
};
-struct arch_spinlock;
-#ifdef CONFIG_SMP
-#include <asm/spinlock_types.h>
-#else
-typedef u16 __ticket_t;
-#endif
+#include <linux/spinlock_types.h>
struct pv_lock_ops {
struct paravirt_callee_save lock_spinning;
diff --git a/arch/x86/include/asm/qrwlock.h b/arch/x86/include/asm/qrwlock.h
new file mode 100644
index 0000000..70f46f0
--- /dev/null
+++ b/arch/x86/include/asm/qrwlock.h
@@ -0,0 +1,17 @@
+#ifndef _ASM_X86_QRWLOCK_H
+#define _ASM_X86_QRWLOCK_H
+
+#include <asm-generic/qrwlock_types.h>
+
+#if !defined(CONFIG_X86_OOSTORE) && !defined(CONFIG_X86_PPRO_FENCE)
+#define queue_write_unlock queue_write_unlock
+static inline void queue_write_unlock(struct qrwlock *lock)
+{
+ barrier();
+ ACCESS_ONCE(*(u8 *)&lock->cnts) = 0;
+}
+#endif
+
+#include <asm-generic/qrwlock.h>
+
+#endif /* _ASM_X86_QRWLOCK_H */
diff --git a/arch/x86/include/asm/spinlock.h b/arch/x86/include/asm/spinlock.h
index 0f62f54..54f1c80 100644
--- a/arch/x86/include/asm/spinlock.h
+++ b/arch/x86/include/asm/spinlock.h
@@ -187,6 +187,7 @@ static inline void arch_spin_unlock_wait(arch_spinlock_t *lock)
cpu_relax();
}
+#ifndef CONFIG_QUEUE_RWLOCK
/*
* Read-write spinlocks, allowing multiple readers
* but only one writer.
@@ -269,6 +270,9 @@ static inline void arch_write_unlock(arch_rwlock_t *rw)
asm volatile(LOCK_PREFIX WRITE_LOCK_ADD(%1) "%0"
: "+m" (rw->write) : "i" (RW_LOCK_BIAS) : "memory");
}
+#else
+#include <asm/qrwlock.h>
+#endif /* CONFIG_QUEUE_RWLOCK */
#define arch_read_lock_flags(lock, flags) arch_read_lock(lock)
#define arch_write_lock_flags(lock, flags) arch_write_lock(lock)
diff --git a/arch/x86/include/asm/spinlock_types.h b/arch/x86/include/asm/spinlock_types.h
index 4f1bea1..73c4c00 100644
--- a/arch/x86/include/asm/spinlock_types.h
+++ b/arch/x86/include/asm/spinlock_types.h
@@ -34,6 +34,10 @@ typedef struct arch_spinlock {
#define __ARCH_SPIN_LOCK_UNLOCKED { { 0 } }
+#ifdef CONFIG_QUEUE_RWLOCK
+#include <asm-generic/qrwlock_types.h>
+#else
#include <asm/rwlock.h>
+#endif
#endif /* _ASM_X86_SPINLOCK_TYPES_H */
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [tip:locking/core] x86, locking/rwlocks: Enable qrwlocks on x86
2014-05-19 13:12 [tip:locking/core] x86,locking: Enable qrwlock tip-bot for Waiman Long
@ 2014-06-11 8:14 ` Paul Bolle
2014-06-11 8:59 ` Peter Zijlstra
0 siblings, 1 reply; 5+ messages in thread
From: Paul Bolle @ 2014-06-11 8:14 UTC (permalink / raw)
To: Waiman Long, Peter Zijlstra, Ingo Molnar
Cc: hpa, konrad.wilk, torvalds, davej, jeremy, paulmck,
raghavendra.kt, tglx, oleg, linux-kernel
On Fri, 2014-06-06 at 05:20 -0700, tip-bot for Waiman Long wrote:
> Make x86 use the fair rwlock_t.
>
> Implement the custom queue_write_unlock() for best performance.
This landed in linux-next yesterday (ie, next-20140610).
> Signed-off-by: Waiman Long <Waiman.Long@hp.com>
> [peterz: near complete rewrite]
> Signed-off-by: Peter Zijlstra <peterz@infradead.org>
> Cc: Dave Jones <davej@redhat.com>
> Cc: Jeremy Fitzhardinge <jeremy@goop.org>
> Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
> Cc: Linus Torvalds <torvalds@linux-foundation.org>
> Cc: Oleg Nesterov <oleg@redhat.com>
> Cc: Raghavendra K T <raghavendra.kt@linux.vnet.ibm.com>
> Cc: "Paul E.McKenney" <paulmck@linux.vnet.ibm.com>
> Cc: linux-kernel@vger.kernel.org
> Cc: x86@kernel.org
> Link: http://lkml.kernel.org/n/tip-r1xuzmdysvuhl3h86n5fbxi7@git.kernel.org
> Signed-off-by: Ingo Molnar <mingo@kernel.org>
>[...]
> diff --git a/arch/x86/include/asm/qrwlock.h b/arch/x86/include/asm/qrwlock.h
> new file mode 100644
> index 0000000..70f46f0
> --- /dev/null
> +++ b/arch/x86/include/asm/qrwlock.h
> @@ -0,0 +1,17 @@
> +#ifndef _ASM_X86_QRWLOCK_H
> +#define _ASM_X86_QRWLOCK_H
> +
> +#include <asm-generic/qrwlock_types.h>
> +
> +#if !defined(CONFIG_X86_OOSTORE) && !defined(CONFIG_X86_PPRO_FENCE)
X86_OOSTORE was removed in v3.14, see commit 09df7c4c8097 ("x86: Remove
CONFIG_X86_OOSTORE"). So the first test can be removed here, as it will
always be true. Should I submit the trivial, but probably untested,
patch to do that or do you prefer to do that yourself?
> +#define queue_write_unlock queue_write_unlock
> +static inline void queue_write_unlock(struct qrwlock *lock)
> +{
> + barrier();
> + ACCESS_ONCE(*(u8 *)&lock->cnts) = 0;
> +}
> +#endif
> +
> +#include <asm-generic/qrwlock.h>
> +
> +#endif /* _ASM_X86_QRWLOCK_H */
Thanks,
Paul Bolle
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [tip:locking/core] x86, locking/rwlocks: Enable qrwlocks on x86
2014-06-11 8:14 ` [tip:locking/core] x86, locking/rwlocks: Enable qrwlocks on x86 Paul Bolle
@ 2014-06-11 8:59 ` Peter Zijlstra
2014-06-11 9:05 ` Peter Zijlstra
0 siblings, 1 reply; 5+ messages in thread
From: Peter Zijlstra @ 2014-06-11 8:59 UTC (permalink / raw)
To: Paul Bolle
Cc: Waiman Long, Ingo Molnar, hpa, konrad.wilk, torvalds, davej,
jeremy, paulmck, raghavendra.kt, tglx, oleg, linux-kernel
[-- Attachment #1: Type: text/plain, Size: 645 bytes --]
On Wed, Jun 11, 2014 at 10:14:11AM +0200, Paul Bolle wrote:
> On Fri, 2014-06-06 at 05:20 -0700, tip-bot for Waiman Long wrote:
> > +#if !defined(CONFIG_X86_OOSTORE) && !defined(CONFIG_X86_PPRO_FENCE)
>
> X86_OOSTORE was removed in v3.14, see commit 09df7c4c8097 ("x86: Remove
> CONFIG_X86_OOSTORE"). So the first test can be removed here, as it will
> always be true. Should I submit the trivial, but probably untested,
> patch to do that or do you prefer to do that yourself?
I was completely unaware of that removal. Yeah, I'll queue patch
removing this new instance of it.
Good to have it gone though, one little crazy less.
[-- Attachment #2: Type: application/pgp-signature, Size: 836 bytes --]
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [tip:locking/core] x86, locking/rwlocks: Enable qrwlocks on x86
2014-06-11 8:59 ` Peter Zijlstra
@ 2014-06-11 9:05 ` Peter Zijlstra
2014-06-19 12:36 ` [tip:locking/core] x86, locking: Use no more OOSTORE nonsense tip-bot for Peter Zijlstra
0 siblings, 1 reply; 5+ messages in thread
From: Peter Zijlstra @ 2014-06-11 9:05 UTC (permalink / raw)
To: Paul Bolle
Cc: Waiman Long, Ingo Molnar, hpa, konrad.wilk, torvalds, davej,
jeremy, paulmck, raghavendra.kt, tglx, oleg, linux-kernel
[-- Attachment #1: Type: text/plain, Size: 2022 bytes --]
On Wed, Jun 11, 2014 at 10:59:21AM +0200, Peter Zijlstra wrote:
> On Wed, Jun 11, 2014 at 10:14:11AM +0200, Paul Bolle wrote:
> > On Fri, 2014-06-06 at 05:20 -0700, tip-bot for Waiman Long wrote:
> > > +#if !defined(CONFIG_X86_OOSTORE) && !defined(CONFIG_X86_PPRO_FENCE)
> >
> > X86_OOSTORE was removed in v3.14, see commit 09df7c4c8097 ("x86: Remove
> > CONFIG_X86_OOSTORE"). So the first test can be removed here, as it will
> > always be true. Should I submit the trivial, but probably untested,
> > patch to do that or do you prefer to do that yourself?
>
> I was completely unaware of that removal. Yeah, I'll queue patch
> removing this new instance of it.
>
> Good to have it gone though, one little crazy less.
I've queued the below. Thanks!
---
Subject: x86, locking: No more OOSTORE nonsense
From: Peter Zijlstra <peterz@infradead.org>
Date: Wed Jun 11 11:01:45 CEST 2014
Paul reported that X86_OOSTORE is dead, yay! Update a comment and
remove a newly added reference.
Reported-by: Paul Bolle <pebolle@tiscali.nl>
Signed-off-by: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/n/tip-6w40duqjdmo3sslxtvisuh7w@git.kernel.org
---
arch/x86/include/asm/barrier.h | 2 +-
arch/x86/include/asm/qrwlock.h | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
--- a/arch/x86/include/asm/barrier.h
+++ b/arch/x86/include/asm/barrier.h
@@ -99,7 +99,7 @@
#if defined(CONFIG_X86_PPRO_FENCE)
/*
- * For either of these options x86 doesn't have a strong TSO memory
+ * For this option x86 doesn't have a strong TSO memory
* model and we should fall back to full barriers.
*/
--- a/arch/x86/include/asm/qrwlock.h
+++ b/arch/x86/include/asm/qrwlock.h
@@ -3,7 +3,7 @@
#include <asm-generic/qrwlock_types.h>
-#if !defined(CONFIG_X86_OOSTORE) && !defined(CONFIG_X86_PPRO_FENCE)
+#ifndef CONFIG_X86_PPRO_FENCE
#define queue_write_unlock queue_write_unlock
static inline void queue_write_unlock(struct qrwlock *lock)
{
[-- Attachment #2: Type: application/pgp-signature, Size: 836 bytes --]
^ permalink raw reply [flat|nested] 5+ messages in thread
* [tip:locking/core] x86, locking: Use no more OOSTORE nonsense
2014-06-11 9:05 ` Peter Zijlstra
@ 2014-06-19 12:36 ` tip-bot for Peter Zijlstra
0 siblings, 0 replies; 5+ messages in thread
From: tip-bot for Peter Zijlstra @ 2014-06-19 12:36 UTC (permalink / raw)
To: linux-tip-commits
Cc: linux-kernel, hpa, mingo, will.deacon, torvalds, peterz, davej,
pebolle, paulmck, Waiman.Long, tglx
Commit-ID: 4f3aaf2c2ba35bc2cd823a240f9969ebfb3c7549
Gitweb: http://git.kernel.org/tip/4f3aaf2c2ba35bc2cd823a240f9969ebfb3c7549
Author: Peter Zijlstra <peterz@infradead.org>
AuthorDate: Wed, 11 Jun 2014 11:01:45 +0200
Committer: Ingo Molnar <mingo@kernel.org>
CommitDate: Wed, 18 Jun 2014 18:41:22 +0200
x86, locking: Use no more OOSTORE nonsense
Paul reported that X86_OOSTORE is dead, yay! Update a comment and
remove a newly added reference.
Reported-by: Paul Bolle <pebolle@tiscali.nl>
Signed-off-by: Peter Zijlstra <peterz@infradead.org>
Cc: Dave Jones <davej@redhat.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Cc: Waiman Long <Waiman.Long@hp.com>
Cc: Will Deacon <will.deacon@arm.com>
Link: http://lkml.kernel.org/r/20140611090509.GC3588@twins.programming.kicks-ass.net
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
arch/x86/include/asm/barrier.h | 2 +-
arch/x86/include/asm/qrwlock.h | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/arch/x86/include/asm/barrier.h b/arch/x86/include/asm/barrier.h
index 5c7198c..0f4460b 100644
--- a/arch/x86/include/asm/barrier.h
+++ b/arch/x86/include/asm/barrier.h
@@ -99,7 +99,7 @@
#if defined(CONFIG_X86_PPRO_FENCE)
/*
- * For either of these options x86 doesn't have a strong TSO memory
+ * For this option x86 doesn't have a strong TSO memory
* model and we should fall back to full barriers.
*/
diff --git a/arch/x86/include/asm/qrwlock.h b/arch/x86/include/asm/qrwlock.h
index 70f46f0..ae0e241 100644
--- a/arch/x86/include/asm/qrwlock.h
+++ b/arch/x86/include/asm/qrwlock.h
@@ -3,7 +3,7 @@
#include <asm-generic/qrwlock_types.h>
-#if !defined(CONFIG_X86_OOSTORE) && !defined(CONFIG_X86_PPRO_FENCE)
+#ifndef CONFIG_X86_PPRO_FENCE
#define queue_write_unlock queue_write_unlock
static inline void queue_write_unlock(struct qrwlock *lock)
{
^ permalink raw reply related [flat|nested] 5+ messages in thread
end of thread, other threads:[~2014-06-19 12:37 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-05-19 13:12 [tip:locking/core] x86,locking: Enable qrwlock tip-bot for Waiman Long
2014-06-11 8:14 ` [tip:locking/core] x86, locking/rwlocks: Enable qrwlocks on x86 Paul Bolle
2014-06-11 8:59 ` Peter Zijlstra
2014-06-11 9:05 ` Peter Zijlstra
2014-06-19 12:36 ` [tip:locking/core] x86, locking: Use no more OOSTORE nonsense tip-bot for Peter Zijlstra
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.