linux/arch/alpha/include/asm
Andrew Morton 62aca40365 alpha: fix 32/64-bit bug in futex support
Michael Cree said:

: : I have noticed some user space problems (pulseaudio crashes in pthread
: : code, glibc/nptl test suite failures, java compiler freezes on SMP alpha
: : systems) that arise when using a 2.6.39 or later kernel on Alpha.
: : Bisecting between 2.6.38 and 2.6.39 (using glibc/nptl test suite as
: : criterion for good/bad kernel) eventually leads to:
: :
: : 8d7718aa08 is the first bad commit
: : commit 8d7718aa08
: : Author: Michel Lespinasse <walken@google.com>
: : Date:   Thu Mar 10 18:50:58 2011 -0800
: :
: :     futex: Sanitize futex ops argument types
: :
: :     Change futex_atomic_op_inuser and futex_atomic_cmpxchg_inatomic
: :     prototypes to use u32 types for the futex as this is the data type the
: :     futex core code uses all over the place.
: :
: : Looking at the commit I see there is a change of the uaddr argument in
: : the Alpha architecture specific code for futexes from int to u32, but I
: : don't see why this should cause a problem.

Richard Henderson said:

: futex_atomic_cmpxchg_inatomic(u32 *uval, u32 __user *uaddr,
:                               u32 oldval, u32 newval)
: ...
:         :       "r"(uaddr), "r"((long)oldval), "r"(newval)
:
:
: There is no 32-bit compare instruction.  These are implemented by
: consistently extending the values to a 64-bit type.  Since the
: load instruction sign-extends, we want to sign-extend the other
: quantity as well (despite the fact it's logically unsigned).
:
: So:
:
: -        :       "r"(uaddr), "r"((long)oldval), "r"(newval)
: +        :       "r"(uaddr), "r"((long)(int)oldval), "r"(newval)
:
: should do the trick.

Michael said:

: This fixes the glibc test suite failures and the pulseaudio related
: crashes, but it does not fix the java compiiler lockups that I was (and
: are still) observing.  That is some other problem.

Reported-by: Michael Cree <mcree@orcon.net.nz>
Tested-by: Michael Cree <mcree@orcon.net.nz>
Acked-by: Phil Carmody <ext-phil.2.carmody@nokia.com>
Cc: Richard Henderson <rth@twiddle.net>
Cc: Michel Lespinasse <walken@google.com>
Cc: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
Reviewed-by: Matt Turner <mattst88@gmail.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2012-03-05 15:49:43 -08:00
..
Kbuild
a.out-core.h
a.out.h
agp.h
agp_backend.h
asm-offsets.h
atomic.h atomic: cleanup asm-generic atomic*.h inclusion 2011-07-26 16:49:47 -07:00
auxvec.h
barrier.h
bitops.h asm-generic: add another generic ext2 atomic bitops 2011-07-26 16:49:46 -07:00
bitsperlong.h
bug.h
bugs.h
byteorder.h
cache.h
cacheflush.h
checksum.h
compiler.h
console.h
core_apecs.h
core_cia.h
core_irongate.h
core_lca.h
core_marvel.h
core_mcpcia.h
core_polaris.h
core_t2.h
core_titan.h
core_tsunami.h
core_wildfire.h
cputime.h
current.h
delay.h
device.h
div64.h
dma-mapping.h
dma.h
elf.h
emergency-restart.h
err_common.h
err_ev6.h
err_ev7.h
errno.h
fb.h
fcntl.h locks: move F_INPROGRESS from fl_type to fl_flags field 2011-08-19 13:25:34 -04:00
floppy.h
fpu.h
ftrace.h
futex.h alpha: fix 32/64-bit bug in futex support 2012-03-05 15:49:43 -08:00
gct.h
gentrap.h
gpio.h
hardirq.h
hw_irq.h
hwrpb.h
io.h
io_trivial.h
ioctl.h
ioctls.h
ipcbuf.h consolidate a bunch of ipcbuf.h instances 2012-01-03 22:55:18 -05:00
irq.h
irq_regs.h
irqflags.h
jensen.h
kdebug.h
kmap_types.h
linkage.h
local.h atomic: use <linux/atomic.h> 2011-07-26 16:49:47 -07:00
local64.h
machvec.h
mc146818rtc.h
mman.h
mmu.h
mmu_context.h
mmzone.h
module.h
msgbuf.h
mutex.h
page.h
pal.h
param.h
parport.h
pci.h
percpu.h
perf_event.h
pgalloc.h
pgtable.h
poll.h
posix_types.h
processor.h
ptrace.h ptrace: unify show_regs() prototype 2011-07-26 16:49:43 -07:00
reg.h
regdef.h
resource.h
rtc.h
rwsem.h
scatterlist.h
sections.h
segment.h
sembuf.h
serial.h
setup.h
sfp-machine.h
shmbuf.h
shmparam.h
sigcontext.h
siginfo.h
signal.h
smp.h
socket.h net: add wireless TX status socket option 2011-11-09 16:01:02 -05:00
sockios.h
spinlock.h
spinlock_types.h
stat.h
statfs.h
string.h
swab.h
sysinfo.h alpha: unbreak osf_setsysinfo(SSI_NVPAIRS, [SSIN_UACPROC, UAC_SIGBUS]) 2011-08-25 16:25:33 -07:00
system.h
termbits.h
termios.h
thread_info.h freezer: remove now unused TIF_FREEZE 2011-11-21 12:32:25 -08:00
timex.h
tlb.h
tlbflush.h
topology.h
types.h consolidate umode_t declarations 2012-01-03 22:55:17 -05:00
uaccess.h
ucontext.h
unaligned.h
unistd.h alpha: wire up sendmmsg syscall 2011-10-31 17:30:51 -07:00
user.h
vga.h
wrperfmon.h
xchg.h
xor.h