mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 10:12:45 +00:00 
			
		
		
		
	Kernel: Add mechanism to identity map the lowest 2MB
This commit is contained in:
		
							parent
							
								
									19190267a6
								
							
						
					
					
						commit
						841364b609
					
				
					 7 changed files with 40 additions and 12 deletions
				
			
		|  | @ -40,13 +40,14 @@ | |||
| 
 | ||||
| namespace Kernel { | ||||
| 
 | ||||
| Region::Region(const Range& range, NonnullRefPtr<VMObject> vmobject, size_t offset_in_vmobject, const String& name, u8 access, bool cacheable) | ||||
| Region::Region(const Range& range, NonnullRefPtr<VMObject> vmobject, size_t offset_in_vmobject, const String& name, u8 access, bool cacheable, bool kernel) | ||||
|     : m_range(range) | ||||
|     , m_offset_in_vmobject(offset_in_vmobject) | ||||
|     , m_vmobject(move(vmobject)) | ||||
|     , m_name(name) | ||||
|     , m_access(access) | ||||
|     , m_cacheable(cacheable) | ||||
|     , m_kernel(kernel) | ||||
| { | ||||
|     MM.register_region(*this); | ||||
| } | ||||
|  | @ -186,14 +187,14 @@ size_t Region::amount_shared() const | |||
| 
 | ||||
| NonnullOwnPtr<Region> Region::create_user_accessible(const Range& range, NonnullRefPtr<VMObject> vmobject, size_t offset_in_vmobject, const StringView& name, u8 access, bool cacheable) | ||||
| { | ||||
|     auto region = make<Region>(range, move(vmobject), offset_in_vmobject, name, access, cacheable); | ||||
|     auto region = make<Region>(range, move(vmobject), offset_in_vmobject, name, access, cacheable, false); | ||||
|     region->m_user_accessible = true; | ||||
|     return region; | ||||
| } | ||||
| 
 | ||||
| NonnullOwnPtr<Region> Region::create_kernel_only(const Range& range, NonnullRefPtr<VMObject> vmobject, size_t offset_in_vmobject, const StringView& name, u8 access, bool cacheable) | ||||
| { | ||||
|     auto region = make<Region>(range, move(vmobject), offset_in_vmobject, name, access, cacheable); | ||||
|     auto region = make<Region>(range, move(vmobject), offset_in_vmobject, name, access, cacheable, true); | ||||
|     region->m_user_accessible = false; | ||||
|     return region; | ||||
| } | ||||
|  | @ -268,8 +269,12 @@ void Region::unmap(ShouldDeallocateVirtualMemoryRange deallocate_range) | |||
|         dbg() << "MM: >> Unmapped " << vaddr << " => P" << String::format("%p", page ? page->paddr().get() : 0) << " <<"; | ||||
| #endif | ||||
|     } | ||||
|     if (deallocate_range == ShouldDeallocateVirtualMemoryRange::Yes) | ||||
|         m_page_directory->range_allocator().deallocate(range()); | ||||
|     if (deallocate_range == ShouldDeallocateVirtualMemoryRange::Yes) { | ||||
|         if (m_page_directory->range_allocator().contains(range())) | ||||
|             m_page_directory->range_allocator().deallocate(range()); | ||||
|         else | ||||
|             m_page_directory->identity_range_allocator().deallocate(range()); | ||||
|     } | ||||
|     m_page_directory = nullptr; | ||||
| } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Tom
						Tom