|
@@ -47,69 +47,6 @@ static inline int __access_ok(unsigned long addr, unsigned long size)
|
|
|
}
|
|
|
#endif
|
|
|
|
|
|
-/*
|
|
|
- * architectures with an MMU should override these two
|
|
|
- */
|
|
|
-#ifndef __copy_from_user
|
|
|
-static inline __must_check long __copy_from_user(void *to,
|
|
|
- const void __user * from, unsigned long n)
|
|
|
-{
|
|
|
- if (__builtin_constant_p(n)) {
|
|
|
- switch(n) {
|
|
|
- case 1:
|
|
|
- *(u8 *)to = *(u8 __force *)from;
|
|
|
- return 0;
|
|
|
- case 2:
|
|
|
- *(u16 *)to = *(u16 __force *)from;
|
|
|
- return 0;
|
|
|
- case 4:
|
|
|
- *(u32 *)to = *(u32 __force *)from;
|
|
|
- return 0;
|
|
|
-#ifdef CONFIG_64BIT
|
|
|
- case 8:
|
|
|
- *(u64 *)to = *(u64 __force *)from;
|
|
|
- return 0;
|
|
|
-#endif
|
|
|
- default:
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- memcpy(to, (const void __force *)from, n);
|
|
|
- return 0;
|
|
|
-}
|
|
|
-#endif
|
|
|
-
|
|
|
-#ifndef __copy_to_user
|
|
|
-static inline __must_check long __copy_to_user(void __user *to,
|
|
|
- const void *from, unsigned long n)
|
|
|
-{
|
|
|
- if (__builtin_constant_p(n)) {
|
|
|
- switch(n) {
|
|
|
- case 1:
|
|
|
- *(u8 __force *)to = *(u8 *)from;
|
|
|
- return 0;
|
|
|
- case 2:
|
|
|
- *(u16 __force *)to = *(u16 *)from;
|
|
|
- return 0;
|
|
|
- case 4:
|
|
|
- *(u32 __force *)to = *(u32 *)from;
|
|
|
- return 0;
|
|
|
-#ifdef CONFIG_64BIT
|
|
|
- case 8:
|
|
|
- *(u64 __force *)to = *(u64 *)from;
|
|
|
- return 0;
|
|
|
-#endif
|
|
|
- default:
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- memcpy((void __force *)to, from, n);
|
|
|
- return 0;
|
|
|
-}
|
|
|
-#endif
|
|
|
-
|
|
|
/*
|
|
|
* These are the main single-value transfer routines. They automatically
|
|
|
* use the right size if we just have the right pointer type.
|