lib: sbi_trap: change flush tlb in all cases
As flush tlb in interrupt and mode switch is not enough. Flush tlb in all cases. Signed-off-by: Inochi Amaoto <inochiama@outlook.com>
This commit is contained in:
committed by
xingxg2022
parent
b210bc000c
commit
64fb41e927
@@ -268,16 +268,16 @@ struct sbi_trap_regs *sbi_trap_handler(struct sbi_trap_regs *regs)
|
|||||||
ulong mtval = csr_read(CSR_MTVAL), mtval2 = 0, mtinst = 0;
|
ulong mtval = csr_read(CSR_MTVAL), mtval2 = 0, mtinst = 0;
|
||||||
struct sbi_trap_info trap;
|
struct sbi_trap_info trap;
|
||||||
|
|
||||||
|
if (misa_extension('S')) {
|
||||||
|
__asm__ __volatile__("sfence.vma");
|
||||||
|
}
|
||||||
|
|
||||||
if (misa_extension('H')) {
|
if (misa_extension('H')) {
|
||||||
mtval2 = csr_read(CSR_MTVAL2);
|
mtval2 = csr_read(CSR_MTVAL2);
|
||||||
mtinst = csr_read(CSR_MTINST);
|
mtinst = csr_read(CSR_MTINST);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mcause & (1UL << (__riscv_xlen - 1))) {
|
if (mcause & (1UL << (__riscv_xlen - 1))) {
|
||||||
if (misa_extension('S')) {
|
|
||||||
__asm__ __volatile__("sfence.vma");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sbi_hart_has_extension(sbi_scratch_thishart_ptr(),
|
if (sbi_hart_has_extension(sbi_scratch_thishart_ptr(),
|
||||||
SBI_HART_EXT_SMAIA))
|
SBI_HART_EXT_SMAIA))
|
||||||
rc = sbi_trap_aia_irq(regs, mcause);
|
rc = sbi_trap_aia_irq(regs, mcause);
|
||||||
@@ -322,10 +322,6 @@ struct sbi_trap_regs *sbi_trap_handler(struct sbi_trap_regs *regs)
|
|||||||
trap.tinst = mtinst;
|
trap.tinst = mtinst;
|
||||||
trap.gva = sbi_regs_gva(regs);
|
trap.gva = sbi_regs_gva(regs);
|
||||||
|
|
||||||
if (misa_extension('S')) {
|
|
||||||
__asm__ __volatile__("sfence.vma");
|
|
||||||
}
|
|
||||||
|
|
||||||
rc = sbi_trap_redirect(regs, &trap);
|
rc = sbi_trap_redirect(regs, &trap);
|
||||||
break;
|
break;
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user