These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / arch / m32r / include / asm / atomic.h
index 31bb74a..ea35160 100644 (file)
@@ -28,7 +28,7 @@
  *
  * Atomically reads the value of @v.
  */
-#define atomic_read(v) ACCESS_ONCE((v)->counter)
+#define atomic_read(v) READ_ONCE((v)->counter)
 
 /**
  * atomic_set - set atomic variable
@@ -37,7 +37,7 @@
  *
  * Atomically sets the value of @v to @i.
  */
-#define atomic_set(v,i)        (((v)->counter) = (i))
+#define atomic_set(v,i)        WRITE_ONCE(((v)->counter), (i))
 
 #ifdef CONFIG_CHIP_M32700_TS1
 #define __ATOMIC_CLOBBER       , "r4"
@@ -94,6 +94,10 @@ static __inline__ int atomic_##op##_return(int i, atomic_t *v)               \
 ATOMIC_OPS(add)
 ATOMIC_OPS(sub)
 
+ATOMIC_OP(and)
+ATOMIC_OP(or)
+ATOMIC_OP(xor)
+
 #undef ATOMIC_OPS
 #undef ATOMIC_OP_RETURN
 #undef ATOMIC_OP
@@ -239,45 +243,4 @@ static __inline__ int __atomic_add_unless(atomic_t *v, int a, int u)
        return c;
 }
 
-
-static __inline__ void atomic_clear_mask(unsigned long  mask, atomic_t *addr)
-{
-       unsigned long flags;
-       unsigned long tmp;
-
-       local_irq_save(flags);
-       __asm__ __volatile__ (
-               "# atomic_clear_mask            \n\t"
-               DCACHE_CLEAR("%0", "r5", "%1")
-               M32R_LOCK" %0, @%1;             \n\t"
-               "and    %0, %2;                 \n\t"
-               M32R_UNLOCK" %0, @%1;           \n\t"
-               : "=&r" (tmp)
-               : "r" (addr), "r" (~mask)
-               : "memory"
-               __ATOMIC_CLOBBER
-       );
-       local_irq_restore(flags);
-}
-
-static __inline__ void atomic_set_mask(unsigned long  mask, atomic_t *addr)
-{
-       unsigned long flags;
-       unsigned long tmp;
-
-       local_irq_save(flags);
-       __asm__ __volatile__ (
-               "# atomic_set_mask              \n\t"
-               DCACHE_CLEAR("%0", "r5", "%1")
-               M32R_LOCK" %0, @%1;             \n\t"
-               "or     %0, %2;                 \n\t"
-               M32R_UNLOCK" %0, @%1;           \n\t"
-               : "=&r" (tmp)
-               : "r" (addr), "r" (mask)
-               : "memory"
-               __ATOMIC_CLOBBER
-       );
-       local_irq_restore(flags);
-}
-
 #endif /* _ASM_M32R_ATOMIC_H */