summaryrefslogtreecommitdiff
path: root/arch/sh/include/asm/cmpxchg-llsc.h
AgeCommit message (Collapse)AuthorFilesLines
2016-01-12sh: move xchg_cmpxchg to a header by itselfMichael S. Tsirkin1-34/+1
Looks like future sh variants will support a 4-byte cas which will be used to implement 1 and 2 byte xchg. This is exactly what we do for llsc now, move the portable part of the code into a separate header so it's easy to reuse. Suggested-by: Rich Felker <dalias@libc.org> Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
2016-01-12sh: support 1 and 2 byte xchgMichael S. Tsirkin1-22/+36
This completes the xchg implementation for sh architecture. Note: The llsc variant is tricky since this only supports 4 byte atomics, the existing implementation of 1 byte xchg is wrong: we need to do a 4 byte cmpxchg and retry if any bytes changed meanwhile. Write this in C for clarity. Suggested-by: Rich Felker <dalias@libc.org> Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
2009-06-11sh: Fix sh4a llsc-based cmpxchg()Aoi Shinkai1-1/+1
This fixes up a typo in the ll/sc based cmpxchg code which apparently wasn't getting a lot of testing due to the swapped old/new pair. With that fixed up, the ll/sc code also starts using it and provides its own atomic_add_unless(). Signed-off-by: Aoi Shinkai <shinkoi2005@gmail.com> Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2009-01-29sh: Relax inline assembly constraintsMatt Fleming1-19/+19
When dereferencing the memory address contained in a register and modifying the value at that memory address, the register should not be listed in the inline asm outputs. The value at the memory address is an output (which is taken care of with the "memory" clobber), not the register. Signed-off-by: Matt Fleming <matt@console-pimps.org> Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2008-09-08sh: Provide movli.l/movco.l-based cmpxchg.Paul Mundt1-0/+71
Signed-off-by: Paul Mundt <lethal@linux-sh.org>