summaryrefslogtreecommitdiffstats
path: root/arch/mips/include/asm/uaccess.h
diff options
context:
space:
mode:
authorMarkos Chandras <markos.chandras@imgtec.com>2013-12-17 15:42:23 +0100
committerRalf Baechle <ralf@linux-mips.org>2014-03-26 23:09:15 +0100
commitec56b1d4615ab0b07b29ca6a45543484cfd5e463 (patch)
tree2463339f885d5b4f5eb7631fc9d6e8c076f87e18 /arch/mips/include/asm/uaccess.h
parentMIPS: asm: uaccess: Add instruction argument to __{put,get}_user_asm (diff)
downloadlinux-ec56b1d4615ab0b07b29ca6a45543484cfd5e463.tar.xz
linux-ec56b1d4615ab0b07b29ca6a45543484cfd5e463.zip
MIPS: asm: uaccess: Move duplicated code to common function
Similar to __get_user_* functions, move common code to __put_user_*_common so it can be shared among similar users. Signed-off-by: Markos Chandras <markos.chandras@imgtec.com>
Diffstat (limited to 'arch/mips/include/asm/uaccess.h')
-rw-r--r--arch/mips/include/asm/uaccess.h61
1 files changed, 29 insertions, 32 deletions
diff --git a/arch/mips/include/asm/uaccess.h b/arch/mips/include/asm/uaccess.h
index 5ba393392ce3..0df57e783960 100644
--- a/arch/mips/include/asm/uaccess.h
+++ b/arch/mips/include/asm/uaccess.h
@@ -326,13 +326,8 @@ do { \
#define __PUT_USER_DW(insn, ptr) __put_user_asm("sd", ptr)
#endif
-#define __put_user_nocheck(x, ptr, size) \
-({ \
- __typeof__(*(ptr)) __pu_val; \
- int __pu_err = 0; \
- \
- __chk_user_ptr(ptr); \
- __pu_val = (x); \
+#define __put_user_common(ptr, size) \
+do { \
switch (size) { \
case 1: __put_user_asm("sb", ptr); break; \
case 2: __put_user_asm("sh", ptr); break; \
@@ -340,6 +335,16 @@ do { \
case 8: __PUT_USER_DW("sw", ptr); break; \
default: __put_user_unknown(); break; \
} \
+} while (0)
+
+#define __put_user_nocheck(x, ptr, size) \
+({ \
+ __typeof__(*(ptr)) __pu_val; \
+ int __pu_err = 0; \
+ \
+ __chk_user_ptr(ptr); \
+ __pu_val = (x); \
+ __put_user_common(ptr, size); \
__pu_err; \
})
@@ -350,15 +355,9 @@ do { \
int __pu_err = -EFAULT; \
\
might_fault(); \
- if (likely(access_ok(VERIFY_WRITE, __pu_addr, size))) { \
- switch (size) { \
- case 1: __put_user_asm("sb", __pu_addr); break; \
- case 2: __put_user_asm("sh", __pu_addr); break; \
- case 4: __put_user_asm("sw", __pu_addr); break; \
- case 8: __PUT_USER_DW("sw", __pu_addr); break; \
- default: __put_user_unknown(); break; \
- } \
- } \
+ if (likely(access_ok(VERIFY_WRITE, __pu_addr, size))) \
+ __put_user_common(__pu_addr, size); \
+ \
__pu_err; \
})
@@ -594,19 +593,23 @@ do { \
#define __PUT_USER_UNALIGNED_DW(ptr) __put_user_unaligned_asm("usd", ptr)
#endif
-#define __put_user_unaligned_nocheck(x,ptr,size) \
-({ \
- __typeof__(*(ptr)) __pu_val; \
- int __pu_err = 0; \
- \
- __pu_val = (x); \
+#define __put_user_unaligned_common(ptr, size) \
+do { \
switch (size) { \
case 1: __put_user_asm("sb", ptr); break; \
case 2: __put_user_unaligned_asm("ush", ptr); break; \
case 4: __put_user_unaligned_asm("usw", ptr); break; \
case 8: __PUT_USER_UNALIGNED_DW(ptr); break; \
default: __put_user_unaligned_unknown(); break; \
- } \
+} while (0)
+
+#define __put_user_unaligned_nocheck(x,ptr,size) \
+({ \
+ __typeof__(*(ptr)) __pu_val; \
+ int __pu_err = 0; \
+ \
+ __pu_val = (x); \
+ __put_user_unaligned_common(ptr, size); \
__pu_err; \
})
@@ -616,15 +619,9 @@ do { \
__typeof__(*(ptr)) __pu_val = (x); \
int __pu_err = -EFAULT; \
\
- if (likely(access_ok(VERIFY_WRITE, __pu_addr, size))) { \
- switch (size) { \
- case 1: __put_user_asm("sb", __pu_addr); break; \
- case 2: __put_user_unaligned_asm("ush", __pu_addr); break; \
- case 4: __put_user_unaligned_asm("usw", __pu_addr); break; \
- case 8: __PUT_USER_UNALGINED_DW(__pu_addr); break; \
- default: __put_user_unaligned_unknown(); break; \
- } \
- } \
+ if (likely(access_ok(VERIFY_WRITE, __pu_addr, size))) \
+ __put_user_unaligned_common(__pu_addr, size); \
+ \
__pu_err; \
})