X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=include%2Fasm-sparc64%2Fuaccess.h;h=5690142f82de3774d56faceee2539229ee0e382a;hb=f7f1b0f1e2fbadeab12d24236000e778aa9b1ead;hp=e1ce87c86f0b02be4ca3e4d5614bbf8bfe45cf00;hpb=9213980e6a70d8473e0ffd4b39ab5b6caaba9ff5;p=linux-2.6.git diff --git a/include/asm-sparc64/uaccess.h b/include/asm-sparc64/uaccess.h index e1ce87c86..5690142f8 100644 --- a/include/asm-sparc64/uaccess.h +++ b/include/asm-sparc64/uaccess.h @@ -14,6 +14,7 @@ #include #include #include +#include #endif #ifndef __ASSEMBLY__ @@ -48,12 +49,18 @@ do { \ __asm__ __volatile__ ("wr %%g0, %0, %%asi" : : "r" ((val).seg)); \ } while(0) -#define __user_ok(addr,size) 1 -#define __kernel_ok (segment_eq(get_fs(), KERNEL_DS)) -#define __access_ok(addr,size) 1 -#define access_ok(type,addr,size) 1 +static inline int __access_ok(const void __user * addr, unsigned long size) +{ + return 1; +} + +static inline int access_ok(int type, const void __user * addr, unsigned long size) +{ + return 1; +} -static inline int verify_area(int type, const void __user * addr, unsigned long size) +/* this function will go away soon - use access_ok() instead */ +static inline int __deprecated verify_area(int type, const void __user * addr, unsigned long size) { return 0; } @@ -252,22 +259,58 @@ __asm__ __volatile__( \ extern int __get_user_bad(void); -extern unsigned long __copy_from_user(void *to, const void __user *from, - unsigned long size); +extern unsigned long __must_check ___copy_from_user(void *to, + const void __user *from, + unsigned long size); +extern unsigned long copy_from_user_fixup(void *to, const void __user *from, + unsigned long size); +static inline unsigned long __must_check +copy_from_user(void *to, const void __user *from, unsigned long size) +{ + unsigned long ret = ___copy_from_user(to, from, size); -extern unsigned long __copy_to_user(void __user *to, const void *from, - unsigned long size); + if (ret) + ret = copy_from_user_fixup(to, from, size); + return ret; +} +#define __copy_from_user copy_from_user + +extern unsigned long __must_check ___copy_to_user(void __user *to, + const void *from, + unsigned long size); +extern unsigned long copy_to_user_fixup(void __user *to, const void *from, + unsigned long size); +static inline unsigned long __must_check +copy_to_user(void __user *to, const void *from, unsigned long size) +{ + unsigned long ret = ___copy_to_user(to, from, size); -extern unsigned long __copy_in_user(void __user *to, const void __user *from, - unsigned long size); + if (ret) + ret = copy_to_user_fixup(to, from, size); + return ret; +} +#define __copy_to_user copy_to_user + +extern unsigned long __must_check ___copy_in_user(void __user *to, + const void __user *from, + unsigned long size); +extern unsigned long copy_in_user_fixup(void __user *to, void __user *from, + unsigned long size); +static inline unsigned long __must_check +copy_in_user(void __user *to, void __user *from, unsigned long size) +{ + unsigned long ret = ___copy_in_user(to, from, size); -#define copy_from_user __copy_from_user -#define copy_to_user __copy_to_user -#define copy_in_user __copy_in_user + if (ret) + ret = copy_in_user_fixup(to, from, size); + return ret; +} +#define __copy_in_user copy_in_user -extern unsigned long __bzero_noasi(void __user *, unsigned long); +extern unsigned long __must_check __bzero_noasi(void __user *, unsigned long); -static inline unsigned long __clear_user(void __user *addr, unsigned long size) +static inline unsigned long __must_check +__clear_user(void __user *addr, unsigned long size) { return __bzero_noasi(addr, size); @@ -275,7 +318,7 @@ static inline unsigned long __clear_user(void __user *addr, unsigned long size) #define clear_user __clear_user -extern long __strncpy_from_user(char *dest, const char __user *src, long count); +extern long __must_check __strncpy_from_user(char *dest, const char __user *src, long count); #define strncpy_from_user __strncpy_from_user @@ -284,6 +327,8 @@ extern long __strnlen_user(const char __user *, long len); #define strlen_user __strlen_user #define strnlen_user __strnlen_user +#define __copy_to_user_inatomic __copy_to_user +#define __copy_from_user_inatomic __copy_from_user #endif /* __ASSEMBLY__ */