Linux Audio

Check our new training course

Loading...
v3.1
  1#ifndef __ASM_SH_FUTEX_IRQ_H
  2#define __ASM_SH_FUTEX_IRQ_H
  3
  4#include <asm/system.h>
  5
  6static inline int atomic_futex_op_xchg_set(int oparg, u32 __user *uaddr,
  7					   int *oldval)
  8{
  9	unsigned long flags;
 10	int ret;
 11
 12	local_irq_save(flags);
 13
 14	ret = get_user(*oldval, uaddr);
 15	if (!ret)
 16		ret = put_user(oparg, uaddr);
 17
 18	local_irq_restore(flags);
 19
 20	return ret;
 21}
 22
 23static inline int atomic_futex_op_xchg_add(int oparg, u32 __user *uaddr,
 24					   int *oldval)
 25{
 26	unsigned long flags;
 27	int ret;
 28
 29	local_irq_save(flags);
 30
 31	ret = get_user(*oldval, uaddr);
 32	if (!ret)
 33		ret = put_user(*oldval + oparg, uaddr);
 34
 35	local_irq_restore(flags);
 36
 37	return ret;
 38}
 39
 40static inline int atomic_futex_op_xchg_or(int oparg, u32 __user *uaddr,
 41					  int *oldval)
 42{
 43	unsigned long flags;
 44	int ret;
 45
 46	local_irq_save(flags);
 47
 48	ret = get_user(*oldval, uaddr);
 49	if (!ret)
 50		ret = put_user(*oldval | oparg, uaddr);
 51
 52	local_irq_restore(flags);
 53
 54	return ret;
 55}
 56
 57static inline int atomic_futex_op_xchg_and(int oparg, u32 __user *uaddr,
 58					   int *oldval)
 59{
 60	unsigned long flags;
 61	int ret;
 62
 63	local_irq_save(flags);
 64
 65	ret = get_user(*oldval, uaddr);
 66	if (!ret)
 67		ret = put_user(*oldval & oparg, uaddr);
 68
 69	local_irq_restore(flags);
 70
 71	return ret;
 72}
 73
 74static inline int atomic_futex_op_xchg_xor(int oparg, u32 __user *uaddr,
 75					   int *oldval)
 76{
 77	unsigned long flags;
 78	int ret;
 79
 80	local_irq_save(flags);
 81
 82	ret = get_user(*oldval, uaddr);
 83	if (!ret)
 84		ret = put_user(*oldval ^ oparg, uaddr);
 85
 86	local_irq_restore(flags);
 87
 88	return ret;
 89}
 90
 91static inline int atomic_futex_op_cmpxchg_inatomic(u32 *uval,
 92						   u32 __user *uaddr,
 93						   u32 oldval, u32 newval)
 94{
 95	unsigned long flags;
 96	int ret;
 97	u32 prev = 0;
 98
 99	local_irq_save(flags);
100
101	ret = get_user(prev, uaddr);
102	if (!ret && oldval == prev)
103		ret = put_user(newval, uaddr);
104
105	local_irq_restore(flags);
106
107	*uval = prev;
108	return ret;
109}
110
111#endif /* __ASM_SH_FUTEX_IRQ_H */
v4.6
  1#ifndef __ASM_SH_FUTEX_IRQ_H
  2#define __ASM_SH_FUTEX_IRQ_H
  3
 
  4
  5static inline int atomic_futex_op_xchg_set(int oparg, u32 __user *uaddr,
  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
 22static inline int atomic_futex_op_xchg_add(int oparg, u32 __user *uaddr,
 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
 39static inline int atomic_futex_op_xchg_or(int oparg, u32 __user *uaddr,
 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
 56static inline int atomic_futex_op_xchg_and(int oparg, u32 __user *uaddr,
 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
 73static inline int atomic_futex_op_xchg_xor(int oparg, u32 __user *uaddr,
 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
 90static inline int atomic_futex_op_cmpxchg_inatomic(u32 *uval,
 91						   u32 __user *uaddr,
 92						   u32 oldval, u32 newval)
 93{
 94	unsigned long flags;
 95	int ret;
 96	u32 prev = 0;
 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
106	*uval = prev;
107	return ret;
108}
109
110#endif /* __ASM_SH_FUTEX_IRQ_H */