lib: Handle traps when doing unpriv load/store in get_insn()
authorAnup Patel <anup.patel@wdc.com>
Mon, 12 Aug 2019 06:20:22 +0000 (11:50 +0530)
committerAnup Patel <anup.patel@wdc.com>
Tue, 13 Aug 2019 04:18:40 +0000 (09:48 +0530)
commita88e424f6c3a42a38e9395726d9fd4e50a96abd2
tree74804eabd44a8007c7a3a1ea62f710d68af53fbd
parent2e0f3ac758da99fb6d1b4c651643999d83cd0a7f
lib: Handle traps when doing unpriv load/store in get_insn()

We can get a page/access trap when doing unpriv load/store in
get_insn() function because on a SMP system Linux swapper running
on HART A can unmap pages from page table used by HART B.

To tackle this we extend get_insn() implementation so that if
we get trap in get_insn() then we redirect it to S-mode as fetch
page/access fault.

Signed-off-by: Anup Patel <anup.patel@wdc.com>
include/sbi/riscv_unpriv.h
lib/sbi/riscv_unpriv.c
lib/sbi/sbi_illegal_insn.c
lib/sbi/sbi_misaligned_ldst.c