frv: Rewrite atomic implementation
authorPeter Zijlstra <peterz@infradead.org>
Thu, 23 Apr 2015 22:49:20 +0000 (00:49 +0200)
committerThomas Gleixner <tglx@linutronix.de>
Mon, 27 Jul 2015 12:06:23 +0000 (14:06 +0200)
commitb0d8003ef405c4148b703cdaab1171045c6c3bbd
tree8180046acd2fdb22e2a0a747c9018f7674be8729
parent7fc1845dd45a825b3c2b760df342a94f61fb1113
frv: Rewrite atomic implementation

Mostly complete rewrite of the FRV atomic implementation, instead of
using assembly files, use inline assembler.

The out-of-line CONFIG option makes a bit of a mess of things, but a
little CPP trickery gets that done too.

FRV already had the atomic logic ops but under a non standard name,
the reimplementation provides the generic names and provides the
intermediate form required for the bitops implementation.

The slightly inconsistent __atomic32_fetch_##op naming is because
__atomic_fetch_##op conlicts with GCC builtin functions.

The 64bit atomic ops use the inline assembly %Ln construct to access
the low word register (r+1), afaik this construct was not previously
used in the kernel and is completely undocumented, but I found it in
the FRV GCC code and it seems to work.

FRV had a non-standard definition of atomic_{clear,set}_mask() which
would work types other than atomic_t, the one user relying on that
(arch/frv/kernel/dma.c) got converted to use the new intermediate
form.

Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
arch/frv/include/asm/atomic.h
arch/frv/include/asm/atomic_defs.h [new file with mode: 0644]
arch/frv/include/asm/bitops.h
arch/frv/kernel/dma.c
arch/frv/kernel/frv_ksyms.c
arch/frv/lib/Makefile
arch/frv/lib/atomic-lib.c [new file with mode: 0644]
arch/frv/lib/atomic-ops.S
arch/frv/lib/atomic64-ops.S