diff --git a/sys/riscv/include/cpufunc.h b/sys/riscv/include/cpufunc.h index 75b22632c54..c39f17131eb 100644 --- a/sys/riscv/include/cpufunc.h +++ b/sys/riscv/include/cpufunc.h @@ -119,6 +119,13 @@ sfence_vma_asid_page(uint64_t asid, uintptr_t addr) : "memory"); } +static __inline void +hfence_gvma(void) +{ + + __asm __volatile("hfence.gvma" ::: "memory"); +} + #define rdcycle() csr_read64(cycle) #define rdtime() csr_read64(time) #define rdinstret() csr_read64(instret) diff --git a/sys/riscv/vmm/vmm_riscv.c b/sys/riscv/vmm/vmm_riscv.c index cfd3decd8cf..fe2ca5c0778 100644 --- a/sys/riscv/vmm/vmm_riscv.c +++ b/sys/riscv/vmm/vmm_riscv.c @@ -625,7 +625,7 @@ vmmops_run(void *vcpui, register_t pc, pmap_t pmap, struct vm_eventinfo *evinfo) * have been modified, it may be necessary to execute an HFENCE.GVMA * instruction (see Section 5.3.2) before or after writing hgatp. */ - __asm __volatile("hfence.gvma" ::: "memory"); + hfence_gvma(); csr_write(hgatp, pmap->pm_satp); if (has_sstc)