mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 09:58:11 +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