+static void
+__purge_vms_residual(struct proc_mm* mm, int level, ptr_t va)
+{
+ pte_t *ptep, pte;
+ ptr_t _va;
+
+ if (level >= MAX_LEVEL) {
+ return;
+ }
+
+ ptep = mklntep_va(level, mm->vm_mnt, va);
+
+ for (unsigned i = 0; i < LEVEL_SIZE; i++, ptep++)
+ {
+ pte = pte_at(ptep);
+ if (pte_isnull(pte) || !pte_isloaded(pte)) {
+ continue;
+ }
+
+ if (lntep_implie_vmnts(ptep, lnt_page_size(level))) {
+ continue;
+ }
+
+ _va = va + (i * lnt_page_size(level));
+ __purge_vms_residual(mm, level + 1, _va);
+
+ set_pte(ptep, null_pte);
+ leaflet_return(pte_leaflet_aligned(pte));
+ }
+}
+