diff options
| author | Richard Kuo <rkuo@codeaurora.org> | 2013-11-25 14:49:26 -0500 |
|---|---|---|
| committer | Richard Kuo <rkuo@codeaurora.org> | 2014-04-04 19:20:02 -0400 |
| commit | b10fa7b62d4201602dac45290b43defd4a980a12 (patch) | |
| tree | 4a8f1acc0d5ac4f4f41e54b0f29230abd781f654 | |
| parent | 17ca896dae8272a3dadf6343dca9daa5c2e6ebb5 (diff) | |
Hexagon: fix atomic_set
Normal writes in our our architecture don't invalidate lock
reservations.
Signed-off-by: Richard Kuo <rkuo@codeaurora.org>
| -rw-r--r-- | arch/hexagon/include/asm/atomic.h | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/arch/hexagon/include/asm/atomic.h b/arch/hexagon/include/asm/atomic.h index 7aae4cb2a29a..17dc63780c06 100644 --- a/arch/hexagon/include/asm/atomic.h +++ b/arch/hexagon/include/asm/atomic.h | |||
| @@ -26,7 +26,20 @@ | |||
| 26 | #include <asm/cmpxchg.h> | 26 | #include <asm/cmpxchg.h> |
| 27 | 27 | ||
| 28 | #define ATOMIC_INIT(i) { (i) } | 28 | #define ATOMIC_INIT(i) { (i) } |
| 29 | #define atomic_set(v, i) ((v)->counter = (i)) | 29 | |
| 30 | /* Normal writes in our arch don't clear lock reservations */ | ||
| 31 | |||
| 32 | static inline void atomic_set(atomic_t *v, int new) | ||
| 33 | { | ||
| 34 | asm volatile( | ||
| 35 | "1: r6 = memw_locked(%0);\n" | ||
| 36 | " memw_locked(%0,p0) = %1;\n" | ||
| 37 | " if (!P0) jump 1b;\n" | ||
| 38 | : | ||
| 39 | : "r" (&v->counter), "r" (new) | ||
| 40 | : "memory", "p0", "r6" | ||
| 41 | ); | ||
| 42 | } | ||
| 30 | 43 | ||
| 31 | /** | 44 | /** |
| 32 | * atomic_read - reads a word, atomically | 45 | * atomic_read - reads a word, atomically |
