android_kernel_xiaomi_sdm845/arch/arm/include/asm
Mikael Pettersson e589ed23dd [ARM] 5218/1: arm: improved futex support
Linux/ARM currently doesn't support robust or PI futexes.
The problem is that the kernel wants to perform certain ops
(cmpxchg, set, add, or, andn, xor) atomically on user-space
addresses, and ARM's futex.h doesn't support that.

This patch adds that support, but only for uniprocessor machines.
For UP it's enough to disable preemption to ensure mutual exclusion
with other software agents (futexes don't need to care about other
hardware agents, fortunately).

This patch is based on one posted by Khem Raj on 2007-08-01
<http://marc.info/?l=linux-arm-kernel&m=118599407413016&w=2>.
(That patch is included in the -RT kernel patches.)
My changes since that version include:
* corrected implementation of FUTEX_OP_ANDN (must complement oparg)
* added missing memory clobber to futex_atomic_cmpxchg_inatomic()
* removed spinlock because it's unnecessary for UP and insufficient
  for SMP, instead the code is restricted to UP and relies on the
  fact that pagefault_disable() also disables preemption
* coding style cleanups

Tested on ARMv5 XScales with the glibc-2.6 nptl test suite.

Tested-by: Bruce Ashfield <bruce.ashfield@windriver.com>

Signed-off-by: Mikael Pettersson <mikpe@it.uu.se>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2008-09-01 12:06:26 +01:00
..
hardware [ARM] Move include/asm-arm/arch-* to arch/arm/*/include/mach 2008-08-07 09:55:48 +01:00
mach [ARM] Fix circular include dependency with IRQ headers 2008-08-07 09:39:37 +01:00
a.out-core.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
a.out.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
assembler.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
atomic.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
auxvec.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
bitops.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
bug.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
bugs.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
byteorder.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
cache.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
cacheflush.h [ARM] cachetype: move definitions to separate header 2008-09-01 12:06:24 +01:00
cachetype.h [ARM] cachetype: move definitions to separate header 2008-09-01 12:06:24 +01:00
checksum.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
cnt32_to_63.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
cpu-multi32.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
cpu-single.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
cpu.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
cputime.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
cputype.h [ARM] cputype: separate definitions, use them 2008-09-01 12:06:23 +01:00
current.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
delay.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
device.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
div64.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
dma-mapping.h [ARM] dma-mapping: provide sync_range APIs 2008-08-10 14:05:14 +01:00
dma.h [ARM] Move include/asm-arm/arch-* to arch/arm/*/include/mach 2008-08-07 09:55:48 +01:00
domain.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
ecard.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
elf.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
emergency-restart.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
errno.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
fb.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
fcntl.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
fiq.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
flat.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
floppy.h [ARM] Move include/asm-arm/arch-* to arch/arm/*/include/mach 2008-08-07 09:55:48 +01:00
fpstate.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
ftrace.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
futex.h [ARM] 5218/1: arm: improved futex support 2008-09-01 12:06:26 +01:00
glue.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
gpio.h [ARM] Move include/asm-arm/arch-* to arch/arm/*/include/mach 2008-08-07 09:55:48 +01:00
hardirq.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
hw_irq.h [ARM] Fix circular include dependency with IRQ headers 2008-08-07 09:39:37 +01:00
hwcap.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
ide.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
io.h [ARM] Move include/asm-arm/arch-* to arch/arm/*/include/mach 2008-08-07 09:55:48 +01:00
ioctl.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
ioctls.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
ipcbuf.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
irq_regs.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
irq.h [ARM] Move include/asm-arm/arch-* to arch/arm/*/include/mach 2008-08-07 09:55:48 +01:00
irqflags.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
Kbuild [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
kdebug.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
kexec.h kexec jump: rename KEXEC_CONTROL_CODE_SIZE to KEXEC_CONTROL_PAGE_SIZE 2008-08-15 08:35:42 -07:00
kgdb.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
kmap_types.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
kprobes.h [ARM] 5206/1: remove kprobe_trap_handler() hack 2008-09-01 12:06:26 +01:00
leds.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
limits.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
linkage.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
local.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
locks.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
mc146818rtc.h [ARM] Move include/asm-arm/arch-* to arch/arm/*/include/mach 2008-08-07 09:55:48 +01:00
memory.h [ARM] dma-mapping: improve type-safeness of DMA translations 2008-08-10 12:10:49 +01:00
mman.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
mmu_context.h [ARM] cachetype: move definitions to separate header 2008-09-01 12:06:24 +01:00
mmu.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
mmzone.h [ARM] Move include/asm-arm/arch-* to arch/arm/*/include/mach 2008-08-07 09:55:48 +01:00
module.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
msgbuf.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
mtd-xip.h [ARM] 5191/1: ARM: remove CVS keywords 2008-08-16 20:01:18 +01:00
mutex.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
nwflash.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
page-nommu.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
page.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
param.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
parport.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
pci.h [ARM] Move include/asm-arm/arch-* to arch/arm/*/include/mach 2008-08-07 09:55:48 +01:00
percpu.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
pgalloc.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
pgtable-hwdef.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
pgtable-nommu.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
pgtable.h [ARM] Move include/asm-arm/arch-* to arch/arm/*/include/mach 2008-08-07 09:55:48 +01:00
poll.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
posix_types.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
proc-fns.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
processor.h [ARM] 5196/1: fix inline asm constraints for preload 2008-08-16 09:30:05 +01:00
procinfo.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
ptrace.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
resource.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
scatterlist.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
sections.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
segment.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
sembuf.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
serial.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
setup.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
shmbuf.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
shmparam.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
sigcontext.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
siginfo.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
signal.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
sizes.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
smp.h [ARM] Move include/asm-arm/arch-* to arch/arm/*/include/mach 2008-08-07 09:55:48 +01:00
socket.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
sockios.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
sparsemem.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
spinlock_types.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
spinlock.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
stat.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
statfs.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
string.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
suspend.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
system.h [ARM] cputype: separate definitions, use them 2008-09-01 12:06:23 +01:00
termbits.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
termios.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
therm.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
thread_info.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
thread_notify.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
timex.h [ARM] Move include/asm-arm/arch-* to arch/arm/*/include/mach 2008-08-07 09:55:48 +01:00
tlb.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
tlbflush.h [ARM] 5192/1: ARM TLB: add v7wbi_{possible,always}_flags to {possible,always}_tlb_flags 2008-08-12 19:54:08 +01:00
topology.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
traps.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
types.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
uaccess.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
ucontext.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
unaligned.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
unistd.h [ARM] 5193/1: Wire up missing syscalls 2008-08-12 19:54:07 +01:00
user.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
vfp.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
vfpmacros.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00
vga.h [ARM] Move include/asm-arm/arch-* to arch/arm/*/include/mach 2008-08-07 09:55:48 +01:00
xor.h [ARM] move include/asm-arm to arch/arm/include/asm 2008-08-02 21:32:35 +01:00