- for (size_t i = 0; i < size; i += PG_SIZE) {
- uintptr_t paddr = vmm_del_mapping(PD_REFERENCED, vaddr + i);
- pmm_free_page(KERNEL_PID, paddr);
+ pte_t* ptep = mkptep_va(VMS_SELF, vaddr);
+ for (size_t i = 0; i < size; i += PAGE_SIZE, ptep++) {
+ pte_t pte = pte_at(ptep);
+
+ set_pte(ptep, null_pte);
+ if (pte_isloaded(pte))
+ pmm_free_page(pte_paddr(pte));