diff options
| author | Takashi Iwai <tiwai@suse.de> | 2013-08-01 05:12:10 -0400 |
|---|---|---|
| committer | Takashi Iwai <tiwai@suse.de> | 2013-08-01 05:12:10 -0400 |
| commit | 209fb1b7e298c5f5a93a9450bc9e9e7923f745d9 (patch) | |
| tree | 27cbfa78e5eeaceb2aae1c165f7f0e24f6fee286 /arch/alpha/include/asm | |
| parent | a8d30608eaed6cc759b8e2e8a8bbbb42591f797f (diff) | |
| parent | 3fef7f795fff7ccc58d55a28315ca73305515884 (diff) | |
Merge tag 'asoc-v3.11-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into for-linus
ASoC: Fixes for v3.11
A fix to make sure userspace knows when control writes have caused a
change in value, fixing some UIs, plus a few few driver fixes mainly
cleaning up issues from recent refactorings on less mainstream platforms.
Diffstat (limited to 'arch/alpha/include/asm')
| -rw-r--r-- | arch/alpha/include/asm/atomic.h | 88 | ||||
| -rw-r--r-- | arch/alpha/include/asm/param.h | 8 | ||||
| -rw-r--r-- | arch/alpha/include/asm/spinlock.h | 4 | ||||
| -rw-r--r-- | arch/alpha/include/asm/unistd.h | 3 |
4 files changed, 71 insertions, 32 deletions
diff --git a/arch/alpha/include/asm/atomic.h b/arch/alpha/include/asm/atomic.h index c2cbe4fc391c..78b03ef39f6f 100644 --- a/arch/alpha/include/asm/atomic.h +++ b/arch/alpha/include/asm/atomic.h | |||
| @@ -186,17 +186,24 @@ static __inline__ long atomic64_sub_return(long i, atomic64_t * v) | |||
| 186 | */ | 186 | */ |
| 187 | static __inline__ int __atomic_add_unless(atomic_t *v, int a, int u) | 187 | static __inline__ int __atomic_add_unless(atomic_t *v, int a, int u) |
| 188 | { | 188 | { |
| 189 | int c, old; | 189 | int c, new, old; |
| 190 | c = atomic_read(v); | 190 | smp_mb(); |
| 191 | for (;;) { | 191 | __asm__ __volatile__( |
| 192 | if (unlikely(c == (u))) | 192 | "1: ldl_l %[old],%[mem]\n" |
| 193 | break; | 193 | " cmpeq %[old],%[u],%[c]\n" |
| 194 | old = atomic_cmpxchg((v), c, c + (a)); | 194 | " addl %[old],%[a],%[new]\n" |
| 195 | if (likely(old == c)) | 195 | " bne %[c],2f\n" |
| 196 | break; | 196 | " stl_c %[new],%[mem]\n" |
| 197 | c = old; | 197 | " beq %[new],3f\n" |
| 198 | } | 198 | "2:\n" |
| 199 | return c; | 199 | ".subsection 2\n" |
| 200 | "3: br 1b\n" | ||
| 201 | ".previous" | ||
| 202 | : [old] "=&r"(old), [new] "=&r"(new), [c] "=&r"(c) | ||
| 203 | : [mem] "m"(*v), [a] "rI"(a), [u] "rI"((long)u) | ||
| 204 | : "memory"); | ||
| 205 | smp_mb(); | ||
| 206 | return old; | ||
| 200 | } | 207 | } |
| 201 | 208 | ||
| 202 | 209 | ||
| @@ -207,21 +214,56 @@ static __inline__ int __atomic_add_unless(atomic_t *v, int a, int u) | |||
| 207 | * @u: ...unless v is equal to u. | 214 | * @u: ...unless v is equal to u. |
| 208 | * | 215 | * |
| 209 | * Atomically adds @a to @v, so long as it was not @u. | 216 | * Atomically adds @a to @v, so long as it was not @u. |
| 210 | * Returns the old value of @v. | 217 | * Returns true iff @v was not @u. |
| 211 | */ | 218 | */ |
| 212 | static __inline__ int atomic64_add_unless(atomic64_t *v, long a, long u) | 219 | static __inline__ int atomic64_add_unless(atomic64_t *v, long a, long u) |
| 213 | { | 220 | { |
| 214 | long c, old; | 221 | long c, tmp; |
| 215 | c = atomic64_read(v); | 222 | smp_mb(); |
| 216 | for (;;) { | 223 | __asm__ __volatile__( |
| 217 | if (unlikely(c == (u))) | 224 | "1: ldq_l %[tmp],%[mem]\n" |
| 218 | break; | 225 | " cmpeq %[tmp],%[u],%[c]\n" |
| 219 | old = atomic64_cmpxchg((v), c, c + (a)); | 226 | " addq %[tmp],%[a],%[tmp]\n" |
| 220 | if (likely(old == c)) | 227 | " bne %[c],2f\n" |
| 221 | break; | 228 | " stq_c %[tmp],%[mem]\n" |
| 222 | c = old; | 229 | " beq %[tmp],3f\n" |
| 223 | } | 230 | "2:\n" |
| 224 | return c != (u); | 231 | ".subsection 2\n" |
| 232 | "3: br 1b\n" | ||
| 233 | ".previous" | ||
| 234 | : [tmp] "=&r"(tmp), [c] "=&r"(c) | ||
| 235 | : [mem] "m"(*v), [a] "rI"(a), [u] "rI"(u) | ||
| 236 | : "memory"); | ||
| 237 | smp_mb(); | ||
| 238 | return !c; | ||
| 239 | } | ||
| 240 | |||
| 241 | /* | ||
| 242 | * atomic64_dec_if_positive - decrement by 1 if old value positive | ||
| 243 | * @v: pointer of type atomic_t | ||
| 244 | * | ||
| 245 | * The function returns the old value of *v minus 1, even if | ||
| 246 | * the atomic variable, v, was not decremented. | ||
| 247 | */ | ||
| 248 | static inline long atomic64_dec_if_positive(atomic64_t *v) | ||
| 249 | { | ||
| 250 | long old, tmp; | ||
| 251 | smp_mb(); | ||
| 252 | __asm__ __volatile__( | ||
| 253 | "1: ldq_l %[old],%[mem]\n" | ||
| 254 | " subq %[old],1,%[tmp]\n" | ||
| 255 | " ble %[old],2f\n" | ||
| 256 | " stq_c %[tmp],%[mem]\n" | ||
| 257 | " beq %[tmp],3f\n" | ||
| 258 | "2:\n" | ||
| 259 | ".subsection 2\n" | ||
| 260 | "3: br 1b\n" | ||
| 261 | ".previous" | ||
| 262 | : [old] "=&r"(old), [tmp] "=&r"(tmp) | ||
| 263 | : [mem] "m"(*v) | ||
| 264 | : "memory"); | ||
| 265 | smp_mb(); | ||
| 266 | return old - 1; | ||
| 225 | } | 267 | } |
| 226 | 268 | ||
| 227 | #define atomic64_inc_not_zero(v) atomic64_add_unless((v), 1, 0) | 269 | #define atomic64_inc_not_zero(v) atomic64_add_unless((v), 1, 0) |
diff --git a/arch/alpha/include/asm/param.h b/arch/alpha/include/asm/param.h index bf46af51941b..a5b68b268bcf 100644 --- a/arch/alpha/include/asm/param.h +++ b/arch/alpha/include/asm/param.h | |||
| @@ -3,7 +3,9 @@ | |||
| 3 | 3 | ||
| 4 | #include <uapi/asm/param.h> | 4 | #include <uapi/asm/param.h> |
| 5 | 5 | ||
| 6 | #define HZ CONFIG_HZ | 6 | # undef HZ |
| 7 | #define USER_HZ HZ | 7 | # define HZ CONFIG_HZ |
| 8 | # define CLOCKS_PER_SEC HZ /* frequency at which times() counts */ | 8 | # define USER_HZ 1024 |
| 9 | # define CLOCKS_PER_SEC USER_HZ /* frequency at which times() counts */ | ||
| 10 | |||
| 9 | #endif /* _ASM_ALPHA_PARAM_H */ | 11 | #endif /* _ASM_ALPHA_PARAM_H */ |
diff --git a/arch/alpha/include/asm/spinlock.h b/arch/alpha/include/asm/spinlock.h index 3bba21e41b81..37b570d01202 100644 --- a/arch/alpha/include/asm/spinlock.h +++ b/arch/alpha/include/asm/spinlock.h | |||
| @@ -168,8 +168,4 @@ static inline void arch_write_unlock(arch_rwlock_t * lock) | |||
| 168 | #define arch_read_lock_flags(lock, flags) arch_read_lock(lock) | 168 | #define arch_read_lock_flags(lock, flags) arch_read_lock(lock) |
| 169 | #define arch_write_lock_flags(lock, flags) arch_write_lock(lock) | 169 | #define arch_write_lock_flags(lock, flags) arch_write_lock(lock) |
| 170 | 170 | ||
| 171 | #define arch_spin_relax(lock) cpu_relax() | ||
| 172 | #define arch_read_relax(lock) cpu_relax() | ||
| 173 | #define arch_write_relax(lock) cpu_relax() | ||
| 174 | |||
| 175 | #endif /* _ALPHA_SPINLOCK_H */ | 171 | #endif /* _ALPHA_SPINLOCK_H */ |
diff --git a/arch/alpha/include/asm/unistd.h b/arch/alpha/include/asm/unistd.h index 43baee17acdf..f2c94402e2c8 100644 --- a/arch/alpha/include/asm/unistd.h +++ b/arch/alpha/include/asm/unistd.h | |||
| @@ -3,8 +3,7 @@ | |||
| 3 | 3 | ||
| 4 | #include <uapi/asm/unistd.h> | 4 | #include <uapi/asm/unistd.h> |
| 5 | 5 | ||
| 6 | 6 | #define NR_SYSCALLS 508 | |
| 7 | #define NR_SYSCALLS 506 | ||
| 8 | 7 | ||
| 9 | #define __ARCH_WANT_OLD_READDIR | 8 | #define __ARCH_WANT_OLD_READDIR |
| 10 | #define __ARCH_WANT_STAT64 | 9 | #define __ARCH_WANT_STAT64 |
