1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 10:48:11 +00:00

Kernel: Don't bother with page tables for PROT_NONE mappings

When mapping or unmapping completely inaccessible memory regions,
we don't need to update the page tables at all. This saves a bunch of
time in some situations, most notably during dynamic linking, where we
make a large VM reservation and immediately throw it away. :^)
This commit is contained in:
Andreas Kling 2022-01-15 17:37:17 +01:00
parent 9ddccbc6da
commit c6adefcfc0
2 changed files with 18 additions and 5 deletions

View file

@ -191,7 +191,14 @@ ErrorOr<Region*> AddressSpace::allocate_region_with_vmobject(VirtualRange const&
region_name = TRY(KString::try_create(name));
auto region = TRY(Region::try_create_user_accessible(range, move(vmobject), offset_in_vmobject, move(region_name), prot_to_region_access_flags(prot), Region::Cacheable::Yes, shared));
auto* added_region = TRY(add_region(move(region)));
TRY(added_region->map(page_directory(), ShouldFlushTLB::No));
if (prot == PROT_NONE) {
// For PROT_NONE mappings, we don't have to set up any page table mappings.
// We do still need to attach the region to the page_directory though.
SpinlockLocker mm_locker(s_mm_lock);
added_region->set_page_directory(page_directory());
} else {
TRY(added_region->map(page_directory(), ShouldFlushTLB::No));
}
return added_region;
}