X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=include%2Fasm-ppc%2Fuaccess.h;h=83c12a992cea728da1605d4ceccee71cf754b7f3;hb=6a77f38946aaee1cd85eeec6cf4229b204c15071;hp=10aeae03bd4a27569e752cc81e3959edb65988ff;hpb=87fc8d1bb10cd459024a742c6a10961fefcef18f;p=linux-2.6.git diff --git a/include/asm-ppc/uaccess.h b/include/asm-ppc/uaccess.h index 10aeae03b..83c12a992 100644 --- a/include/asm-ppc/uaccess.h +++ b/include/asm-ppc/uaccess.h @@ -180,7 +180,8 @@ do { \ #define __get_user_nocheck(x, ptr, size) \ ({ \ - long __gu_err, __gu_val; \ + long __gu_err; \ + unsigned long __gu_val; \ __chk_user_ptr(ptr); \ __get_user_size(__gu_val, (ptr), (size), __gu_err); \ (x) = (__typeof__(*(ptr)))__gu_val; \ @@ -199,7 +200,8 @@ do { \ #define __get_user_check(x, ptr, size) \ ({ \ - long __gu_err = -EFAULT, __gu_val = 0; \ + long __gu_err = -EFAULT; \ + unsigned long __gu_val = 0; \ const __typeof__(*(ptr)) __user *__gu_addr = (ptr); \ if (access_ok(VERIFY_READ, __gu_addr, (size))) \ __get_user_size(__gu_val, __gu_addr, (size), __gu_err); \ @@ -305,10 +307,10 @@ copy_from_user(void *to, const void __user *from, unsigned long n) unsigned long over; if (access_ok(VERIFY_READ, from, n)) - return __copy_tofrom_user((void __user *)to, from, n); + return __copy_tofrom_user((__force void __user *)to, from, n); if ((unsigned long)from < TASK_SIZE) { over = (unsigned long)from + n - TASK_SIZE; - return __copy_tofrom_user((void __user *)to, from, n - over) + over; + return __copy_tofrom_user((__force void __user *)to, from, n - over) + over; } return n; } @@ -319,18 +321,24 @@ copy_to_user(void __user *to, const void *from, unsigned long n) unsigned long over; if (access_ok(VERIFY_WRITE, to, n)) - return __copy_tofrom_user(to, (void __user *) from, n); + return __copy_tofrom_user(to, (__force void __user *) from, n); if ((unsigned long)to < TASK_SIZE) { over = (unsigned long)to + n - TASK_SIZE; - return __copy_tofrom_user(to, (void __user *) from, n - over) + over; + return __copy_tofrom_user(to, (__force void __user *) from, n - over) + over; } return n; } -#define __copy_from_user(to, from, size) \ - __copy_tofrom_user((void __user *)(to), (from), (size)) -#define __copy_to_user(to, from, size) \ - __copy_tofrom_user((to), (void __user *)(from), (size)) +static inline unsigned long __copy_from_user(void *to, const void __user *from, unsigned long size) +{ + return __copy_tofrom_user((__force void __user *)to, from, size); +} + +static inline unsigned long __copy_to_user(void __user *to, const void *from, unsigned long size) +{ + return __copy_tofrom_user(to, (__force void __user *)from, size); +} + #define __copy_to_user_inatomic __copy_to_user #define __copy_from_user_inatomic __copy_from_user