These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / arch / s390 / include / asm / cmpxchg.h
index 4eadec4..24ea694 100644 (file)
@@ -32,9 +32,7 @@
        __old;                                                          \
 })
 
-#define __HAVE_ARCH_CMPXCHG
-
-#define __cmpxchg_double_op(p1, p2, o1, o2, n1, n2, insn)              \
+#define __cmpxchg_double(p1, p2, o1, o2, n1, n2)                       \
 ({                                                                     \
        register __typeof__(*(p1)) __old1 asm("2") = (o1);              \
        register __typeof__(*(p2)) __old2 asm("3") = (o2);              \
@@ -42,7 +40,7 @@
        register __typeof__(*(p2)) __new2 asm("5") = (n2);              \
        int cc;                                                         \
        asm volatile(                                                   \
-                       insn   " %[old],%[new],%[ptr]\n"                \
+               "       cdsg    %[old],%[new],%[ptr]\n"                 \
                "       ipm     %[cc]\n"                                \
                "       srl     %[cc],28"                               \
                : [cc] "=d" (cc), [old] "+d" (__old1), "+d" (__old2)    \
        !cc;                                                            \
 })
 
-#define __cmpxchg_double_4(p1, p2, o1, o2, n1, n2) \
-       __cmpxchg_double_op(p1, p2, o1, o2, n1, n2, "cds")
-
-#define __cmpxchg_double_8(p1, p2, o1, o2, n1, n2) \
-       __cmpxchg_double_op(p1, p2, o1, o2, n1, n2, "cdsg")
-
-extern void __cmpxchg_double_called_with_bad_pointer(void);
-
-#define __cmpxchg_double(p1, p2, o1, o2, n1, n2)                       \
-({                                                                     \
-       int __ret;                                                      \
-       switch (sizeof(*(p1))) {                                        \
-       case 4:                                                         \
-               __ret = __cmpxchg_double_4(p1, p2, o1, o2, n1, n2);     \
-               break;                                                  \
-       case 8:                                                         \
-               __ret = __cmpxchg_double_8(p1, p2, o1, o2, n1, n2);     \
-               break;                                                  \
-       default:                                                        \
-               __cmpxchg_double_called_with_bad_pointer();             \
-       }                                                               \
-       __ret;                                                          \
-})
-
 #define cmpxchg_double(p1, p2, o1, o2, n1, n2)                         \
 ({                                                                     \
        __typeof__(p1) __p1 = (p1);                                     \
@@ -83,7 +57,7 @@ extern void __cmpxchg_double_called_with_bad_pointer(void);
        BUILD_BUG_ON(sizeof(*(p1)) != sizeof(long));                    \
        BUILD_BUG_ON(sizeof(*(p2)) != sizeof(long));                    \
        VM_BUG_ON((unsigned long)((__p1) + 1) != (unsigned long)(__p2));\
-       __cmpxchg_double_8(__p1, __p2, o1, o2, n1, n2);                 \
+       __cmpxchg_double(__p1, __p2, o1, o2, n1, n2);                   \
 })
 
 #define system_has_cmpxchg_double()    1