- return result;
-}
-
-void vmm_unmap_page(void* vpn) {
- uintptr_t pd_offset = PD_INDEX(vpn);
- uintptr_t pt_offset = PT_INDEX(vpn);
- ptd_t* self_pde = PTD_BASE_VADDR;
-
- ptd_t pde = self_pde[pd_offset];
-
- if (pde) {
- pt_t* pt = (pt_t*)PT_VADDR(pd_offset);
- uint32_t pte = pt[pt_offset];
- if (IS_CACHED(pte) && pmm_free_page(pte)) {
- // 刷新TLB
- #ifdef __ARCH_IA32
- __asm__("invlpg (%0)" :: "r"((uintptr_t)vpn) : "memory");
- #endif
- }
- pt[pt_offset] = 0;
- }
-}
-
-void* vmm_v2p(void* va) {
- uintptr_t pd_offset = PD_INDEX(va);
- uintptr_t pt_offset = PT_INDEX(va);
- uintptr_t po = PG_OFFSET(va);
- ptd_t* self_pde = PTD_BASE_VADDR;