/* Atomically perform op with v->counter and i */
 #define ATOMIC_OP(op)                                                  \
-static inline void atomic_##op(int i, atomic_t *v)                     \
+static inline void arch_atomic_##op(int i, atomic_t *v)                        \
 {                                                                      \
        int tmp;                                                        \
                                                                        \
 
 /* Atomically perform op with v->counter and i, return the result */
 #define ATOMIC_OP_RETURN(op)                                           \
-static inline int atomic_##op##_return(int i, atomic_t *v)             \
+static inline int arch_atomic_##op##_return(int i, atomic_t *v)                \
 {                                                                      \
        int tmp;                                                        \
                                                                        \
 
 /* Atomically perform op with v->counter and i, return orig v->counter */
 #define ATOMIC_FETCH_OP(op)                                            \
-static inline int atomic_fetch_##op(int i, atomic_t *v)                        \
+static inline int arch_atomic_fetch_##op(int i, atomic_t *v)           \
 {                                                                      \
        int tmp, old;                                                   \
                                                                        \
 ATOMIC_FETCH_OP(or)
 ATOMIC_FETCH_OP(xor)
 
+ATOMIC_OP(add)
+ATOMIC_OP(sub)
 ATOMIC_OP(and)
 ATOMIC_OP(or)
 ATOMIC_OP(xor)
 #undef ATOMIC_OP_RETURN
 #undef ATOMIC_OP
 
-#define atomic_add_return      atomic_add_return
-#define atomic_sub_return      atomic_sub_return
-#define atomic_fetch_add       atomic_fetch_add
-#define atomic_fetch_sub       atomic_fetch_sub
-#define atomic_fetch_and       atomic_fetch_and
-#define atomic_fetch_or                atomic_fetch_or
-#define atomic_fetch_xor       atomic_fetch_xor
-#define atomic_and     atomic_and
-#define atomic_or      atomic_or
-#define atomic_xor     atomic_xor
+#define arch_atomic_add_return arch_atomic_add_return
+#define arch_atomic_sub_return arch_atomic_sub_return
+#define arch_atomic_fetch_add  arch_atomic_fetch_add
+#define arch_atomic_fetch_sub  arch_atomic_fetch_sub
+#define arch_atomic_fetch_and  arch_atomic_fetch_and
+#define arch_atomic_fetch_or   arch_atomic_fetch_or
+#define arch_atomic_fetch_xor  arch_atomic_fetch_xor
+#define arch_atomic_add                arch_atomic_add
+#define arch_atomic_sub                arch_atomic_sub
+#define arch_atomic_and                arch_atomic_and
+#define arch_atomic_or         arch_atomic_or
+#define arch_atomic_xor                arch_atomic_xor
 
 /*
  * Atomically add a to v->counter as long as v is not already u.
  *
  * This is often used through atomic_inc_not_zero()
  */
-static inline int atomic_fetch_add_unless(atomic_t *v, int a, int u)
+static inline int arch_atomic_fetch_add_unless(atomic_t *v, int a, int u)
 {
        int old, tmp;
 
 
        return old;
 }
-#define atomic_fetch_add_unless        atomic_fetch_add_unless
+#define arch_atomic_fetch_add_unless   arch_atomic_fetch_add_unless
 
-#define atomic_read(v)                 READ_ONCE((v)->counter)
-#define atomic_set(v,i)                        WRITE_ONCE((v)->counter, (i))
+#define arch_atomic_read(v)            READ_ONCE((v)->counter)
+#define arch_atomic_set(v,i)           WRITE_ONCE((v)->counter, (i))
 
 #include <asm/cmpxchg.h>
 
-#define atomic_xchg(ptr, v)            (xchg(&(ptr)->counter, (v)))
-#define atomic_cmpxchg(v, old, new)    (cmpxchg(&((v)->counter), (old), (new)))
+#define arch_atomic_xchg(ptr, v)               (arch_xchg(&(ptr)->counter, (v)))
+#define arch_atomic_cmpxchg(v, old, new)       (arch_cmpxchg(&((v)->counter), (old), (new)))
 
 #endif /* __ASM_OPENRISC_ATOMIC_H */