mirror of
https://github.com/AetherDroid/android_kernel_samsung_on5xelte.git
synced 2025-11-02 00:55:37 +01:00
Fixed MTP to work with TWRP
This commit is contained in:
commit
f6dfaef42e
50820 changed files with 20846062 additions and 0 deletions
110
arch/sh/include/asm/futex-irq.h
Normal file
110
arch/sh/include/asm/futex-irq.h
Normal file
|
|
@ -0,0 +1,110 @@
|
|||
#ifndef __ASM_SH_FUTEX_IRQ_H
|
||||
#define __ASM_SH_FUTEX_IRQ_H
|
||||
|
||||
|
||||
static inline int atomic_futex_op_xchg_set(int oparg, u32 __user *uaddr,
|
||||
int *oldval)
|
||||
{
|
||||
unsigned long flags;
|
||||
int ret;
|
||||
|
||||
local_irq_save(flags);
|
||||
|
||||
ret = get_user(*oldval, uaddr);
|
||||
if (!ret)
|
||||
ret = put_user(oparg, uaddr);
|
||||
|
||||
local_irq_restore(flags);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static inline int atomic_futex_op_xchg_add(int oparg, u32 __user *uaddr,
|
||||
int *oldval)
|
||||
{
|
||||
unsigned long flags;
|
||||
int ret;
|
||||
|
||||
local_irq_save(flags);
|
||||
|
||||
ret = get_user(*oldval, uaddr);
|
||||
if (!ret)
|
||||
ret = put_user(*oldval + oparg, uaddr);
|
||||
|
||||
local_irq_restore(flags);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static inline int atomic_futex_op_xchg_or(int oparg, u32 __user *uaddr,
|
||||
int *oldval)
|
||||
{
|
||||
unsigned long flags;
|
||||
int ret;
|
||||
|
||||
local_irq_save(flags);
|
||||
|
||||
ret = get_user(*oldval, uaddr);
|
||||
if (!ret)
|
||||
ret = put_user(*oldval | oparg, uaddr);
|
||||
|
||||
local_irq_restore(flags);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static inline int atomic_futex_op_xchg_and(int oparg, u32 __user *uaddr,
|
||||
int *oldval)
|
||||
{
|
||||
unsigned long flags;
|
||||
int ret;
|
||||
|
||||
local_irq_save(flags);
|
||||
|
||||
ret = get_user(*oldval, uaddr);
|
||||
if (!ret)
|
||||
ret = put_user(*oldval & oparg, uaddr);
|
||||
|
||||
local_irq_restore(flags);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static inline int atomic_futex_op_xchg_xor(int oparg, u32 __user *uaddr,
|
||||
int *oldval)
|
||||
{
|
||||
unsigned long flags;
|
||||
int ret;
|
||||
|
||||
local_irq_save(flags);
|
||||
|
||||
ret = get_user(*oldval, uaddr);
|
||||
if (!ret)
|
||||
ret = put_user(*oldval ^ oparg, uaddr);
|
||||
|
||||
local_irq_restore(flags);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static inline int atomic_futex_op_cmpxchg_inatomic(u32 *uval,
|
||||
u32 __user *uaddr,
|
||||
u32 oldval, u32 newval)
|
||||
{
|
||||
unsigned long flags;
|
||||
int ret;
|
||||
u32 prev = 0;
|
||||
|
||||
local_irq_save(flags);
|
||||
|
||||
ret = get_user(prev, uaddr);
|
||||
if (!ret && oldval == prev)
|
||||
ret = put_user(newval, uaddr);
|
||||
|
||||
local_irq_restore(flags);
|
||||
|
||||
*uval = prev;
|
||||
return ret;
|
||||
}
|
||||
|
||||
#endif /* __ASM_SH_FUTEX_IRQ_H */
|
||||
Loading…
Add table
Add a link
Reference in a new issue