alpha: select CONFIG_ARCH_USE_CMPXCHG_LOCKREF.
On Alpha we have spinlocks that are 32b in size and an efficient
cmpxchg64 implementation, so we qualify to make use of cmpxchg backed
lockrefs. Select the ARCH_USE_CMPXCHG_LOCKREF Kconfig symbol and provide
a trivial implementation of arch_spin_value_unlocked to satisfy the
lockref code.
Using Linus' simple testcase from
http://article.gmane.org/gmane.linux.file-systems/77466 on a dual CPU
ES47 system I see around an 8% gain:
N Min Max Median Avg Stddev
x 30 6194580 6295654 6272504 6272514 17694.232
+ 30 6731164 6786334 6767982
6764274 13738.863
Difference at 95.0% confidence
491760 +/- 8188.17
7.83992% +/- 0.130541%
(Student's t, pooled s = 15840.5)
Signed-off-by: Matt Turner <mattst88@gmail.com>
This commit is contained in:
parent
64291f7db5
commit
8f8dcb3f7f
@ -3,6 +3,7 @@ config ALPHA
|
|||||||
default y
|
default y
|
||||||
select ARCH_MIGHT_HAVE_PC_PARPORT
|
select ARCH_MIGHT_HAVE_PC_PARPORT
|
||||||
select ARCH_MIGHT_HAVE_PC_SERIO
|
select ARCH_MIGHT_HAVE_PC_SERIO
|
||||||
|
select ARCH_USE_CMPXCHG_LOCKREF
|
||||||
select HAVE_AOUT
|
select HAVE_AOUT
|
||||||
select HAVE_IDE
|
select HAVE_IDE
|
||||||
select HAVE_OPROFILE
|
select HAVE_OPROFILE
|
||||||
|
@ -16,6 +16,11 @@
|
|||||||
#define arch_spin_unlock_wait(x) \
|
#define arch_spin_unlock_wait(x) \
|
||||||
do { cpu_relax(); } while ((x)->lock)
|
do { cpu_relax(); } while ((x)->lock)
|
||||||
|
|
||||||
|
static inline int arch_spin_value_unlocked(arch_spinlock_t lock)
|
||||||
|
{
|
||||||
|
return lock.lock == 0;
|
||||||
|
}
|
||||||
|
|
||||||
static inline void arch_spin_unlock(arch_spinlock_t * lock)
|
static inline void arch_spin_unlock(arch_spinlock_t * lock)
|
||||||
{
|
{
|
||||||
mb();
|
mb();
|
||||||
|
Loading…
Reference in New Issue
Block a user