@@ -23,7 +23,7 @@ extern vaddr_t directmap_virt_start;
#define gaddr_to_gfn(ga) _gfn(paddr_to_pfn(ga))
#define mfn_to_maddr(mfn) pfn_to_paddr(mfn_x(mfn))
#define maddr_to_mfn(ma) _mfn(paddr_to_pfn(ma))
-#define vmap_to_mfn(va) maddr_to_mfn(virt_to_maddr((vaddr_t)(va)))
+#define vmap_to_mfn(va) _vmap_to_mfn((vaddr_t)(va))
#define vmap_to_page(va) mfn_to_page(vmap_to_mfn(va))
static inline void *maddr_to_virt(paddr_t ma)
@@ -210,6 +210,15 @@ static inline pte_t pte_from_mfn(mfn_t mfn, unsigned int flags)
pte_t pt_walk(vaddr_t va, unsigned int *pte_level);
+static inline mfn_t _vmap_to_mfn(vaddr_t va)
+{
+ pte_t entry = pt_walk(va, NULL);
+
+ BUG_ON(!pte_is_mapping(entry));
+
+ return mfn_from_pte(entry);
+}
+
#endif /* __ASSEMBLY__ */
#endif /* ASM__RISCV__PAGE_H */