Commit b10fa7b6 authored by Richard Kuo's avatar Richard Kuo

Hexagon: fix atomic_set

Normal writes in our our architecture don't invalidate lock
reservations.
Signed-off-by: default avatarRichard Kuo <rkuo@codeaurora.org>
parent 17ca896d
...@@ -26,7 +26,20 @@ ...@@ -26,7 +26,20 @@
#include <asm/cmpxchg.h> #include <asm/cmpxchg.h>
#define ATOMIC_INIT(i) { (i) } #define ATOMIC_INIT(i) { (i) }
#define atomic_set(v, i) ((v)->counter = (i))
/* Normal writes in our arch don't clear lock reservations */
static inline void atomic_set(atomic_t *v, int new)
{
asm volatile(
"1: r6 = memw_locked(%0);\n"
" memw_locked(%0,p0) = %1;\n"
" if (!P0) jump 1b;\n"
:
: "r" (&v->counter), "r" (new)
: "memory", "p0", "r6"
);
}
/** /**
* atomic_read - reads a word, atomically * atomic_read - reads a word, atomically
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment