diff options
Diffstat (limited to 'arch/sh/include/asm/atomic-irq.h')
| -rw-r--r-- | arch/sh/include/asm/atomic-irq.h | 42 |
1 files changed, 22 insertions, 20 deletions
diff --git a/arch/sh/include/asm/atomic-irq.h b/arch/sh/include/asm/atomic-irq.h index 74f7943cff6..9f7c56609e5 100644 --- a/arch/sh/include/asm/atomic-irq.h +++ b/arch/sh/include/asm/atomic-irq.h @@ -1,6 +1,8 @@ #ifndef __ASM_SH_ATOMIC_IRQ_H #define __ASM_SH_ATOMIC_IRQ_H +#include <linux/irqflags.h> + /* * To get proper branch prediction for the main line, we must branch * forward to code at the end of this object's .text section, then @@ -10,29 +12,29 @@ static inline void atomic_add(int i, atomic_t *v) { unsigned long flags; - local_irq_save(flags); - *(long *)v += i; - local_irq_restore(flags); + raw_local_irq_save(flags); + v->counter += i; + raw_local_irq_restore(flags); } static inline void atomic_sub(int i, atomic_t *v) { unsigned long flags; - local_irq_save(flags); - *(long *)v -= i; - local_irq_restore(flags); + raw_local_irq_save(flags); + v->counter -= i; + raw_local_irq_restore(flags); } static inline int atomic_add_return(int i, atomic_t *v) { unsigned long temp, flags; - local_irq_save(flags); - temp = *(long *)v; + raw_local_irq_save(flags); + temp = v->counter; temp += i; - *(long *)v = temp; - local_irq_restore(flags); + v->counter = temp; + raw_local_irq_restore(flags); return temp; } @@ -41,11 +43,11 @@ static inline int atomic_sub_return(int i, atomic_t *v) { unsigned long temp, flags; - local_irq_save(flags); - temp = *(long *)v; + raw_local_irq_save(flags); + temp = v->counter; temp -= i; - *(long *)v = temp; - local_irq_restore(flags); + v->counter = temp; + raw_local_irq_restore(flags); return temp; } @@ -54,18 +56,18 @@ static inline void atomic_clear_mask(unsigned int mask, atomic_t *v) { unsigned long flags; - local_irq_save(flags); - *(long *)v &= ~mask; - local_irq_restore(flags); + raw_local_irq_save(flags); + v->counter &= ~mask; + raw_local_irq_restore(flags); } static inline void atomic_set_mask(unsigned int mask, atomic_t *v) { unsigned long flags; - local_irq_save(flags); - *(long *)v |= mask; - local_irq_restore(flags); + raw_local_irq_save(flags); + v->counter |= mask; + raw_local_irq_restore(flags); } #endif /* __ASM_SH_ATOMIC_IRQ_H */ |
