root/arch/sh/include/asm/cmpxchg-irq.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. xchg_u32
  2. xchg_u16
  3. xchg_u8
  4. __cmpxchg_u32

   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 #ifndef __ASM_SH_CMPXCHG_IRQ_H
   3 #define __ASM_SH_CMPXCHG_IRQ_H
   4 
   5 #include <linux/irqflags.h>
   6 
   7 static inline unsigned long xchg_u32(volatile u32 *m, unsigned long val)
   8 {
   9         unsigned long flags, retval;
  10 
  11         local_irq_save(flags);
  12         retval = *m;
  13         *m = val;
  14         local_irq_restore(flags);
  15         return retval;
  16 }
  17 
  18 static inline unsigned long xchg_u16(volatile u16 *m, unsigned long val)
  19 {
  20         unsigned long flags, retval;
  21 
  22         local_irq_save(flags);
  23         retval = *m;
  24         *m = val;
  25         local_irq_restore(flags);
  26         return retval;
  27 }
  28 
  29 static inline unsigned long xchg_u8(volatile u8 *m, unsigned long val)
  30 {
  31         unsigned long flags, retval;
  32 
  33         local_irq_save(flags);
  34         retval = *m;
  35         *m = val & 0xff;
  36         local_irq_restore(flags);
  37         return retval;
  38 }
  39 
  40 static inline unsigned long __cmpxchg_u32(volatile int *m, unsigned long old,
  41         unsigned long new)
  42 {
  43         __u32 retval;
  44         unsigned long flags;
  45 
  46         local_irq_save(flags);
  47         retval = *m;
  48         if (retval == old)
  49                 *m = new;
  50         local_irq_restore(flags);       /* implies memory barrier  */
  51         return retval;
  52 }
  53 
  54 #endif /* __ASM_SH_CMPXCHG_IRQ_H */

/* [<][>][^][v][top][bottom][index][help] */