From 8e0387e67451d45ec4facdf376dc8ce473f7a0b0 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sat, 15 Jan 2022 17:01:53 +0100 Subject: [PATCH] Kernel: Only register kernel regions with MemoryManager We were already only tracking kernel regions, this patch just makes it more clear by having it reflected in the name of the registration helpers. We also stop calling them for userspace regions, avoiding some spinlock action in such cases. --- Kernel/Memory/MemoryManager.cpp | 12 ++++++------ Kernel/Memory/MemoryManager.h | 4 ++-- Kernel/Memory/Region.cpp | 7 +++++-- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/Kernel/Memory/MemoryManager.cpp b/Kernel/Memory/MemoryManager.cpp index 81ffa1db39..75ad1c9800 100644 --- a/Kernel/Memory/MemoryManager.cpp +++ b/Kernel/Memory/MemoryManager.cpp @@ -1107,18 +1107,18 @@ bool MemoryManager::validate_user_stack(AddressSpace& space, VirtualAddress vadd return validate_user_stack_no_lock(space, vaddr); } -void MemoryManager::register_region(Region& region) +void MemoryManager::register_kernel_region(Region& region) { + VERIFY(region.is_kernel()); SpinlockLocker lock(s_mm_lock); - if (region.is_kernel()) - m_kernel_regions.insert(region.vaddr().get(), ®ion); + m_kernel_regions.insert(region.vaddr().get(), ®ion); } -void MemoryManager::unregister_region(Region& region) +void MemoryManager::unregister_kernel_region(Region& region) { + VERIFY(region.is_kernel()); SpinlockLocker lock(s_mm_lock); - if (region.is_kernel()) - m_kernel_regions.remove(region.vaddr().get()); + m_kernel_regions.remove(region.vaddr().get()); } void MemoryManager::dump_kernel_regions() diff --git a/Kernel/Memory/MemoryManager.h b/Kernel/Memory/MemoryManager.h index cdd23c3a47..4a5e5e5137 100644 --- a/Kernel/Memory/MemoryManager.h +++ b/Kernel/Memory/MemoryManager.h @@ -248,8 +248,8 @@ private: void initialize_physical_pages(); void register_reserved_ranges(); - void register_region(Region&); - void unregister_region(Region&); + void register_kernel_region(Region&); + void unregister_kernel_region(Region&); void protect_kernel_image(); void parse_memory_map(); diff --git a/Kernel/Memory/Region.cpp b/Kernel/Memory/Region.cpp index e4254c7184..fa2eaba113 100644 --- a/Kernel/Memory/Region.cpp +++ b/Kernel/Memory/Region.cpp @@ -34,7 +34,9 @@ Region::Region(VirtualRange const& range, NonnullRefPtr vmobject, size VERIFY((m_range.size() % PAGE_SIZE) == 0); m_vmobject->add_region(*this); - MM.register_region(*this); + + if (is_kernel()) + MM.register_kernel_region(*this); } Region::~Region() @@ -46,7 +48,8 @@ Region::~Region() m_vmobject->remove_region(*this); - MM.unregister_region(*this); + if (is_kernel()) + MM.unregister_kernel_region(*this); if (m_page_directory) { SpinlockLocker page_lock(m_page_directory->get_lock());