summaryrefslogtreecommitdiffstats
path: root/include/asm-s390/futex.h
diff options
context:
space:
mode:
authorMartin Schwidefsky <schwidefsky@de.ibm.com>2006-07-12 16:39:55 +0200
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2006-07-12 16:39:55 +0200
commit13492c50f69bdf60a42debc6bd3ec49cc1dc941e (patch)
treeaba4230d71ff565ba994a75c0beeb1073c89891b /include/asm-s390/futex.h
parent[S390] subchannel register/unregister mutex. (diff)
downloadlinux-13492c50f69bdf60a42debc6bd3ec49cc1dc941e.tar.xz
linux-13492c50f69bdf60a42debc6bd3ec49cc1dc941e.zip
[S390] fix futex_atomic_cmpxchg_inatomic
futex_atomic_cmpxchg_inatomic has the same bug as the other atomic futex operations: the operation needs to be done in the user address space, not the kernel address space. Add the missing sacf 256 & sacf 0. Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'include/asm-s390/futex.h')
-rw-r--r--include/asm-s390/futex.h5
1 files changed, 3 insertions, 2 deletions
diff --git a/include/asm-s390/futex.h b/include/asm-s390/futex.h
index 1802775568b9..ffedf14f89f6 100644
--- a/include/asm-s390/futex.h
+++ b/include/asm-s390/futex.h
@@ -98,9 +98,10 @@ futex_atomic_cmpxchg_inatomic(int __user *uaddr, int oldval, int newval)
if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int)))
return -EFAULT;
- asm volatile(" cs %1,%4,0(%5)\n"
+ asm volatile(" sacf 256\n"
+ " cs %1,%4,0(%5)\n"
"0: lr %0,%1\n"
- "1:\n"
+ "1: sacf 0\n"
#ifndef __s390x__
".section __ex_table,\"a\"\n"
" .align 4\n"