futex-irq.h 482 B

12345678910111213141516171819202122232425
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. #ifndef __ASM_SH_FUTEX_IRQ_H
  3. #define __ASM_SH_FUTEX_IRQ_H
  4. static inline int atomic_futex_op_cmpxchg_inatomic(u32 *uval,
  5. u32 __user *uaddr,
  6. u32 oldval, u32 newval)
  7. {
  8. unsigned long flags;
  9. int ret;
  10. u32 prev = 0;
  11. local_irq_save(flags);
  12. ret = get_user(prev, uaddr);
  13. if (!ret && oldval == prev)
  14. ret = put_user(newval, uaddr);
  15. local_irq_restore(flags);
  16. *uval = prev;
  17. return ret;
  18. }
  19. #endif /* __ASM_SH_FUTEX_IRQ_H */