ARM: shmobile: r8a7790: Add CMT devices to DT
[deliverable/linux.git] / arch / sh / include / asm / futex-irq.h
CommitLineData
fc1d4c9c
KK
1#ifndef __ASM_SH_FUTEX_IRQ_H
2#define __ASM_SH_FUTEX_IRQ_H
3
fc1d4c9c 4
8d7718aa 5static inline int atomic_futex_op_xchg_set(int oparg, u32 __user *uaddr,
fc1d4c9c
KK
6 int *oldval)
7{
8 unsigned long flags;
9 int ret;
10
11 local_irq_save(flags);
12
13 ret = get_user(*oldval, uaddr);
14 if (!ret)
15 ret = put_user(oparg, uaddr);
16
17 local_irq_restore(flags);
18
19 return ret;
20}
21
8d7718aa 22static inline int atomic_futex_op_xchg_add(int oparg, u32 __user *uaddr,
fc1d4c9c
KK
23 int *oldval)
24{
25 unsigned long flags;
26 int ret;
27
28 local_irq_save(flags);
29
30 ret = get_user(*oldval, uaddr);
31 if (!ret)
32 ret = put_user(*oldval + oparg, uaddr);
33
34 local_irq_restore(flags);
35
36 return ret;
37}
38
8d7718aa 39static inline int atomic_futex_op_xchg_or(int oparg, u32 __user *uaddr,
fc1d4c9c
KK
40 int *oldval)
41{
42 unsigned long flags;
43 int ret;
44
45 local_irq_save(flags);
46
47 ret = get_user(*oldval, uaddr);
48 if (!ret)
49 ret = put_user(*oldval | oparg, uaddr);
50
51 local_irq_restore(flags);
52
53 return ret;
54}
55
8d7718aa 56static inline int atomic_futex_op_xchg_and(int oparg, u32 __user *uaddr,
fc1d4c9c
KK
57 int *oldval)
58{
59 unsigned long flags;
60 int ret;
61
62 local_irq_save(flags);
63
64 ret = get_user(*oldval, uaddr);
65 if (!ret)
66 ret = put_user(*oldval & oparg, uaddr);
67
68 local_irq_restore(flags);
69
70 return ret;
71}
72
8d7718aa 73static inline int atomic_futex_op_xchg_xor(int oparg, u32 __user *uaddr,
fc1d4c9c
KK
74 int *oldval)
75{
76 unsigned long flags;
77 int ret;
78
79 local_irq_save(flags);
80
81 ret = get_user(*oldval, uaddr);
82 if (!ret)
83 ret = put_user(*oldval ^ oparg, uaddr);
84
85 local_irq_restore(flags);
86
87 return ret;
88}
89
8d7718aa
ML
90static inline int atomic_futex_op_cmpxchg_inatomic(u32 *uval,
91 u32 __user *uaddr,
92 u32 oldval, u32 newval)
fc1d4c9c
KK
93{
94 unsigned long flags;
8d7718aa
ML
95 int ret;
96 u32 prev = 0;
fc1d4c9c
KK
97
98 local_irq_save(flags);
99
100 ret = get_user(prev, uaddr);
101 if (!ret && oldval == prev)
102 ret = put_user(newval, uaddr);
103
104 local_irq_restore(flags);
105
37a9d912
ML
106 *uval = prev;
107 return ret;
fc1d4c9c
KK
108}
109
110#endif /* __ASM_SH_FUTEX_IRQ_H */
This page took 0.489129 seconds and 5 git commands to generate.