From 426da8be0db33405b0cfe53108b65040623972f0 Mon Sep 17 00:00:00 2001 From: Kimplul Date: Sat, 11 Jun 2022 19:08:18 +0300 Subject: continue documentation --- arch/riscv64/kernel/entry.S | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'arch/riscv64/kernel/entry.S') diff --git a/arch/riscv64/kernel/entry.S b/arch/riscv64/kernel/entry.S index a5427a7..ee7b10f 100644 --- a/arch/riscv64/kernel/entry.S +++ b/arch/riscv64/kernel/entry.S @@ -25,8 +25,8 @@ _save_context: sr sp, offsetof_sp(tp) mv sp, tp - /* set scratch to 0 and move thread pointer back */ - csrrw tp, CSR_SSCRATCH, x0 + /* move thread pointer back */ + csrrw tp, CSR_SSCRATCH, tp /* save registers */ sr ra, offsetof_ra(sp) @@ -60,6 +60,10 @@ _save_context: sr t5, offsetof_t5(sp) sr t6, offsetof_t6(sp) + /* get current tcb into tp and set scratch to 0 so we can figure out if + * exception occured in kernel or userspace */ + csrrw tp, CSR_SSCRATCH, x0 + /* load supervisor cause */ csrr s4, CSR_SCAUSE /* interrupts fall through, exceptions jump */ @@ -85,9 +89,6 @@ handle_syscall: /* TODO: is a whole function call necessary? */ mv s0, a0 mv s1, a1 - /* get current tcb */ - call cur_tcb - mv tp, a0 /* get associated kernel stack */ mv sp, tp addi sp, sp, -sizeof_registers -- cgit v1.3