Commit ec56b1d4 authored by Markos Chandras's avatar Markos Chandras Committed by Ralf Baechle

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: default avatarMarkos Chandras <markos.chandras@imgtec.com>
parent d84869a1
...@@ -326,13 +326,8 @@ do { \ ...@@ -326,13 +326,8 @@ do { \
#define __PUT_USER_DW(insn, ptr) __put_user_asm("sd", ptr) #define __PUT_USER_DW(insn, ptr) __put_user_asm("sd", ptr)
#endif #endif
#define __put_user_nocheck(x, ptr, size) \ #define __put_user_common(ptr, size) \
({ \ do { \
__typeof__(*(ptr)) __pu_val; \
int __pu_err = 0; \
\
__chk_user_ptr(ptr); \
__pu_val = (x); \
switch (size) { \ switch (size) { \
case 1: __put_user_asm("sb", ptr); break; \ case 1: __put_user_asm("sb", ptr); break; \
case 2: __put_user_asm("sh", ptr); break; \ case 2: __put_user_asm("sh", ptr); break; \
...@@ -340,6 +335,16 @@ do { \ ...@@ -340,6 +335,16 @@ do { \
case 8: __PUT_USER_DW("sw", ptr); break; \ case 8: __PUT_USER_DW("sw", ptr); break; \
default: __put_user_unknown(); 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; \ __pu_err; \
}) })
...@@ -350,15 +355,9 @@ do { \ ...@@ -350,15 +355,9 @@ do { \
int __pu_err = -EFAULT; \ int __pu_err = -EFAULT; \
\ \
might_fault(); \ might_fault(); \
if (likely(access_ok(VERIFY_WRITE, __pu_addr, size))) { \ if (likely(access_ok(VERIFY_WRITE, __pu_addr, size))) \
switch (size) { \ __put_user_common(__pu_addr, 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; \
} \
} \
__pu_err; \ __pu_err; \
}) })
...@@ -594,19 +593,23 @@ do { \ ...@@ -594,19 +593,23 @@ do { \
#define __PUT_USER_UNALIGNED_DW(ptr) __put_user_unaligned_asm("usd", ptr) #define __PUT_USER_UNALIGNED_DW(ptr) __put_user_unaligned_asm("usd", ptr)
#endif #endif
#define __put_user_unaligned_nocheck(x,ptr,size) \ #define __put_user_unaligned_common(ptr, size) \
({ \ do { \
__typeof__(*(ptr)) __pu_val; \
int __pu_err = 0; \
\
__pu_val = (x); \
switch (size) { \ switch (size) { \
case 1: __put_user_asm("sb", ptr); break; \ case 1: __put_user_asm("sb", ptr); break; \
case 2: __put_user_unaligned_asm("ush", ptr); break; \ case 2: __put_user_unaligned_asm("ush", ptr); break; \
case 4: __put_user_unaligned_asm("usw", ptr); break; \ case 4: __put_user_unaligned_asm("usw", ptr); break; \
case 8: __PUT_USER_UNALIGNED_DW(ptr); break; \ case 8: __PUT_USER_UNALIGNED_DW(ptr); break; \
default: __put_user_unaligned_unknown(); 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; \ __pu_err; \
}) })
...@@ -616,15 +619,9 @@ do { \ ...@@ -616,15 +619,9 @@ do { \
__typeof__(*(ptr)) __pu_val = (x); \ __typeof__(*(ptr)) __pu_val = (x); \
int __pu_err = -EFAULT; \ int __pu_err = -EFAULT; \
\ \
if (likely(access_ok(VERIFY_WRITE, __pu_addr, size))) { \ if (likely(access_ok(VERIFY_WRITE, __pu_addr, size))) \
switch (size) { \ __put_user_unaligned_common(__pu_addr, 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; \
} \
} \
__pu_err; \ __pu_err; \
}) })
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment