From: Vineet Gupta <[email protected]>

Signed-off-by: Vineet Gupta <[email protected]>
---
 arch/arc/include/asm/uaccess.h |   51 ++++++++++++++++++++++++++++++++++++++++
 1 files changed, 51 insertions(+), 0 deletions(-)

diff --git a/arch/arc/include/asm/uaccess.h b/arch/arc/include/asm/uaccess.h
index 503c98d..d9cbae4 100644
--- a/arch/arc/include/asm/uaccess.h
+++ b/arch/arc/include/asm/uaccess.h
@@ -35,6 +35,57 @@
 #define __access_ok(addr, sz)  (unlikely(__kernel_ok) || \
                                 likely(__user_ok((addr), (sz))))
 
+/*********** Single byte/s-word/word copies ******************/
+
+#define __get_user_fn(sz, u, k)                                        \
+({                                                             \
+       long __ret = 0; /* success by default */        \
+       switch (sz) {                                           \
+       case 1: __arc_get_user_one(*(k), u, "ldb", __ret); break;       \
+       case 2: __arc_get_user_one(*(k), u, "ldw", __ret); break;       \
+       case 4: __arc_get_user_one(*(k), u, "ld", __ret);  break;       \
+       case 8: __arc_get_user_one_64(*(k), u, __ret);     break;       \
+       }                                                       \
+       __ret;                                                  \
+})
+
+#define __arc_get_user_one(dst, src, op, ret)  \
+       __asm__ __volatile__(                   \
+       "1:     "op"    %1,[%2]\n"              \
+       "2:     ;nop\n"                         \
+       "       .section .fixup, \"ax\"\n"      \
+       "       .align 4\n"                     \
+       "3:     mov %0, %3\n"                   \
+       "       j   2b\n"                       \
+       "       .previous\n"                    \
+       "       .section __ex_table, \"a\"\n"   \
+       "       .align 4\n"                     \
+       "       .word 1b,3b\n"                  \
+       "       .previous\n"                    \
+                                               \
+       : "+r" (ret), "=r" (dst)                \
+       : "r" (src), "i" (-EFAULT))
+
+#define __arc_get_user_one_64(dst, src, ret)   \
+       __asm__ __volatile__(                   \
+       "1:     ld   %1,[%2]\n"                 \
+       "4:     ld  %R1,[%2, 4]\n"              \
+       "2:     ;nop\n"                         \
+       "       .section .fixup, \"ax\"\n"      \
+       "       .align 4\n"                     \
+       "3:     mov %0, %3\n"                   \
+       "       j   2b\n"                       \
+       "       .previous\n"                    \
+       "       .section __ex_table, \"a\"\n"   \
+       "       .align 4\n"                     \
+       "       .word 1b,3b\n"                  \
+       "       .word 4b,3b\n"                  \
+       "       .previous\n"                    \
+                                               \
+       : "+r" (ret), "=r" (dst)                \
+       : "r" (src), "i" (-EFAULT))
+
+
 static inline unsigned long
 __arc_copy_from_user(void *to, const void __user *from, unsigned long n)
 {
-- 
1.7.4.1

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to