Merge master.kernel.org:/home/rmk/linux-2.6-arm
[powerpc.git] / include / asm-s390 / uaccess.h
index 38a5cf8..10a619d 100644 (file)
@@ -200,21 +200,37 @@ extern int __put_user_bad(void) __attribute__((noreturn));
 
 #define __get_user(x, ptr)                                     \
 ({                                                             \
-       __typeof__(*(ptr)) __x;                                 \
        int __gu_err;                                           \
         __chk_user_ptr(ptr);                                    \
        switch (sizeof(*(ptr))) {                               \
-       case 1:                                                 \
-       case 2:                                                 \
-       case 4:                                                 \
-       case 8:                                                 \
+       case 1: {                                               \
+               unsigned char __x;                              \
+               __get_user_asm(__x, ptr, __gu_err);             \
+               (x) = (__typeof__(*(ptr))) __x;                 \
+               break;                                          \
+       };                                                      \
+       case 2: {                                               \
+               unsigned short __x;                             \
+               __get_user_asm(__x, ptr, __gu_err);             \
+               (x) = (__typeof__(*(ptr))) __x;                 \
+               break;                                          \
+       };                                                      \
+       case 4: {                                               \
+               unsigned int __x;                               \
+               __get_user_asm(__x, ptr, __gu_err);             \
+               (x) = (__typeof__(*(ptr))) __x;                 \
+               break;                                          \
+       };                                                      \
+       case 8: {                                               \
+               unsigned long long __x;                         \
                __get_user_asm(__x, ptr, __gu_err);             \
+               (x) = (__typeof__(*(ptr))) __x;                 \
                break;                                          \
+       };                                                      \
        default:                                                \
                __get_user_bad();                               \
                break;                                          \
        }                                                       \
-       (x) = __x;                                              \
        __gu_err;                                               \
 })