#endif /* CONFIG_64BIT */
 
-/*
- * atomic*_return operations are serializing but not the non-*_return
- * versions.
- */
-#define smp_mb__before_atomic_dec()    smp_mb__before_llsc()
-#define smp_mb__after_atomic_dec()     smp_llsc_mb()
-#define smp_mb__before_atomic_inc()    smp_mb__before_llsc()
-#define smp_mb__after_atomic_inc()     smp_llsc_mb()
-
 #endif /* _ASM_ATOMIC_H */
 
 #define __EXT          "dext    "
 #endif
 
-/*
- * clear_bit() doesn't provide any barrier for the compiler.
- */
-#define smp_mb__before_clear_bit()     smp_mb__before_llsc()
-#define smp_mb__after_clear_bit()      smp_llsc_mb()
-
-
 /*
  * These are the "slower" versions of the functions and are in bitops.c.
  * These functions call raw_local_irq_{save,restore}().
  *
  * clear_bit() is atomic and may not be reordered.  However, it does
  * not contain a memory barrier, so if it is used for locking purposes,
- * you should call smp_mb__before_clear_bit() and/or smp_mb__after_clear_bit()
+ * you should call smp_mb__before_atomic() and/or smp_mb__after_atomic()
  * in order to ensure changes are visible on other processors.
  */
 static inline void clear_bit(unsigned long nr, volatile unsigned long *addr)
  */
 static inline void clear_bit_unlock(unsigned long nr, volatile unsigned long *addr)
 {
-       smp_mb__before_clear_bit();
+       smp_mb__before_atomic();
        clear_bit(nr, addr);
 }
 
 
 
 void free_irqno(unsigned int irq)
 {
-       smp_mb__before_clear_bit();
+       smp_mb__before_atomic();
        clear_bit(irq, irq_map);
-       smp_mb__after_clear_bit();
+       smp_mb__after_atomic();
 }
 
 /*