This patch addes local_flush_tlb_page(addr) to use sfence.vma after the page table changed. That address will be used immediately in memset(nextp, 0, PAGE_SIZE) to cause this issue so we should add the sfence.vma before we use it.
Fixes: f2c17aabc917 ("RISC-V: Implement compile-time fixed mappings") Reported-by: Syven Wang <syven.w...@sifive.com> Signed-off-by: Syven Wang <syven.w...@sifive.com> Signed-off-by: Greentime Hu <greentime...@sifive.com> --- arch/riscv/mm/init.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c index f4adb3684f3d..29b0f7108054 100644 --- a/arch/riscv/mm/init.c +++ b/arch/riscv/mm/init.c @@ -202,12 +202,11 @@ void __set_fixmap(enum fixed_addresses idx, phys_addr_t phys, pgprot_t prot) ptep = &fixmap_pte[pte_index(addr)]; - if (pgprot_val(prot)) { + if (pgprot_val(prot)) set_pte(ptep, pfn_pte(phys >> PAGE_SHIFT, prot)); - } else { + else pte_clear(&init_mm, addr, ptep); - local_flush_tlb_page(addr); - } + local_flush_tlb_page(addr); } static pte_t *__init get_pte_virt(phys_addr_t pa) -- 2.28.0