On Wed, 30 Mar 2022 at 10:28, Atish Patra <ati...@atishpatra.org> wrote: > > I tested on v5.17 built from defconfig for rv64. > > Here is the kernel code executing sfence.vma > https://elixir.bootlin.com/linux/v5.17/source/arch/riscv/kernel/head.S#L122 >
I believe this is a kernel bug and not a QEMU one. They perform a write to the SATP with the same ASID as the one used before (0) and then expect it to be used, without performing an sfence.vma following it. This was exposed by my change, as previously the write to the satp was performed in the same TB block as the sfence.vma *before it*, which meant the TLB was not filled in between the previous sfence and the write to SATP following it. I was able to reproduce the issue with the Fedora Rawhide image in the wiki, and I was able to resolve it by artificially forcing a TLB flush following all writes to SATP. I think the correct course of action here is to: 1. Report the issue to the linux kernel mailing list and/or contribute a patch that adds said missing sfence.vma following the SATP write. (Atish: Are you able to test if adding an sfence.vma in your kernel build fixes the issue?) 2. Restore the patch > > -- > Regards, > Atish Idan Horowitz