diff options
author | Markos Chandras <markos.chandras@imgtec.com> | 2013-12-17 15:42:23 +0100 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2014-03-26 23:09:15 +0100 |
commit | ec56b1d4615ab0b07b29ca6a45543484cfd5e463 (patch) | |
tree | 2463339f885d5b4f5eb7631fc9d6e8c076f87e18 /arch/mips/include/asm/uaccess.h | |
parent | MIPS: asm: uaccess: Add instruction argument to __{put,get}_user_asm (diff) | |
download | linux-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.h | 61 |
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; \ }) |