From f5ff79697024eb5641d046f7a5a4897aa832d134 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Wed, 7 Aug 2019 21:55:52 +0200 Subject: [PATCH] Kernel: Always give back VM to the RangeAllocator when unmapping Region We were only doing this in Process::deallocate_region(), which meant that kernel-only Regions never gave back their VM. With this patch, we can start reusing freed-up address space! :^) --- Kernel/Process.cpp | 1 - Kernel/VM/MemoryManager.cpp | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/Kernel/Process.cpp b/Kernel/Process.cpp index 850b95c7a0..a2cf5c0a1b 100644 --- a/Kernel/Process.cpp +++ b/Kernel/Process.cpp @@ -142,7 +142,6 @@ bool Process::deallocate_region(Region& region) InterruptDisabler disabler; for (int i = 0; i < m_regions.size(); ++i) { if (&m_regions[i] == ®ion) { - page_directory().range_allocator().deallocate({ region.vaddr(), region.size() }); MM.unmap_region(region); m_regions.remove(i); return true; diff --git a/Kernel/VM/MemoryManager.cpp b/Kernel/VM/MemoryManager.cpp index 6a73d037d7..491b8fa080 100644 --- a/Kernel/VM/MemoryManager.cpp +++ b/Kernel/VM/MemoryManager.cpp @@ -742,6 +742,7 @@ bool MemoryManager::unmap_region(Region& region) dbgprintf("MM: >> Unmapped L%x => P%x <<\n", vaddr, physical_page ? physical_page->paddr().get() : 0); #endif } + region.page_directory()->range_allocator().deallocate({ region.vaddr(), region.size() }); region.release_page_directory(); return true; }