patch-2.4.10 linux/include/asm-i386/uaccess.h
Next file: linux/include/asm-i386/xor.h
Previous file: linux/include/asm-i386/tlb.h
Back to the patch index
Back to the overall index
- Lines: 56
- Date:
Sun Sep 23 10:31:06 2001
- Orig file:
v2.4.9/linux/include/asm-i386/uaccess.h
- Orig date:
Sun Aug 12 13:28:00 2001
diff -u --recursive --new-file v2.4.9/linux/include/asm-i386/uaccess.h linux/include/asm-i386/uaccess.h
@@ -6,6 +6,7 @@
*/
#include <linux/config.h>
#include <linux/sched.h>
+#include <linux/prefetch.h>
#include <asm/page.h>
#define VERIFY_READ 0
@@ -126,6 +127,7 @@
extern void __put_user_1(void);
extern void __put_user_2(void);
extern void __put_user_4(void);
+extern void __put_user_8(void);
extern void __put_user_bad(void);
@@ -154,6 +156,23 @@
__pu_err; \
})
+#define __put_user_u64(x, addr, err) \
+ __asm__ __volatile__( \
+ "1: movl %%eax,0(%2)\n" \
+ "2: movl %%edx,4(%2)\n" \
+ "3:\n" \
+ ".section .fixup,\"ax\"\n" \
+ "4: movl %3,%0\n" \
+ " jmp 3b\n" \
+ ".previous\n" \
+ ".section __ex_table,\"a\"\n" \
+ " .align 4\n" \
+ " .long 1b,4b\n" \
+ " .long 2b,4b\n" \
+ ".previous" \
+ : "=r"(err) \
+ : "A" (x), "r" (addr), "i"(-EFAULT), "0"(err))
+
#define __put_user_size(x,ptr,size,retval) \
do { \
retval = 0; \
@@ -161,6 +180,7 @@
case 1: __put_user_asm(x,ptr,retval,"b","b","iq"); break; \
case 2: __put_user_asm(x,ptr,retval,"w","w","ir"); break; \
case 4: __put_user_asm(x,ptr,retval,"l","","ir"); break; \
+ case 8: __put_user_u64(x,ptr,retval); break; \
default: __put_user_bad(); \
} \
} while (0)
@@ -526,6 +546,7 @@
static inline unsigned long
__constant_copy_to_user(void *to, const void *from, unsigned long n)
{
+ prefetch(from);
if (access_ok(VERIFY_WRITE, to, n))
__constant_copy_user(to,from,n);
return n;
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)