Loading arch/microblaze/include/asm/uaccess.h +49 −51 Original line number Diff line number Diff line Loading @@ -197,16 +197,22 @@ extern long strnlen_user(const char *src, long count); * already performed before the finction (macro) is called. */ #define get_user(x, ptr) \ ({ \ access_ok(VERIFY_READ, (ptr), sizeof(*(ptr))) \ ? __get_user((x), (ptr)) : -EFAULT; \ }) #define put_user(x, ptr) \ #define __get_user_asm(insn, __gu_ptr, __gu_val, __gu_err) \ ({ \ access_ok(VERIFY_WRITE, (ptr), sizeof(*(ptr))) \ ? __put_user((x), (ptr)) : -EFAULT; \ __asm__ __volatile__ ( \ "1:" insn " %1, %2, r0;" \ " addk %0, r0, r0;" \ "2: " \ __FIXUP_SECTION \ "3: brid 2b; " \ " addik %0, r0, %3;" \ ".previous;" \ __EX_TABLE_SECTION \ ".word 1b,3b;" \ ".previous;" \ : "=&r"(__gu_err), "=r"(__gu_val) \ : "r"(__gu_ptr), "i"(-EFAULT) \ ); \ }) #define __get_user(x, ptr) \ Loading @@ -231,7 +237,13 @@ extern long strnlen_user(const char *src, long count); __gu_err; \ }) #define __get_user_asm(insn, __gu_ptr, __gu_val, __gu_err) \ #define get_user(x, ptr) \ ({ \ access_ok(VERIFY_READ, (ptr), sizeof(*(ptr))) \ ? __get_user((x), (ptr)) : -EFAULT; \ }) #define __put_user_asm(insn, __gu_ptr, __gu_val, __gu_err) \ ({ \ __asm__ __volatile__ ( \ "1:" insn " %1, %2, r0;" \ Loading @@ -244,11 +256,30 @@ extern long strnlen_user(const char *src, long count); __EX_TABLE_SECTION \ ".word 1b,3b;" \ ".previous;" \ : "=&r"(__gu_err), "=r"(__gu_val) \ : "r"(__gu_ptr), "i"(-EFAULT) \ : "=&r"(__gu_err) \ : "r"(__gu_val), "r"(__gu_ptr), "i"(-EFAULT) \ ); \ }) #define __put_user_asm_8(__gu_ptr, __gu_val, __gu_err) \ ({ \ __asm__ __volatile__ (" lwi %0, %1, 0;" \ "1: swi %0, %2, 0;" \ " lwi %0, %1, 4;" \ "2: swi %0, %2, 4;" \ " addk %0, r0, r0;" \ "3: " \ __FIXUP_SECTION \ "4: brid 3b;" \ " addik %0, r0, %3;" \ ".previous;" \ __EX_TABLE_SECTION \ ".word 1b,4b,2b,4b;" \ ".previous;" \ : "=&r"(__gu_err) \ : "r"(&__gu_val), "r"(__gu_ptr), "i"(-EFAULT) \ ); \ }) #define __put_user(x, ptr) \ ({ \ Loading @@ -273,43 +304,10 @@ extern long strnlen_user(const char *src, long count); __gu_err; \ }) #define __put_user_asm_8(__gu_ptr, __gu_val, __gu_err) \ ({ \ __asm__ __volatile__ (" lwi %0, %1, 0; \ 1: swi %0, %2, 0; \ lwi %0, %1, 4; \ 2: swi %0, %2, 4; \ addk %0,r0,r0; \ 3: \ .section .fixup,\"ax\"; \ 4: brid 3b; \ addik %0, r0, %3; \ .previous; \ .section __ex_table,\"a\"; \ .word 1b,4b,2b,4b; \ .previous;" \ : "=&r"(__gu_err) \ : "r"(&__gu_val), \ "r"(__gu_ptr), "i"(-EFAULT) \ ); \ }) #define __put_user_asm(insn, __gu_ptr, __gu_val, __gu_err) \ #define put_user(x, ptr) \ ({ \ __asm__ __volatile__ ( \ "1:" insn " %1, %2, r0; \ addk %0, r0, r0; \ 2: \ .section .fixup,\"ax\"; \ 3: brid 2b; \ addik %0, r0, %3; \ .previous; \ .section __ex_table,\"a\"; \ .word 1b,3b; \ .previous;" \ : "=r"(__gu_err) \ : "r"(__gu_val), "r"(__gu_ptr), "i"(-EFAULT) \ ); \ access_ok(VERIFY_WRITE, (ptr), sizeof(*(ptr))) \ ? __put_user((x), (ptr)) : -EFAULT; \ }) /* Return: number of not copied bytes, i.e. 0 if OK or non-zero if fail. */ Loading Loading
arch/microblaze/include/asm/uaccess.h +49 −51 Original line number Diff line number Diff line Loading @@ -197,16 +197,22 @@ extern long strnlen_user(const char *src, long count); * already performed before the finction (macro) is called. */ #define get_user(x, ptr) \ ({ \ access_ok(VERIFY_READ, (ptr), sizeof(*(ptr))) \ ? __get_user((x), (ptr)) : -EFAULT; \ }) #define put_user(x, ptr) \ #define __get_user_asm(insn, __gu_ptr, __gu_val, __gu_err) \ ({ \ access_ok(VERIFY_WRITE, (ptr), sizeof(*(ptr))) \ ? __put_user((x), (ptr)) : -EFAULT; \ __asm__ __volatile__ ( \ "1:" insn " %1, %2, r0;" \ " addk %0, r0, r0;" \ "2: " \ __FIXUP_SECTION \ "3: brid 2b; " \ " addik %0, r0, %3;" \ ".previous;" \ __EX_TABLE_SECTION \ ".word 1b,3b;" \ ".previous;" \ : "=&r"(__gu_err), "=r"(__gu_val) \ : "r"(__gu_ptr), "i"(-EFAULT) \ ); \ }) #define __get_user(x, ptr) \ Loading @@ -231,7 +237,13 @@ extern long strnlen_user(const char *src, long count); __gu_err; \ }) #define __get_user_asm(insn, __gu_ptr, __gu_val, __gu_err) \ #define get_user(x, ptr) \ ({ \ access_ok(VERIFY_READ, (ptr), sizeof(*(ptr))) \ ? __get_user((x), (ptr)) : -EFAULT; \ }) #define __put_user_asm(insn, __gu_ptr, __gu_val, __gu_err) \ ({ \ __asm__ __volatile__ ( \ "1:" insn " %1, %2, r0;" \ Loading @@ -244,11 +256,30 @@ extern long strnlen_user(const char *src, long count); __EX_TABLE_SECTION \ ".word 1b,3b;" \ ".previous;" \ : "=&r"(__gu_err), "=r"(__gu_val) \ : "r"(__gu_ptr), "i"(-EFAULT) \ : "=&r"(__gu_err) \ : "r"(__gu_val), "r"(__gu_ptr), "i"(-EFAULT) \ ); \ }) #define __put_user_asm_8(__gu_ptr, __gu_val, __gu_err) \ ({ \ __asm__ __volatile__ (" lwi %0, %1, 0;" \ "1: swi %0, %2, 0;" \ " lwi %0, %1, 4;" \ "2: swi %0, %2, 4;" \ " addk %0, r0, r0;" \ "3: " \ __FIXUP_SECTION \ "4: brid 3b;" \ " addik %0, r0, %3;" \ ".previous;" \ __EX_TABLE_SECTION \ ".word 1b,4b,2b,4b;" \ ".previous;" \ : "=&r"(__gu_err) \ : "r"(&__gu_val), "r"(__gu_ptr), "i"(-EFAULT) \ ); \ }) #define __put_user(x, ptr) \ ({ \ Loading @@ -273,43 +304,10 @@ extern long strnlen_user(const char *src, long count); __gu_err; \ }) #define __put_user_asm_8(__gu_ptr, __gu_val, __gu_err) \ ({ \ __asm__ __volatile__ (" lwi %0, %1, 0; \ 1: swi %0, %2, 0; \ lwi %0, %1, 4; \ 2: swi %0, %2, 4; \ addk %0,r0,r0; \ 3: \ .section .fixup,\"ax\"; \ 4: brid 3b; \ addik %0, r0, %3; \ .previous; \ .section __ex_table,\"a\"; \ .word 1b,4b,2b,4b; \ .previous;" \ : "=&r"(__gu_err) \ : "r"(&__gu_val), \ "r"(__gu_ptr), "i"(-EFAULT) \ ); \ }) #define __put_user_asm(insn, __gu_ptr, __gu_val, __gu_err) \ #define put_user(x, ptr) \ ({ \ __asm__ __volatile__ ( \ "1:" insn " %1, %2, r0; \ addk %0, r0, r0; \ 2: \ .section .fixup,\"ax\"; \ 3: brid 2b; \ addik %0, r0, %3; \ .previous; \ .section __ex_table,\"a\"; \ .word 1b,3b; \ .previous;" \ : "=r"(__gu_err) \ : "r"(__gu_val), "r"(__gu_ptr), "i"(-EFAULT) \ ); \ access_ok(VERIFY_WRITE, (ptr), sizeof(*(ptr))) \ ? __put_user((x), (ptr)) : -EFAULT; \ }) /* Return: number of not copied bytes, i.e. 0 if OK or non-zero if fail. */ Loading