mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 20:42:43 +00:00 
			
		
		
		
	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.
This commit is contained in:
		
							parent
							
								
									4fa3c1bf2d
								
							
						
					
					
						commit
						8e0387e674
					
				
					 3 changed files with 13 additions and 10 deletions
				
			
		|  | @ -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(), ®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); |     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() | ||||||
|  |  | ||||||
|  | @ -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 register_kernel_region(Region&); | ||||||
|     void unregister_region(Region&); |     void unregister_kernel_region(Region&); | ||||||
| 
 | 
 | ||||||
|     void protect_kernel_image(); |     void protect_kernel_image(); | ||||||
|     void parse_memory_map(); |     void parse_memory_map(); | ||||||
|  |  | ||||||
|  | @ -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()); | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Andreas Kling
						Andreas Kling