Commit b10fa7b6 authored by Richard Kuo's avatar Richard Kuo
Browse files

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
Loading
Loading
Loading
Loading
+14 −1
Original line number Diff line number Diff line
@@ -26,7 +26,20 @@
#include <asm/cmpxchg.h>

#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