]> err.no Git - linux-2.6/blobdiff - include/asm-frv/atomic.h
[PATCH] mm: make __put_page internal
[linux-2.6] / include / asm-frv / atomic.h
index 9c9e9499cfd866b8699cecc8bfcabbbae9670566..5d9f84bfdcad3300ddccb8b031c86433b472648d 100644 (file)
@@ -220,9 +220,9 @@ extern unsigned long atomic_test_and_XOR_mask(unsigned long mask, volatile unsig
        switch (sizeof(__xg_orig)) {                                            \
        case 4:                                                                 \
                asm volatile(                                                   \
-                       "swap%I0 %2,%M0"                                        \
-                       : "+m"(*__xg_ptr), "=&r"(__xg_orig)                     \
-                       : "r"(x)                                                \
+                       "swap%I0 %M0,%1"                                        \
+                       : "+m"(*__xg_ptr), "=r"(__xg_orig)                      \
+                       : "1"(x)                                                \
                        : "memory"                                              \
                        );                                                      \
                break;                                                          \
@@ -328,6 +328,7 @@ extern uint32_t __cmpxchg_32(uint32_t *v, uint32_t test, uint32_t new);
 #endif
 
 #define atomic_cmpxchg(v, old, new) (cmpxchg(&((v)->counter), old, new))
+#define atomic_xchg(v, new) (xchg(&((v)->counter), new))
 
 #define atomic_add_unless(v, a, u)                             \
 ({                                                             \