mirror of https://github.com/torvalds/linux.git
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>
|
||
|---|---|---|
| .. | ||
| Makefile | ||
| asm-offsets.c | ||
| break.S | ||
| cmode.S | ||
| debug-stub.c | ||
| dma.c | ||
| entry-table.S | ||
| entry.S | ||
| frv_ksyms.c | ||
| futex.c | ||
| gdb-io.c | ||
| gdb-io.h | ||
| gdb-stub.c | ||
| head-mmu-fr451.S | ||
| head-uc-fr401.S | ||
| head-uc-fr451.S | ||
| head-uc-fr555.S | ||
| head.S | ||
| head.inc | ||
| irq-mb93091.c | ||
| irq-mb93093.c | ||
| irq-mb93493.c | ||
| irq.c | ||
| local.h | ||
| local64.h | ||
| module.c | ||
| pm-mb93093.c | ||
| pm.c | ||
| process.c | ||
| ptrace.c | ||
| setup.c | ||
| signal.c | ||
| sleep.S | ||
| switch_to.S | ||
| sys_frv.c | ||
| sysctl.c | ||
| time.c | ||
| traps.c | ||
| uaccess.c | ||
| vmlinux.lds.S | ||