1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-21 15:55:07 +00: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:
Andreas Kling 2019-11-03 20:48:35 +01:00
parent 2cfc43c982
commit 3dce0f23f4
4 changed files with 9 additions and 9 deletions

View file

@ -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{" << &region << "} '" << 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 (&region == m_master_tls_region)
child->m_master_tls_region = &child->m_regions.last();