target/ricsv: Flush the TLB on virtulisation mode changes

To ensure our TLB isn't out-of-date we flush it on all virt mode
changes. Unlike priv mode this isn't saved in the mmu_idx as all
guests share V=1. The easiest option is just to flush on all changes.

Backports commit eccc5a12c2fd1c646c69a1e7de29183b7a559973 from qemu
This commit is contained in:
Alistair Francis 2020-03-22 01:37:18 -04:00 committed by Lioncash
parent 5adba06c29
commit 4af0dc9a7e

View File

@ -171,6 +171,11 @@ void riscv_cpu_set_virt_enabled(CPURISCVState *env, bool enable)
return;
}
/* Flush the TLB on all virt mode changes. */
if (get_field(env->virt, VIRT_ONOFF) != enable) {
tlb_flush(env_cpu(env));
}
env->virt = set_field(env->virt, VIRT_ONOFF, enable);
}