Index: sys/riscv/riscv/pmap.c =================================================================== --- sys/riscv/riscv/pmap.c +++ sys/riscv/riscv/pmap.c @@ -1699,11 +1699,11 @@ void pmap_remove(pmap_t pmap, vm_offset_t sva, vm_offset_t eva) { + struct spglist free; struct rwlock *lock; - vm_offset_t va, va_next; + vm_offset_t va_next; pd_entry_t *l1, *l2; pt_entry_t l3_pte, *l3; - struct spglist free; /* * Perform an unsynchronized read. This is, however, safe. @@ -1758,28 +1758,16 @@ if (va_next > eva) va_next = eva; - va = va_next; for (l3 = pmap_l2_to_l3(l2, sva); sva != va_next; l3++, sva += L3_SIZE) { - if (l3 == NULL) - panic("l3 == NULL"); - if (pmap_load(l3) == 0) { - if (va != va_next) { - pmap_invalidate_range(pmap, va, sva); - va = va_next; - } + if (pmap_load(l3) == 0) continue; - } - if (va == va_next) - va = sva; if (pmap_remove_l3(pmap, l3, sva, l3_pte, &free, &lock)) { sva += L3_SIZE; break; } } - if (va != va_next) - pmap_invalidate_range(pmap, va, sva); } if (lock != NULL) rw_wunlock(lock);