summaryrefslogtreecommitdiffstats
path: root/include/asm-x86_64/uaccess.h
diff options
context:
space:
mode:
authorAndi Kleen <ak@suse.de>2007-02-13 13:26:19 +0100
committerAndi Kleen <andi@basil.nowhere.org>2007-02-13 13:26:19 +0100
commit0812a579c92fefa57506821fa08e90f47cb6dbdd (patch)
tree53607d77021e5b9f5adf60f2d0bfbdd551f63c8e /include/asm-x86_64/uaccess.h
parentee55c0be30429d7c3e61fa26c7f7e323c80e14f0 (diff)
[PATCH] x86-64: Add __copy_from_user_nocache
This does user copies in fs write() into the page cache with write combining. This pushes the destination out of the CPU's cache, but allows higher bandwidth in some case. The theory is that the page cache data is usually not touched by the CPU again and it's better to not pollute the cache with it. Also it is a little faster. Signed-off-by: Andi Kleen <ak@suse.de>
Diffstat (limited to 'include/asm-x86_64/uaccess.h')
-rw-r--r--include/asm-x86_64/uaccess.h14
1 files changed, 14 insertions, 0 deletions
diff --git a/include/asm-x86_64/uaccess.h b/include/asm-x86_64/uaccess.h
index 8079e29c14f..1981f70fcad 100644
--- a/include/asm-x86_64/uaccess.h
+++ b/include/asm-x86_64/uaccess.h
@@ -367,4 +367,18 @@ __copy_to_user_inatomic(void __user *dst, const void *src, unsigned size)
return copy_user_generic((__force void *)dst, src, size);
}
+#define ARCH_HAS_NOCACHE_UACCESS 1
+extern long __copy_user_nocache(void *dst, const void __user *src, unsigned size, int zerorest);
+
+static inline int __copy_from_user_nocache(void *dst, const void __user *src, unsigned size)
+{
+ might_sleep();
+ return __copy_user_nocache(dst, (__force void *)src, size, 1);
+}
+
+static inline int __copy_from_user_inatomic_nocache(void *dst, const void __user *src, unsigned size)
+{
+ return __copy_user_nocache(dst, (__force void *)src, size, 0);
+}
+
#endif /* __X86_64_UACCESS_H */