aboutsummaryrefslogtreecommitdiffstats
path: root/arch/riscv/include/asm/uaccess.h
diff options
context:
space:
mode:
authorJisheng Zhang <jszhang@kernel.org>2021-11-18 19:22:27 +0800
committerPalmer Dabbelt <palmer@rivosinc.com>2022-01-05 17:52:15 -0800
commitf8f2ad02ee438b7dbceaac947077eaf77c823646 (patch)
tree6ce8926e9235be84320e183c129d00aa1243d485 /arch/riscv/include/asm/uaccess.h
parentriscv: remove unused __cmpxchg_user() macro (diff)
downloadlinux-dev-f8f2ad02ee438b7dbceaac947077eaf77c823646.tar.xz
linux-dev-f8f2ad02ee438b7dbceaac947077eaf77c823646.zip
riscv: consolidate __ex_table construction
Consolidate all the __ex_table constuction code with a _ASM_EXTABLE helper. There should be no functional change as a result of this patch. Signed-off-by: Jisheng Zhang <jszhang@kernel.org> Reviewed-by: Kefeng Wang <wangkefeng.wang@huawei.com> Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
Diffstat (limited to 'arch/riscv/include/asm/uaccess.h')
-rw-r--r--arch/riscv/include/asm/uaccess.h30
1 files changed, 12 insertions, 18 deletions
diff --git a/arch/riscv/include/asm/uaccess.h b/arch/riscv/include/asm/uaccess.h
index 9f9219545e59..714cd311d9f1 100644
--- a/arch/riscv/include/asm/uaccess.h
+++ b/arch/riscv/include/asm/uaccess.h
@@ -10,6 +10,12 @@
#include <asm/pgtable.h> /* for TASK_SIZE */
+#define _ASM_EXTABLE(from, to) \
+ " .pushsection __ex_table, \"a\"\n" \
+ " .balign " RISCV_SZPTR " \n" \
+ " " RISCV_PTR "(" #from "), (" #to ")\n" \
+ " .popsection\n"
+
/*
* User space memory access functions
*/
@@ -93,10 +99,7 @@ do { \
" li %1, 0\n" \
" jump 2b, %2\n" \
" .previous\n" \
- " .section __ex_table,\"a\"\n" \
- " .balign " RISCV_SZPTR "\n" \
- " " RISCV_PTR " 1b, 3b\n" \
- " .previous" \
+ _ASM_EXTABLE(1b, 3b) \
: "+r" (err), "=&r" (__x), "=r" (__tmp) \
: "m" (*(ptr)), "i" (-EFAULT)); \
(x) = __x; \
@@ -125,11 +128,8 @@ do { \
" li %2, 0\n" \
" jump 3b, %3\n" \
" .previous\n" \
- " .section __ex_table,\"a\"\n" \
- " .balign " RISCV_SZPTR "\n" \
- " " RISCV_PTR " 1b, 4b\n" \
- " " RISCV_PTR " 2b, 4b\n" \
- " .previous" \
+ _ASM_EXTABLE(1b, 4b) \
+ _ASM_EXTABLE(2b, 4b) \
: "+r" (err), "=&r" (__lo), "=r" (__hi), \
"=r" (__tmp) \
: "m" (__ptr[__LSW]), "m" (__ptr[__MSW]), \
@@ -233,10 +233,7 @@ do { \
" li %0, %4\n" \
" jump 2b, %1\n" \
" .previous\n" \
- " .section __ex_table,\"a\"\n" \
- " .balign " RISCV_SZPTR "\n" \
- " " RISCV_PTR " 1b, 3b\n" \
- " .previous" \
+ _ASM_EXTABLE(1b, 3b) \
: "+r" (err), "=r" (__tmp), "=m" (*(ptr)) \
: "rJ" (__x), "i" (-EFAULT)); \
} while (0)
@@ -262,11 +259,8 @@ do { \
" li %0, %6\n" \
" jump 3b, %1\n" \
" .previous\n" \
- " .section __ex_table,\"a\"\n" \
- " .balign " RISCV_SZPTR "\n" \
- " " RISCV_PTR " 1b, 4b\n" \
- " " RISCV_PTR " 2b, 4b\n" \
- " .previous" \
+ _ASM_EXTABLE(1b, 4b) \
+ _ASM_EXTABLE(2b, 4b) \
: "+r" (err), "=r" (__tmp), \
"=m" (__ptr[__LSW]), \
"=m" (__ptr[__MSW]) \