aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm64
diff options
context:
space:
mode:
authorChristian Borntraeger <borntraeger@de.ibm.com>2014-11-24 04:53:11 -0500
committerChristian Borntraeger <borntraeger@de.ibm.com>2014-12-18 03:54:40 -0500
commitaf2e7aaed1ccf30e61af3e096ac2c7df2f2d6c2a (patch)
tree6e9e15b79431ca3f4be281e98491b86205f1fa7f /arch/arm64
parent4218091cb45f601b889cd032e39fe6878a426e70 (diff)
arm64/spinlock: Replace ACCESS_ONCE READ_ONCE
ACCESS_ONCE does not work reliably on non-scalar types. For example gcc 4.6 and 4.7 might remove the volatile tag for such accesses during the SRA (scalar replacement of aggregates) step (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58145) Change the spinlock code to replace ACCESS_ONCE with READ_ONCE. Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com> Acked-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Diffstat (limited to 'arch/arm64')
-rw-r--r--arch/arm64/include/asm/spinlock.h4
1 files changed, 2 insertions, 2 deletions
diff --git a/arch/arm64/include/asm/spinlock.h b/arch/arm64/include/asm/spinlock.h
index c45b7b1b7197..cee128732435 100644
--- a/arch/arm64/include/asm/spinlock.h
+++ b/arch/arm64/include/asm/spinlock.h
@@ -99,12 +99,12 @@ static inline int arch_spin_value_unlocked(arch_spinlock_t lock)
99 99
100static inline int arch_spin_is_locked(arch_spinlock_t *lock) 100static inline int arch_spin_is_locked(arch_spinlock_t *lock)
101{ 101{
102 return !arch_spin_value_unlocked(ACCESS_ONCE(*lock)); 102 return !arch_spin_value_unlocked(READ_ONCE(*lock));
103} 103}
104 104
105static inline int arch_spin_is_contended(arch_spinlock_t *lock) 105static inline int arch_spin_is_contended(arch_spinlock_t *lock)
106{ 106{
107 arch_spinlock_t lockval = ACCESS_ONCE(*lock); 107 arch_spinlock_t lockval = READ_ONCE(*lock);
108 return (lockval.next - lockval.owner) > 1; 108 return (lockval.next - lockval.owner) > 1;
109} 109}
110#define arch_spin_is_contended arch_spin_is_contended 110#define arch_spin_is_contended arch_spin_is_contended