]>
git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blob - arch/sh/include/asm/futex.h
1 #ifndef __ASM_SH_FUTEX_H
2 #define __ASM_SH_FUTEX_H
6 #include <linux/futex.h>
7 #include <linux/uaccess.h>
10 #if !defined(CONFIG_SMP)
11 #include <asm/futex-irq.h>
12 #elif defined(CONFIG_CPU_J2)
13 #include <asm/futex-cas.h>
14 #elif defined(CONFIG_CPU_SH4A)
15 #include <asm/futex-llsc.h>
17 #error SMP not supported on this configuration.
21 futex_atomic_cmpxchg_inatomic(u32
*uval
, u32 __user
*uaddr
,
22 u32 oldval
, u32 newval
)
24 if (!access_ok(VERIFY_WRITE
, uaddr
, sizeof(u32
)))
27 return atomic_futex_op_cmpxchg_inatomic(uval
, uaddr
, oldval
, newval
);
30 static inline int arch_futex_atomic_op_inuser(int op
, u32 oparg
, int *oval
,
33 u32 oldval
, newval
, prev
;
39 if (op
== FUTEX_OP_SET
)
42 ret
= get_user(oldval
, uaddr
);
51 newval
= oldval
+ oparg
;
54 newval
= oldval
| oparg
;
57 newval
= oldval
& ~oparg
;
60 newval
= oldval
^ oparg
;
69 ret
= futex_atomic_cmpxchg_inatomic(&prev
, uaddr
, oldval
, newval
);
70 } while (!ret
&& prev
!= oldval
);
80 #endif /* __KERNEL__ */
81 #endif /* __ASM_SH_FUTEX_H */