mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 19:22:45 +00:00 
			
		
		
		
	Kernel: Move region map/unmap operations into the Region class
The more Region can take care of itself, the better.
This commit is contained in:
		
							parent
							
								
									9e03f3ce20
								
							
						
					
					
						commit
						2cfc43c982
					
				
					 5 changed files with 42 additions and 39 deletions
				
			
		|  | @ -713,35 +713,6 @@ void MemoryManager::map_region_at_address(PageDirectory& page_directory, Region& | |||
|     } | ||||
| } | ||||
| 
 | ||||
| bool MemoryManager::unmap_region(Region& region, bool deallocate_range) | ||||
| { | ||||
|     ASSERT(region.page_directory()); | ||||
|     InterruptDisabler disabler; | ||||
|     for (size_t i = 0; i < region.page_count(); ++i) { | ||||
|         auto vaddr = region.vaddr().offset(i * PAGE_SIZE); | ||||
|         auto& pte = ensure_pte(*region.page_directory(), vaddr); | ||||
|         pte.set_physical_page_base(0); | ||||
|         pte.set_present(false); | ||||
|         pte.set_writable(false); | ||||
|         pte.set_user_allowed(false); | ||||
|         region.page_directory()->flush(vaddr); | ||||
| #ifdef MM_DEBUG | ||||
|         auto& physical_page = region.vmobject().physical_pages()[region.first_page_index() + i]; | ||||
|         dbgprintf("MM: >> Unmapped V%p => P%p <<\n", vaddr, physical_page ? physical_page->paddr().get() : 0); | ||||
| #endif | ||||
|     } | ||||
|     if (deallocate_range) | ||||
|         region.page_directory()->range_allocator().deallocate(region.range()); | ||||
|     region.release_page_directory(); | ||||
|     return true; | ||||
| } | ||||
| 
 | ||||
| bool MemoryManager::map_region(Process& process, Region& region) | ||||
| { | ||||
|     map_region_at_address(process.page_directory(), region, region.vaddr()); | ||||
|     return true; | ||||
| } | ||||
| 
 | ||||
| bool MemoryManager::validate_user_read(const Process& process, VirtualAddress vaddr) const | ||||
| { | ||||
|     auto* region = region_from_vaddr(process, vaddr); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Andreas Kling
						Andreas Kling