diff --git a/include/asm-s390/smp.h b/include/asm-s390/smp.h
index 7bd666e535ae4adbc17c3be483d86698daa6d8e3..3c3b11d91c818e259fb239f9601f2b305ee0c7af 100644
--- a/include/asm-s390/smp.h
+++ b/include/asm-s390/smp.h
@@ -29,7 +29,7 @@ typedef struct
 } sigp_info;
 
 extern volatile unsigned long cpu_online_map;
-extern unsigned long cpu_possible_map;
+extern volatile unsigned long cpu_possible_map;
 
 #define NO_PROC_ID		0xFF		/* No processor magic marker */
 
diff --git a/include/asm-s390/unistd.h b/include/asm-s390/unistd.h
index 411fb89ad1c6e9fc38c97c0307dc64683983548f..a3ae2973b25a9105c8545444537b7973fecb04aa 100644
--- a/include/asm-s390/unistd.h
+++ b/include/asm-s390/unistd.h
@@ -258,11 +258,11 @@ do {                                                         \
         return (type) (res);                                 \
 } while (0)
 
-#define _svc_clobber "2", "cc", "memory"
+#define _svc_clobber "cc", "memory"
 
 #define _syscall0(type,name)                                 \
 type name(void) {                                            \
-        long __res;                                          \
+        register long __res asm("2");                        \
         __asm__ __volatile__ (                               \
                 "    svc %b1\n"                              \
                 "    lr  %0,2"                               \
@@ -275,13 +275,13 @@ type name(void) {                                            \
 #define _syscall1(type,name,type1,arg1)                      \
 type name(type1 arg1) {                                      \
         register type1 __arg1 asm("2") = arg1;               \
-        long __res;                                          \
+        register long __res asm("2");                        \
         __asm__ __volatile__ (                               \
                 "    svc %b1\n"                              \
                 "    lr  %0,2"                               \
                 : "=d" (__res)                               \
                 : "i" (__NR_##name),                         \
-                  "d" (__arg1)                               \
+                  "0" (__arg1)                               \
                 : _svc_clobber );                            \
         __syscall_return(type,__res);                        \
 }
@@ -290,13 +290,13 @@ type name(type1 arg1) {                                      \
 type name(type1 arg1, type2 arg2) {                          \
         register type1 __arg1 asm("2") = arg1;               \
         register type2 __arg2 asm("3") = arg2;               \
-        long __res;                                          \
+        register long __res asm("2");                        \
         __asm__ __volatile__ (                               \
                 "    svc %b1\n"                              \
                 "    lr  %0,2"                               \
                 : "=d" (__res)                               \
                 : "i" (__NR_##name),                         \
-                  "d" (__arg1),                              \
+                  "0" (__arg1),                              \
                   "d" (__arg2)                               \
                 : _svc_clobber );                            \
         __syscall_return(type,__res);                        \
@@ -307,13 +307,13 @@ type name(type1 arg1, type2 arg2, type3 arg3) {              \
         register type1 __arg1 asm("2") = arg1;               \
         register type2 __arg2 asm("3") = arg2;               \
         register type3 __arg3 asm("4") = arg3;               \
-        long __res;                                          \
+        register long __res asm("2");                        \
         __asm__ __volatile__ (                               \
                 "    svc %b1\n"                              \
                 "    lr  %0,2"                               \
                 : "=d" (__res)                               \
                 : "i" (__NR_##name),                         \
-                  "d" (__arg1),                              \
+                  "0" (__arg1),                              \
                   "d" (__arg2),                              \
                   "d" (__arg3)                               \
                 : _svc_clobber );                            \
@@ -327,13 +327,13 @@ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4) {  \
         register type2 __arg2 asm("3") = arg2;               \
         register type3 __arg3 asm("4") = arg3;               \
         register type4 __arg4 asm("5") = arg4;               \
-        long __res;                                          \
+        register long __res asm("2");                        \
         __asm__ __volatile__ (                               \
                 "    svc %b1\n"                              \
                 "    lr  %0,2"                               \
                 : "=d" (__res)                               \
                 : "i" (__NR_##name),                         \
-                  "d" (__arg1),                              \
+                  "0" (__arg1),                              \
                   "d" (__arg2),                              \
                   "d" (__arg3),                              \
                   "d" (__arg4)                               \
@@ -350,13 +350,13 @@ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4,    \
         register type3 __arg3 asm("4") = arg3;               \
         register type4 __arg4 asm("5") = arg4;               \
         register type5 __arg5 asm("6") = arg5;               \
-        long __res;                                          \
+        register long __res asm("2");                        \
         __asm__ __volatile__ (                               \
                 "    svc %b1\n"                              \
                 "    lr  %0,2"                               \
                 : "=d" (__res)                               \
                 : "i" (__NR_##name),                         \
-                  "d" (__arg1),                              \
+                  "0" (__arg1),                              \
                   "d" (__arg2),                              \
                   "d" (__arg3),                              \
                   "d" (__arg4),                              \
diff --git a/include/asm-s390x/unistd.h b/include/asm-s390x/unistd.h
index aea5cf0a97d787b2a34fcddf482efe0e8e5925ed..bc4663ee4c3ca419d59e29c2ac0ee0e32887f00d 100644
--- a/include/asm-s390x/unistd.h
+++ b/include/asm-s390x/unistd.h
@@ -225,11 +225,11 @@ do {                                                         \
         return (type) (res);                                 \
 } while (0)
 
-#define _svc_clobber "2", "cc", "memory"
+#define _svc_clobber "cc", "memory"
 
 #define _syscall0(type,name)                                 \
 type name(void) {                                            \
-        long __res;                                          \
+        register long __res asm("2");                        \
         __asm__ __volatile__ (                               \
                 "    svc %b1\n"                              \
                 "    lgr  %0,2"                              \
@@ -242,13 +242,13 @@ type name(void) {                                            \
 #define _syscall1(type,name,type1,arg1)                      \
 type name(type1 arg1) {                                      \
         register type1 __arg1 asm("2") = arg1;               \
-        long __res;                                          \
+        register long __res asm("2");                        \
         __asm__ __volatile__ (                               \
                 "    svc %b1\n"                              \
                 "    lgr  %0,2"                              \
                 : "=d" (__res)                               \
                 : "i" (__NR_##name),                         \
-                  "d" (__arg1)                               \
+                  "0" (__arg1)                               \
                 : _svc_clobber );                            \
         __syscall_return(type,__res);                        \
 }
@@ -257,13 +257,13 @@ type name(type1 arg1) {                                      \
 type name(type1 arg1, type2 arg2) {                          \
         register type1 __arg1 asm("2") = arg1;               \
         register type2 __arg2 asm("3") = arg2;               \
-        long __res;                                          \
+        register long __res asm("2");                        \
         __asm__ __volatile__ (                               \
                 "    svc %b1\n"                              \
                 "    lgr  %0,2"                              \
                 : "=d" (__res)                               \
                 : "i" (__NR_##name),                         \
-                  "d" (__arg1),                              \
+                  "0" (__arg1),                              \
                   "d" (__arg2)                               \
                 : _svc_clobber );                            \
         __syscall_return(type,__res);                        \
@@ -274,13 +274,13 @@ type name(type1 arg1, type2 arg2, type3 arg3) {              \
         register type1 __arg1 asm("2") = arg1;               \
         register type2 __arg2 asm("3") = arg2;               \
         register type3 __arg3 asm("4") = arg3;               \
-        long __res;                                          \
+        register long __res asm("2");                        \
         __asm__ __volatile__ (                               \
                 "    svc %b1\n"                              \
                 "    lgr  %0,2"                              \
                 : "=d" (__res)                               \
                 : "i" (__NR_##name),                         \
-                  "d" (__arg1),                              \
+                  "0" (__arg1),                              \
                   "d" (__arg2),                              \
                   "d" (__arg3)                               \
                 : _svc_clobber );                            \
@@ -294,13 +294,13 @@ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4) {  \
         register type2 __arg2 asm("3") = arg2;               \
         register type3 __arg3 asm("4") = arg3;               \
         register type4 __arg4 asm("5") = arg4;               \
-        long __res;                                          \
+        register long __res asm("2");                        \
         __asm__ __volatile__ (                               \
                 "    svc %b1\n"                              \
                 "    lgr  %0,2"                              \
                 : "=d" (__res)                               \
                 : "i" (__NR_##name),                         \
-                  "d" (__arg1),                              \
+                  "0" (__arg1),                              \
                   "d" (__arg2),                              \
                   "d" (__arg3),                              \
                   "d" (__arg4)                               \
@@ -317,13 +317,13 @@ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4,    \
         register type3 __arg3 asm("4") = arg3;               \
         register type4 __arg4 asm("5") = arg4;               \
         register type5 __arg5 asm("6") = arg5;               \
-        long __res;                                          \
+        register long __res asm("2");                        \
         __asm__ __volatile__ (                               \
                 "    svc %b1\n"                              \
                 "    lgr  %0,2"                              \
                 : "=d" (__res)                               \
                 : "i" (__NR_##name),                         \
-                  "d" (__arg1),                              \
+                  "0" (__arg1),                              \
                   "d" (__arg2),                              \
                   "d" (__arg3),                              \
                   "d" (__arg4),                              \