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>
This commit is contained in:
Markos Chandras 2013-12-17 14:42:23 +00:00 committed by Ralf Baechle
parent d84869a19f
commit ec56b1d461
1 changed files with 29 additions and 32 deletions

View File

@ -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 { \
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 { \
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 { \
#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 { \
__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; \
}) })