mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-01-23 17:52:26 -05:00
Kernel: Regions should be mapped into a PageDirectory, not a Process
This patch changes the parameter to Region::map() to be a PageDirectory since that matches how we think about the memory model: Regions are views onto VMObjects, and are mapped into PageDirectories. Each Process has a PageDirectory. The kernel also has a PageDirectory.
This commit is contained in:
parent
2cfc43c982
commit
3dce0f23f4
Notes:
sideshowbarker
2024-07-19 11:26:38 +09:00
Author: https://github.com/awesomekling Commit: https://github.com/SerenityOS/serenity/commit/3dce0f23f4d
4 changed files with 9 additions and 9 deletions
|
@ -122,7 +122,7 @@ Region* Process::allocate_region(VirtualAddress vaddr, size_t size, const String
|
|||
if (!range.is_valid())
|
||||
return nullptr;
|
||||
m_regions.append(Region::create_user_accessible(range, name, prot_to_region_access_flags(prot)));
|
||||
m_regions.last().map(*this);
|
||||
m_regions.last().map(page_directory());
|
||||
if (commit)
|
||||
m_regions.last().commit();
|
||||
return &m_regions.last();
|
||||
|
@ -134,7 +134,7 @@ Region* Process::allocate_file_backed_region(VirtualAddress vaddr, size_t size,
|
|||
if (!range.is_valid())
|
||||
return nullptr;
|
||||
m_regions.append(Region::create_user_accessible(range, inode, name, prot_to_region_access_flags(prot)));
|
||||
m_regions.last().map(*this);
|
||||
m_regions.last().map(page_directory());
|
||||
return &m_regions.last();
|
||||
}
|
||||
|
||||
|
@ -145,7 +145,7 @@ Region* Process::allocate_region_with_vmo(VirtualAddress vaddr, size_t size, Non
|
|||
return nullptr;
|
||||
offset_in_vmo &= PAGE_MASK;
|
||||
m_regions.append(Region::create_user_accessible(range, move(vmo), offset_in_vmo, name, prot_to_region_access_flags(prot)));
|
||||
m_regions.last().map(*this);
|
||||
m_regions.last().map(page_directory());
|
||||
return &m_regions.last();
|
||||
}
|
||||
|
||||
|
@ -267,7 +267,7 @@ int Process::sys$munmap(void* addr, size_t size)
|
|||
|
||||
// And finally we map the new region(s).
|
||||
for (auto* new_region : new_regions) {
|
||||
new_region->map(*this);
|
||||
new_region->map(page_directory());
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
@ -313,7 +313,7 @@ Process* Process::fork(RegisterDump& regs)
|
|||
dbg() << "fork: cloning Region{" << ®ion << "} '" << region.name() << "' @ " << region.vaddr();
|
||||
#endif
|
||||
child->m_regions.append(region.clone());
|
||||
child->m_regions.last().map(*child);
|
||||
child->m_regions.last().map(child->page_directory());
|
||||
|
||||
if (®ion == m_master_tls_region)
|
||||
child->m_master_tls_region = &child->m_regions.last();
|
||||
|
|
|
@ -483,7 +483,7 @@ OwnPtr<Region> MemoryManager::allocate_kernel_region(size_t size, const StringVi
|
|||
region = Region::create_user_accessible(range, name, PROT_READ | PROT_WRITE | PROT_EXEC);
|
||||
else
|
||||
region = Region::create_kernel_only(range, name, PROT_READ | PROT_WRITE | PROT_EXEC);
|
||||
MM.map_region_at_address(*m_kernel_page_directory, *region, range.base());
|
||||
region->map(kernel_page_directory());
|
||||
// FIXME: It would be cool if these could zero-fill on demand instead.
|
||||
if (should_commit)
|
||||
region->commit();
|
||||
|
|
|
@ -216,7 +216,7 @@ void Region::unmap(ShouldDeallocateVirtualMemoryRange deallocate_range)
|
|||
release_page_directory();
|
||||
}
|
||||
|
||||
void Region::map(Process& process)
|
||||
void Region::map(PageDirectory& page_directory)
|
||||
{
|
||||
MM.map_region_at_address(process.page_directory(), *this, vaddr());
|
||||
MM.map_region_at_address(page_directory, *this, vaddr());
|
||||
}
|
||||
|
|
|
@ -114,7 +114,7 @@ public:
|
|||
m_access &= ~Access::Write;
|
||||
}
|
||||
|
||||
void map(Process&);
|
||||
void map(PageDirectory&);
|
||||
enum class ShouldDeallocateVirtualMemoryRange {
|
||||
No,
|
||||
Yes,
|
||||
|
|
Loading…
Add table
Reference in a new issue