X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=include%2Fasm-parisc%2Ffutex.h;h=d84bbb283fd17c7a8e9fb92d4a30a660efe86263;hb=7c28ad2d83ecc637237fe684659a6afbce0bb2a8;hp=9feff4ce1424bc390608326240be369eb13aa648;hpb=c85749e6d1df55ca5b23cb1d220ed7df92df8d78;p=powerpc.git diff --git a/include/asm-parisc/futex.h b/include/asm-parisc/futex.h index 9feff4ce14..d84bbb283f 100644 --- a/include/asm-parisc/futex.h +++ b/include/asm-parisc/futex.h @@ -1,5 +1,5 @@ -#ifndef _ASM_FUTEX_H -#define _ASM_FUTEX_H +#ifndef _ASM_PARISC_FUTEX_H +#define _ASM_PARISC_FUTEX_H #ifdef __KERNEL__ @@ -49,5 +49,23 @@ futex_atomic_op_inuser (int encoded_op, int __user *uaddr) return ret; } +/* Non-atomic version */ +static inline int +futex_atomic_cmpxchg_inatomic(int __user *uaddr, int oldval, int newval) +{ + int err = 0; + int uval; + + if (!access_ok(VERIFY_WRITE, uaddr, sizeof(int))) + return -EFAULT; + + err = get_user(uval, uaddr); + if (err) return -EFAULT; + if (uval == oldval) + err = put_user(newval, uaddr); + if (err) return -EFAULT; + return uval; +} + #endif #endif