History

Make <asm-x86/spinlock.h> use ACCESS_ONCE()

..instead of cooking up its own uglier local version of it.

Linus Torvalds committed 18 years ago

Commit 39f004b1 parent 9c3cdc11 file · +4 −14Browse files

Unified · Split

include/asm-x86/spinlock.h+4−14
@@ -20,18 +20,8 @@ · 19 unmodified lines
20 */20 */
21 21
22#ifdef CONFIG_X86_3222#ifdef CONFIG_X86_32
23typedef char _slock_t;
24# define LOCK_INS_DEC "decb"
25# define LOCK_INS_XCH "xchgb"
26# define LOCK_INS_MOV "movb"
27# define LOCK_INS_CMP "cmpb"
28# define LOCK_PTR_REG "a"23# define LOCK_PTR_REG "a"
29#else24#else
30typedef int _slock_t;
31# define LOCK_INS_DEC "decl"
32# define LOCK_INS_XCH "xchgl"
33# define LOCK_INS_MOV "movl"
34# define LOCK_INS_CMP "cmpl"
35# define LOCK_PTR_REG "D"25# define LOCK_PTR_REG "D"
36#endif26#endif
37 27
@@ -66,14 +56,14 @@ typedef int _slock_t; · 28 unmodified lines
66#if (NR_CPUS < 256)56#if (NR_CPUS < 256)
67static inline int __raw_spin_is_locked(raw_spinlock_t *lock)57static inline int __raw_spin_is_locked(raw_spinlock_t *lock)
68{58{
69 int tmp = *(volatile signed int *)(&(lock)->slock);59 int tmp = ACCESS_ONCE(lock->slock);
70 60
71 return (((tmp >> 8) & 0xff) != (tmp & 0xff));61 return (((tmp >> 8) & 0xff) != (tmp & 0xff));
72}62}
73 63
74static inline int __raw_spin_is_contended(raw_spinlock_t *lock)64static inline int __raw_spin_is_contended(raw_spinlock_t *lock)
75{65{
76 int tmp = *(volatile signed int *)(&(lock)->slock);66 int tmp = ACCESS_ONCE(lock->slock);
77 67
78 return (((tmp >> 8) & 0xff) - (tmp & 0xff)) > 1;68 return (((tmp >> 8) & 0xff) - (tmp & 0xff)) > 1;
79}69}
@@ -130,14 +120,14 @@ static __always_inline void __raw_spin_unlock(raw_spinlock_t *lock) · 50 unmodified lines
130#else120#else
131static inline int __raw_spin_is_locked(raw_spinlock_t *lock)121static inline int __raw_spin_is_locked(raw_spinlock_t *lock)
132{122{
133 int tmp = *(volatile signed int *)(&(lock)->slock);123 int tmp = ACCESS_ONCE(lock->slock);
134 124
135 return (((tmp >> 16) & 0xffff) != (tmp & 0xffff));125 return (((tmp >> 16) & 0xffff) != (tmp & 0xffff));
136}126}
137 127
138static inline int __raw_spin_is_contended(raw_spinlock_t *lock)128static inline int __raw_spin_is_contended(raw_spinlock_t *lock)
139{129{
140 int tmp = *(volatile signed int *)(&(lock)->slock);130 int tmp = ACCESS_ONCE(lock->slock);
141 131
142 return (((tmp >> 16) & 0xffff) - (tmp & 0xffff)) > 1;132 return (((tmp >> 16) & 0xffff) - (tmp & 0xffff)) > 1;
143}133}