aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/include
diff options
context:
space:
mode:
authorChristian Borntraeger <borntraeger@de.ibm.com>2014-11-25 05:44:26 -0500
committerChristian Borntraeger <borntraeger@de.ibm.com>2014-12-18 03:54:40 -0500
commit488beef1440e845751365202faace2465840ea98 (patch)
treef1ef574626d0253813e9436fe7a114cf48af19a5 /arch/arm/include
parentaf2e7aaed1ccf30e61af3e096ac2c7df2f2d6c2a (diff)
arm/spinlock: Replace ACCESS_ONCE with 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/arm/include')
-rw-r--r--arch/arm/include/asm/spinlock.h4
1 files changed, 2 insertions, 2 deletions
diff --git a/arch/arm/include/asm/spinlock.h b/arch/arm/include/asm/spinlock.h
index ac4bfae26702..0fa418463f49 100644
--- a/arch/arm/include/asm/spinlock.h
+++ b/arch/arm/include/asm/spinlock.h
@@ -120,12 +120,12 @@ static inline int arch_spin_value_unlocked(arch_spinlock_t lock)
120 120
121static inline int arch_spin_is_locked(arch_spinlock_t *lock) 121static inline int arch_spin_is_locked(arch_spinlock_t *lock)
122{ 122{
123 return !arch_spin_value_unlocked(ACCESS_ONCE(*lock)); 123 return !arch_spin_value_unlocked(READ_ONCE(*lock));
124} 124}
125 125
126static inline int arch_spin_is_contended(arch_spinlock_t *lock) 126static inline int arch_spin_is_contended(arch_spinlock_t *lock)
127{ 127{
128 struct __raw_tickets tickets = ACCESS_ONCE(lock->tickets); 128 struct __raw_tickets tickets = READ_ONCE(lock->tickets);
129 return (tickets.next - tickets.owner) > 1; 129 return (tickets.next - tickets.owner) > 1;
130} 130}
131#define arch_spin_is_contended arch_spin_is_contended 131#define arch_spin_is_contended arch_spin_is_contended