aboutsummaryrefslogtreecommitdiff
path: root/arch/riscv64/kernel/entry.S
diff options
context:
space:
mode:
Diffstat (limited to 'arch/riscv64/kernel/entry.S')
-rw-r--r--arch/riscv64/kernel/entry.S14
1 files changed, 6 insertions, 8 deletions
diff --git a/arch/riscv64/kernel/entry.S b/arch/riscv64/kernel/entry.S
index db662bb..355cd3d 100644
--- a/arch/riscv64/kernel/entry.S
+++ b/arch/riscv64/kernel/entry.S
@@ -77,17 +77,14 @@ _save_context:
handle_exception:
li t0, EXC_SYSCALL
- /* system exceptions fall through, syscalls jump */
+ /* system exceptions fall through, syscalls and ipis jump */
/* temp, at some point we want to handle system exceptions as well */
- beq s4, t0, handle_syscall
+ beq s4, t0, handle_dispatch
j restore_all
-handle_syscall:
- /* add 4 (size of ecall) to EPC to avoid running the same instruction
- * twice */
- csrr s0, CSR_SEPC
- addi s0, s0, 4
+handle_dispatch:
/* store execution continuation point */
+ csrr s0, CSR_SEPC
sr s0, 0(tp)
/* allocate space for sys_ret structure on stack and shift argument
* registers down one to make room for the pointer to this structure */
@@ -99,7 +96,8 @@ handle_syscall:
mv a2, a1
mv a1, a0
mv a0, sp
- jal syscall_dispatch
+ /* jump to C */
+ jal dispatch
/* move structure from stack into registers. */
lr a0, offsetof_s(sp)
lr a1, offsetof_ar0(sp)