18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 28c2ecf20Sopenharmony_ci#ifndef __ASM_SH_FUTEX_IRQ_H 38c2ecf20Sopenharmony_ci#define __ASM_SH_FUTEX_IRQ_H 48c2ecf20Sopenharmony_ci 58c2ecf20Sopenharmony_cistatic inline int atomic_futex_op_cmpxchg_inatomic(u32 *uval, 68c2ecf20Sopenharmony_ci u32 __user *uaddr, 78c2ecf20Sopenharmony_ci u32 oldval, u32 newval) 88c2ecf20Sopenharmony_ci{ 98c2ecf20Sopenharmony_ci unsigned long flags; 108c2ecf20Sopenharmony_ci int ret; 118c2ecf20Sopenharmony_ci u32 prev = 0; 128c2ecf20Sopenharmony_ci 138c2ecf20Sopenharmony_ci local_irq_save(flags); 148c2ecf20Sopenharmony_ci 158c2ecf20Sopenharmony_ci ret = get_user(prev, uaddr); 168c2ecf20Sopenharmony_ci if (!ret && oldval == prev) 178c2ecf20Sopenharmony_ci ret = put_user(newval, uaddr); 188c2ecf20Sopenharmony_ci 198c2ecf20Sopenharmony_ci local_irq_restore(flags); 208c2ecf20Sopenharmony_ci 218c2ecf20Sopenharmony_ci *uval = prev; 228c2ecf20Sopenharmony_ci return ret; 238c2ecf20Sopenharmony_ci} 248c2ecf20Sopenharmony_ci 258c2ecf20Sopenharmony_ci#endif /* __ASM_SH_FUTEX_IRQ_H */ 26