소스 검색

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.
Andreas Kling 3 년 전
부모
커밋
8e0387e674
3개의 변경된 파일13개의 추가작업 그리고 10개의 파일을 삭제
  1. 6 6
      Kernel/Memory/MemoryManager.cpp
  2. 2 2
      Kernel/Memory/MemoryManager.h
  3. 5 2
      Kernel/Memory/Region.cpp

+ 6 - 6
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);
     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);
     SpinlockLocker lock(s_mm_lock);
-    if (region.is_kernel())
-        m_kernel_regions.insert(region.vaddr().get(), &region);
+    m_kernel_regions.insert(region.vaddr().get(), &region);
 }
 }
 
 
-void MemoryManager::unregister_region(Region& region)
+void MemoryManager::unregister_kernel_region(Region& region)
 {
 {
+    VERIFY(region.is_kernel());
     SpinlockLocker lock(s_mm_lock);
     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()
 void MemoryManager::dump_kernel_regions()

+ 2 - 2
Kernel/Memory/MemoryManager.h

@@ -248,8 +248,8 @@ private:
     void initialize_physical_pages();
     void initialize_physical_pages();
     void register_reserved_ranges();
     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 protect_kernel_image();
     void parse_memory_map();
     void parse_memory_map();

+ 5 - 2
Kernel/Memory/Region.cpp

@@ -34,7 +34,9 @@ Region::Region(VirtualRange const& range, NonnullRefPtr<VMObject> vmobject, size
     VERIFY((m_range.size() % PAGE_SIZE) == 0);
     VERIFY((m_range.size() % PAGE_SIZE) == 0);
 
 
     m_vmobject->add_region(*this);
     m_vmobject->add_region(*this);
-    MM.register_region(*this);
+
+    if (is_kernel())
+        MM.register_kernel_region(*this);
 }
 }
 
 
 Region::~Region()
 Region::~Region()
@@ -46,7 +48,8 @@ Region::~Region()
 
 
     m_vmobject->remove_region(*this);
     m_vmobject->remove_region(*this);
 
 
-    MM.unregister_region(*this);
+    if (is_kernel())
+        MM.unregister_kernel_region(*this);
 
 
     if (m_page_directory) {
     if (m_page_directory) {
         SpinlockLocker page_lock(m_page_directory->get_lock());
         SpinlockLocker page_lock(m_page_directory->get_lock());