1#ifndef __ASM_SH_CMPXCHG_IRQ_H 2#define __ASM_SH_CMPXCHG_IRQ_H 3 4static inline unsigned long xchg_u32(volatile u32 *m, unsigned long val) 5{ 6 unsigned long flags, retval; 7 8 local_irq_save(flags); 9 retval = *m; 10 *m = val; 11 local_irq_restore(flags); 12 return retval; 13} 14 15static inline unsigned long xchg_u8(volatile u8 *m, unsigned long val) 16{ 17 unsigned long flags, retval; 18 19 local_irq_save(flags); 20 retval = *m; 21 *m = val & 0xff; 22 local_irq_restore(flags); 23 return retval; 24} 25 26static inline unsigned long __cmpxchg_u32(volatile int *m, unsigned long old, 27 unsigned long new) 28{ 29 __u32 retval; 30 unsigned long flags; 31 32 local_irq_save(flags); 33 retval = *m; 34 if (retval == old) 35 *m = new; 36 local_irq_restore(flags); /* implies memory barrier */ 37 return retval; 38} 39 40#endif /* __ASM_SH_CMPXCHG_IRQ_H */ 41