1
linux/arch
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
..
alpha alpha: move include/asm-alpha to arch/alpha/include/asm 2008-08-15 09:19:40 -07:00
arm [ARM] 5218/1: arm: improved futex support 2008-09-01 12:06:26 +01:00
avr32 avr32: Make atstk1006_nand_data definition static 2008-08-08 12:44:56 +02:00
blackfin Blackfin arch: hook up some missing new system calls 2008-08-14 15:40:19 +08:00
cris removed unused #include <linux/version.h>'s 2008-08-23 12:14:12 -07:00
frv
h8300 [h8300] move include/asm-h8300 to arch/h8300/include/asm 2008-08-13 14:26:32 -07:00
ia64 [IA64] use generic compat_old_sys_readdir 2008-08-18 15:42:11 -07:00
m32r
m68k m68k{,nommu}: Wire up new system calls 2008-08-11 10:37:34 -07:00
m68knommu m68k{,nommu}: Wire up new system calls 2008-08-11 10:37:34 -07:00
mips remove unneeded #include <linux/ide.h>'s 2008-08-05 18:17:00 +02:00
mn10300 removed unused #include <linux/version.h>'s 2008-08-23 12:14:12 -07:00
parisc
powerpc removed unused #include <linux/version.h>'s 2008-08-23 12:14:12 -07:00
s390 [S390] Update default configuration. 2008-08-21 19:46:42 +02:00
sh Merge branch 'sh/for-2.6.27' of git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-2.6 2008-08-20 08:46:11 -07:00
sparc sparc64: Implement IRQ stacks. 2008-08-12 18:33:56 -07:00
sparc64 sparc64: Fix cmdline_memory_size handling bugs. 2008-08-14 01:45:41 -07:00
um
x86 [x86] Clean up MAXSMP Kconfig, and limit NR_CPUS to 512 2008-08-25 14:15:38 -07:00
xtensa remove unneeded #include <linux/ide.h>'s 2008-08-05 18:17:00 +02:00
.gitignore
Kconfig