summaryrefslogtreecommitdiff
path: root/arch/riscv/include/asm/entry-common.h
diff options
context:
space:
mode:
authorClément Léger <cleger@rivosinc.com>2023-10-04 18:13:59 +0300
committerPalmer Dabbelt <palmer@rivosinc.com>2023-11-01 18:34:53 +0300
commit7c83232161f609bbc452a1255f823f41afc411dd (patch)
tree8c03bf915d29719e12c25ba4ec0e805b3c5e10de /arch/riscv/include/asm/entry-common.h
parentf19c3b4239f5bfb69aacbaf75d4277c095e7aa7d (diff)
downloadlinux-7c83232161f609bbc452a1255f823f41afc411dd.tar.xz
riscv: add support for misaligned trap handling in S-mode
Misalignment trap handling is only supported for M-mode and uses direct accesses to user memory. In S-mode, when handling usermode fault, this requires to use the get_user()/put_user() accessors. Implement load_u8(), store_u8() and get_insn() using these accessors for userspace and direct text access for kernel. Signed-off-by: Clément Léger <cleger@rivosinc.com> Reviewed-by: Björn Töpel <bjorn@rivosinc.com> Link: https://lore.kernel.org/r/20231004151405.521596-3-cleger@rivosinc.com Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
Diffstat (limited to 'arch/riscv/include/asm/entry-common.h')
-rw-r--r--arch/riscv/include/asm/entry-common.h14
1 files changed, 14 insertions, 0 deletions
diff --git a/arch/riscv/include/asm/entry-common.h b/arch/riscv/include/asm/entry-common.h
index 6e4dee49d84b..7ab5e34318c8 100644
--- a/arch/riscv/include/asm/entry-common.h
+++ b/arch/riscv/include/asm/entry-common.h
@@ -8,4 +8,18 @@
void handle_page_fault(struct pt_regs *regs);
void handle_break(struct pt_regs *regs);
+#ifdef CONFIG_RISCV_MISALIGNED
+int handle_misaligned_load(struct pt_regs *regs);
+int handle_misaligned_store(struct pt_regs *regs);
+#else
+static inline int handle_misaligned_load(struct pt_regs *regs)
+{
+ return -1;
+}
+static inline int handle_misaligned_store(struct pt_regs *regs)
+{
+ return -1;
+}
+#endif
+
#endif /* _ASM_RISCV_ENTRY_COMMON_H */